روشن و خاموش کردن بانک‌اطلاعاتی


تاریخ انتشار: 1398/تیر/13
نویسنده:مهندس امیر مکرم
گروه دانش : Oracle Datebase
تعداد بازدید: 33 مرتبه
اشتراک گذاری:


در پایگاه‌داده اوراکل میتوان بانک اطلاعاتی را با وضعیت‌های مختلف راه اندازی کرد. برای اینکار باید با کاربر SYS وارد محیط SQLPLUS شد(تنها کاربری که می‌تونه این کارو انجام بده چون کاربران دیگه role مربوطه رو ندارند). بانک‌اطلاعاتی برای راه اندازی کامل سه مرحله را پشت سر می گذارد.

  • STARTUP NOMOUNT: در این حالت فضای SGA اختصاص داده می‌شود. (رم از سیستم‌عامل گرفته می‌شود)، در حقیقت در این وضعیت تنها خود Instance راه اندازی شده ولی Control File خوانده نشده و Data File ها نیز برای استفاده باز نمی شوند و هیچ اتصالی نیز به بانک اطلاعتی وجود ندارد.

نکته: گاهی اوقات به هنگام انجام کارهای مربوط به نگهداری و Recovery بانک اطلاعاتی نمی توان بانک اطلاعاتی را برای دسترسی تمام کاربران باز نمود. به همین دلیل باز نمودن بانک اطلاعاتی در این حالت ضروری است. همچنین از حالت NOMOUNT به هنگام ایجاد بانک اطلاعاتی و ایجاد مجدد Control File ها استفاده می شود. 

  • STARTUP MOUNT: در این حالت Data File ها دوباره خوانده شده ولی بانک اطلاعاتی سرویس‌دهی نخواهد کرد. در حقیقت Instance به بانک اطلاعاتی متصل شده، Control Fileها را باز نموده و نام و مسیر Data File ها و Redo Log File ها را از آن ها می خواند، ولی هیچ تغییری نمی توان روی داده های بانک اطلاعاتی انجام داد. چون در این حالت هنوز به Data File های بانک اطلاعاتی نمی توان دسترسی داشت.

در صورتی که بانک اطلاعاتی قبلاً در حالت NOMOUNT راه اندازی شده باشد، می توان با استفاده از دستور زیر آن را در حالت MOUNT قرار داد:

SQL> ALTER DATABASE MOUNT;

همچنین با استفاده از دستور زیر می توان مستقیماً بانک اطلاعاتی را در حالت MOUNT راه اندازی نمود: 

SQL> STARTUP MOUNT;

معمولاً هنگامی که نیاز به Recovery کامل بانک اطلاعاتی ، تغییر نام Data Fileها، تغییر به حالت Archive Log Mode و غیره می باشد، لازم است تا بانک اطلاعاتی را در حالت MOUNT راه اندازی نمود.

  • STARTUP OPEN: در این حالت بانک اطلاعاتی به طور کامل آماده سرویس‌دهی می شود، این دستور معادل دستور STARTUP می‌باشد. در این حالت تمام کاربران مجاز می توانند به بانک اطلاعاتی متصل شده و عملیات مختلفی را روی آن انجام دهند. قبل از این مرحله کاربران عمومی نمی توانستند به بانک اطلاعاتی متصل شوند. دقت داشته باشید زمانی که دستور STARTUP را به تنهایی صادر می‌کنید هر ۳ مرحله به طور خودکار انجام می‌شود. ولی اگر قبلاً بانک اطلاعاتی در حالت MOUNT راه اندازی شده باشد، می توان با استفاده از دستور زیر آن را در حالت OPEN قرار داد:

SQL> ALTER DATABASE OPEN;

می توان با استفاده از یکی از دستورات زیر مستقیماً بانک اطلاعاتی را در حالت OPEN راه اندازی نمود:

SQL> STARTUP;
SQL> STARTUP OPEN;

به هنگام باز کردن بانک اطلاعاتی، سرور اوراکل ابتدا تمام Data File ها و Redo Log File ها را باز نموده و سپس چک می کند که حتماً بانک اطلاعاتی در حالت سازگار قرار داشته باشد. اگر بانک اطلاعاتی در حالت سازگار نباشد، در این صورت قبل از باز نمودن بانک اطلاعاتی، فرایندهای پس زمینه عملیات Instance Recovery را به طور اتوماتیک انجام می دهند. اگر علاوه بر Instance Recovery نیاز به Media Recovery نیز باشد، اوراکل اعلام می کند که نیاز به Recovery بانک اطلاعاتی می باشد و تا زمانی که شما عملیات Recovery را انجام ندهید بانک اطلاعاتی را باز نخواهد کرد.

نکته: بعد از اجرای STARTUP اول دیتابیس دیگر اجازه اجرای STARTUP را نمی‌دهد(خطاهای زیر) در این حالت برای ادامه مراحل استارت‌کردن اوراکل از Alter در ابتدای دستورات استفاده کنید.

(ORA-01081: cannot start already-running ORACLE - shut it down first)

(SP2-0734: unknown command beginning "startup op..." - rest of line ignore)

نکته: اگر بخواهیم از مراحل پایینتر به مرحله بالاتر برویم فقط با alter می‌توانیم اینکار را انجام دهیم:

alter database open

نکته: اگر هر کدام از حالت‌های استارت را از لولی بالاتر به طور مستقیم برای روشن کردن دیتابیس به کار بگیریم به طور خودکار لول‌های قبلی نیز اجرا می‌شوند. به عنوان مثال وقتی STARTUP OPEN کنیم دیتابیس به طور کامل اجرا می‌شود.

نکته: نمی‌توان از لول‌های بالاتر به لول‌های قبل مستقیم سوییچ کرد(حتی با ALTER) حتماً باید دیتابیس SHUTDOWN شود بعد از ابتدا به آن لول از START رفت.


در پایگاه داده اوراکل می‌توان بانک اطلاعاتی را با وضعیت های مختلف خاموش کرد. شکل کلی خاموش کردن اوراکل:

SQL> SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABROT]

عملیات shutdown بانک اطلاعاتی را می توان در سه مرحله انجام داد: 

  • CLOSE کردن بانک اطلاعاتی: با انجام عملیات close، بانک اطلاعاتی از وضعیت open خارج شده و در وضعیت mount قرار می گیرد. برای close کردن بانک اطلاعاتی از دستور زیر استفاده می شود:

SQL> ALTER DATABASE CLOSE;

  • DISMOUNT کردن بانک اطلاعاتی: با انجام عملیات  dismount بانک اطلاعاتی از وضعیت mount خارج شده و در وضعیت nomount قرار می گیرد. برای dismount کردن بانک اطلاعاتی از دستور زیر استفاده می شود:

SQL> ALTER DATABASE DISMOUNT;

  • SHUTDOWN کردن بانک اطلاعاتی: که در ادامه نحوه انجام آن را توضیح می دهیم.

نکته: بانک اطلاعاتی را می توان به طور مستقیم و بدون close و dismount کردن، shutdown نمود. ولی در صورتی که بخواهیم مرحله به مرحله این کار را انجام دهیم، حتماً باید ابتدا آن را close، سپس dismount و در نهایت shutdown کنیم. به عبارت دیگر، بدون close کردن بانک اطلاعاتی نمی توان مستقیماً آن را dismount نمود. همچنین در صورتی که بانک اطلاعاتی close شده باشد، بدون dismount کردن نمی توان آن را shutdown کرد. با این وجود در صورتی که بانک اطلاعاتی close و یا dismount نشده باشد، می توان آن را مستقیماً shutdown کرد.

  • SHUTDOWN NORMAL: در این حالت بانک اطلاعاتی منتظر می‌ماند تا تمامی کاربران از بانک اطلاعاتی خارج شوند سپس بانک را خاموش می‌کند. (همچنین SHUTDOWN خالی نیز دقیقاً همین کار را می‌کند.) توجه داشته باشید ممکن است دیتابیس در این روش هیچ‌وقت خاموش نشود چون اوراکل منتظر می‌ماند تا تمامی کاربران خودشون از دیتابیس خارج بشوند.

    • نکته: از زمانی که این دستور را وارد می‌کنید از ورود کاربران جدید ممانعت می‌شود.

SQL> SHUT DOWN;
SQL> SHUTDOWN NORMAL;

به طور خلاصه می توان گفت که در حالت shutdown بانک اطلاعاتی به صورت NORMAL:

  1. به هیچ کاربر جدیدی اجازه اتصال به بانک اطلاعاتی داده نمی شود.

  2. اوراکل تا زمانی که تمام کاربران ارتباط خود را با بانک اطلاعاتی قطع نکنند آن را shutdown نمی کند. 

  3. اوراکل Data File ها را بسته و فرایند پس زمینه را خاتمه می دهد.

  4. اوراکل حافظه SGA را به سیستم برمی گرداند.

  • SHUTDOWN TRANSACTIONAL: در این حالت بانک اطلاعاتی منتظر می‌ماند تا تمامی تراکنش‌های کاربران انجام شوند سپس بانک‌اطلاعاتی را خاموش می‌نماید.

    • نکته: از زمانی که این دستور را وارد می‌کنید اوراکل از ورود و انجام تراکنش جدید به هر صورت (inser, update ,...) جلوگیری می‌کند.

SQL> SHUTDOWN TRANSACTIONAL;

به طور خلاصه می توان گفت که در حالت shutdown بانک اطلاعاتی به صورت TRANSACTIONAL:

  1. به هیچ کاربر جدیدی اجازه اتصال به بانک اطلاعاتی داده نمی‌شود.

  2. به کاربران جاری اجازه تراکنش جدید داده نمی‌شود.

  3. اگر در حال حاضر کاربری در حال اجرای یک تراکنش باشد، اوراکل تا زمان تکمیل شدن آن منتظر می‌ماند.

  4. پس از آن که تمام تراکنش های در حال اجرا تکمیل شدند، اوراکل بانک اطلاعاتی را shutdown نموده و حافظه SGA را به سیستم برمی‌گرداند.

  5. اوراکل Data File ها را بسته و فرایند پس زمینه را خاتمه می‌دهد.

  • SHUTDOWN IMMEDIATE: در این حالت بانک‌اطلاعاتی تمام تراکنش‌های کاربران را ROLLBACK کرده سپس بانک اطلاعاتی را خاموش می‌نماید.

    • در این حالت دیتابیس اولین کاری که می‌کنه اینه که فضای SGA و PGA را به سیستم‌عامل تحویل می‌دهد (RAM خالی می‌شود) و دیتابیس در این حالت dismounted می‌شود (بعد از dismount می‌توانید حتی دیتافایل‌ها و Redoها را پاک کرد چون دیگر اوراکل از آنها استفاده نمی‌کند)

SQL> SHUTDOWN IMMEDIATE;

به طور خلاصه می توان گفت که در حالت shutdown بانک اطلاعاتی به صورت IMMEDIATE:

  1. به هیچ کاربر جدیدی اجازه اتصال به بانک اطلاعاتی داده نمی‌شود.

  2. اوراکل بلافاصله ارتباط تمام کاربران با بانک اطلاعاتی را قطع می‌کند. 

  3. اوراکل تمام تراکنش های در حال اجرا را rollback می کند. این کار ممکن است مدتی طور بکشد.

  4. اوراکل Data File ها را بسته و فرایند پس زمینه را خاتمه می‌دهد.

  5. اوراکل حافظه SGA را به سیستم برمی‌گرداند.

  • SHUTDOWN ABORT: این حالت دقیقا معادل کشیدن برق سرویس دهنده می‌باشد و بلافاصله بانک اطلاعاتی خاموش می‌شود.

    • نکته: وقتی از این حالت برای خاموش کردن استفاده شود، اگر دوباره به دیتابیس بازگردید ممکنه دیتا‌فایل‌هایتان آسیب دیده باشند. (Redo آسیب می‌بیند چون تراکنش‌ها(در صورت وجود) وسط کار رها شده‌اند.)

    • نکته: از این دستور بیشتر بعد از خرابی زیاد یا اتک کامل به بانک برای قطع دسترسی کامل استفاده می‌شود.

SQL> SHUTDOWN ABORT;

به طور خلاصه می توان گفت که در حالت shutdown بانک اطلاعاتی به صورت ABORT:

  1. به هیچ کاربر جدیدی اجازه اتصال به بانک‌اطلاعاتی داده نمی‌شود.

  2. اوراکل بلافاصله ارتباط تمام کاربران با بانک اطلاعاتی را قطع می‌کند. 

  3. اوراکل به تراکنش‌های جاری اجازه تکمیل شدن نداده و همچنین آن ها را rollback نمی‌کند.

  4. اوراکل داده‌های موجود در Redo File و Data Buffer را بر روی دیسک نمی‌نویسد.

  5. اوراکل فرایند پس زمینه را خاتمه داده و حافظه SGA را به سیستم برمی‌گرداند.

راه‌اندازی بانک اطلاعاتی به صورت مخفی

گاهی نیاز است تا بانک اطلاعاتی را به صورت مخفی راه اندازی کنیم و باعث شویم تا سایر کاربران از راه اندازی شدن بانک اطلاعاتی با خبر نگردند. برای اینکار از دستور زیر استفاده میکنیم:

STARTUP RESTRICT

خارج کردن بانک اطلاعاتی از حالت RESTRICTED بواسطه‌ی دستور زیر قابل انجام است.

ALTER SYSTEM DISABLE RESTRICTED SESSION;

در صورتی که بانک اطلاعاتی در حالت RESTRICTED نباشد بواسطه‌ی دستور زیر به حالت RESTRICTED منتقل می‌شود.

ALTER SYSTEM ENABLE RESTRICTED SESSION;

حالت RESTRICTED تنها به کاربری اجازه دسترسی به بانک می‌دهد که فرمان فوق را صادر کرده باشد