وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

  • ۰
  • ۰

switchover database 11g

سلام

یکی از کارهایی که باید چندین بار در محیط تست انجام داد و براش آماده بود، Switchover هست. هر دیتابیس می تواند یکی از دو role شامل primary و یا standby را داشته باشد. عملیات switchover به ما اجازه می دهد بدون از دست دادن داده و یا reset log نقش این دو دیتابیس را عوض کنیم.

عملیات switchover کاربردهای زیادی دارد که از آن جمله می توان به downtime از پیش تعیین شده برای نگه داری، تعمیر سخت افزار، جابجایی فیزیکی سرورها و .. اشاره کرد.

در این مطلب ما دو rac با نسخه 11.2.0.4 داریم. ابتدا بر روی هر کدام از دیتابیس ها، دستور زیر را برای به دست آوردن اطلاعات و نقش فعلی آنها می زنیم:

select name,open_mode,db_unique_name,switchover_status,database_role from v$database;

نتیجه دیتابیس اصلی به شکل زیر خواهد بود:

NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           testdb                         TO STANDBY 
         PRIMARY
و نتیجه دیتابیس استندبای به ترتیب زیر:
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         NOT ALLOWED          PHYSICAL STANDBY

همانطور که در خروجی های بالا دیده می شود، نام دیتابیس ها یکی است و unique_name آنها متفاوت است. ضمناً در قسمت switchover_status تنها دیتابیس اصلی است که قابلیت تبدیل شدن به استندبای را دارد که با توجه به محتوای database_role می توان به این موضوع پی برد.
چند توصیه ایمنی قبل از شروع عملیات switchover : بهتر است قبل از شروع عملیات، برنامه های متصل به دیتابیس را قطع کرده و Session ای روی دیتابیس از این طریق نباشد. پس از این کار چندین بار Switch logfile می کنیم و از sync بودن دیتابیس اصلی و گارد با روش زیر اطمینان حاصل می کنیم:
on primary:
archive log list

on standby:
select process ,sequence# , status , thread# from gv$managed_standby;
 select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
با مقایسه مقادیر بدست آمده از جستجوهای بالا از SYNC بودن دیتابیس های اصلی و استندبای اطمینان حاصل می کنیم.
حالا شروع می کنیم:
بر روی دیتبایس اصلی دستور زیر را می زنیم:
 alter database commit to switchover to physical standby;
در صورتی که با خطای وجود active session مواجه شدیم، دستور بالا را بصورت زیر می زنیم:
alter database commit to switchover to physical standby with session shutdown ;

دیتابیس استندبای را یکبار خاموش و تا مرحله mount بالا می آوریم:

shut immediate;
startup mount;

حالا اگر جستجوی اول کار را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا کنیم، می بینیم که وضعیت switchover_status تغییر پیدا کرده است:

 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         TO PRIMARY           PHYSICAL STANDBY

دستور زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا می کنیم:
 alter database commit to switchover to primary ;
و سپس آنرا یکبار دیگر خاموش و سپس startup می کنیم:
shut immediate;
startup;
یکبار دیگر جستجوی زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) تکرار می کنیم:
 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           TESTDG                         RESOLVABLE GAP       PRIMARY

نگران نباشید. با روشن کردن دیتابیس استندبای جدید (اصلی قدیمی) و انجام دستور log switch بر روی دیتابیس اصلی جدید (استندبای قدیمی) مشکل resolvable gap هم حل خواهد شد.
پس از روشن کردن استندبای جدید (اصلی قدیمی) برای انجام وظایف اسندبای دستور زیر را بر روی آن اجرا می کنیم:
recover managed standby database using current logfile disconnect;
کارهای که برای تست sync بودن انجام داده بودیم را دوباره انجام می دهیم.


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

-----------------------------------------------------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • ۹۷/۰۵/۱۷
  • قدیر نوروزی میرصادقی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی