Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

如何在 PRIMARY 與 STANDBY DATABASE 切換
post by tommy @ 10 十月, 2003 21:45
當你的 PRIMARY DATABASE 的主機, 需要做一些維護時, 是否你的 ORACLE 資料庫就必須要停止服務一段不算短的時間呢? 這對於一個需要 7*24 服務的主機來說, 實在是一個很難接受的情形.

如果你有 STANDBY DATABASE, 這時, 就可以將這個停機的時間, 大幅的減少到幾分鐘內. 讓你的 STANDBY DATABASE 轉換成 PRIMARY DATABASE, 繼續提供服務, 等原本的主機維護完成之後, 再切換回來.

  • Step 1:

因為要當做 PRIMARY DATABASE 的 ORACLE, 必須在 MAXIMIZE PERFORMANCE 的狀態下執行, 但是有些 STANDBY DATABASE 並非在這個狀態下執行, 所以, 在你要接手的 STANDBY DATABASE 上執行下面的指令:

alter database set standby database to maximize performance; 
  • Step 2:

在 PRIMARY DATABASE 上面, 中斷所有用戶的連線, 執行下面的指令:

alter system enable restricted session;
select switchover_status from v$database;
上面那個 SWITCHOVER_STATUS, 據 ORALCE 的文件表示, 必須在 TO STANDBY 的情形下, 才可以做這個切換. 不過... 我怎麼試都會是 SESSION ACIVE, 因為... 至少我指令的這一個 SESSION 並還連線著, 如果不連著, 要怎麼下指令? 總之, 你可以在確定除了你這個連線外, 並沒有其他連線存在時, 執行下面的指令:
alter database commit to switchover to physical standby;
shutdown immediate;
這時, 如果沒有錯誤, 原本這個 PRIMARY DATABASE 應該就可以被當成 STANDBY DATABASE 使用. (這兒要注意的是, 如果你的 STANDBY DATABASE 不止一個, 要確定你所設定的所有 LOG_ARCHIVE_DEST_n 都可以成功的寫出, 否則切換動作會失敗.
  • Step 3:

這時就把原本的 PRIMARY DATABASE 的 listener.ora, init$ORACLE_SID.ora 做一些更改, 改成 STANDBY DATABASE 使用的狀態. 也把 IP 換成不是 PRIMARY DATABASE 使用. 然後, 試試看可不可以用 STANDBY DATABASE 的方式啟動資料庫:

startup nomount;
alter database mount standby database; 
如果都成功, 執行下面的指令看看:
select switchover_status from v$database; 
這時, 據 ORACLE 的手冊來看, 應該會是 SWITCHOVER PENDING 才對, 不過, 同上, 我只得到 SESSION ACTIVE... :(
  • Step 4:

這時, 到原本的 STANDBY DATABASE 主機上, 執行下面的指令:

alter database commit to switchover to primary;
shutdown; 
這時, 這個 STANDBY DATABASE 應該就可以用一般資料庫的方式來啟動. 在啟動之前, 我們必須將 listener.ora, init$ORACLE_SID.ora 做一些更改, 改成 PRIMARY DATABASE 使用的狀態. 且也把原本 PRIMARY DATABASE 使用的 IP 加到這台主機上頭. 做好之後, 就可以啟動 ORACLE 了, 我們先用 RESTRICT 的方式啟動, 以免其他使用者連上線:
startup restrict; 
  • Step 5:

這時, 回到原本 PRIMARY DATABASE 的主機上, 執行下面的指令:

alter database recover managed standby database disconnect from session; 
  • Step 6:

再回到原本 STANDBY DATABASE (新的 PRIMARY DATABASE) 上頭, 執行下面的指令:

alter system archive log current; 

然後檢查看看是否正確產生到新的 STANDBY DATABASE (原本的 PRIMARY DATABASE) 中, 且正確的寫入.

  • Step 7:

如果一切都正常的話, 就在新的 PRIMARY DATABASE (原本的 STANDBY DATABASE) 執行下面 的指令開放連線:

alter system disable restricted session; 
  • Step 8:

要注意一下, 由於 TEMP 的 TABLESPACE 並不會在 STANDBY DATABASE 中產生檔案, 所以如果你新的 PRIMARY DATABASE 之前都未曾切換過, 則可能沒有 TEMP 的 DATAFILE 存在. 如果沒有的話, 可以執行類似下面的指令, 產生所需要的檔案:

ALTER TABLESPACE TEMP ADD TEMPFILE '/hisdb/oradata/SUN2/temp01.dbf' SIZE 500M REUSE;
ALTER TABLESPACE USRTEMP ADD TEMPFILE '/hisdb/oradata/SUN2/usrtemp01.dbf' SIZE 2000M REUSE;
ALTER TABLESPACE USRTEMP ADD TEMPFILE '/hisdb/oradata/SUN2/usrtemp02.dbf' SIZE 2000M REUSE;
ALTER TABLESPACE USRTEMP ADD TEMPFILE '/hisdb/oradata/SUN2/usrtemp03.dbf' SIZE 2000M REUSE;

這樣子, 你就可以用原本的 STANDBY DATABASE 暫時取代 PRIMARY DATABASE 的服務. 然後對原本的 PRIMARY DATABASE 的主機做維護. 等到維護完成, 如果有必要, 可以利用上述的動作, 再切換回來.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 81 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS