[原]Oracle Data Guard 折騰記(二)
前文再續,書接上一回,這次折騰Data Guard的一個重要目的是利用switchover實現機器的升級,怎么switchover呢?按照我的理解,Data Guard的角色切換是這樣一個過程:
(1)讓primary節點變為standby節點。
(2)讓其中一個standby節點變為primary節點
這里比較有意思是“其中一個”,也就是說節點A原來是primary轉成standby后,突然我后悔了,還是可以馬上讓他變回primary節點的,具體看操作:
此時 test02 是primary 節點,test03是standby節點,由于test03缺少一個參數,一點test03變為primary,歸檔不會自動發到test02,于是第一步要補全這個參數:
##### test03 target priamry, standby now ##### alter system set log_archive_dest_2='service=mydb_test02';
讓test02由primary變為standby:
##### test02, target standby, primary now ##### alter database commit to switchover to physical standby ;
以上語句有可能會遇到如下錯誤:
alter database commit to switchover to physical standby * ERROR at line 1: ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
這是由于一些連接還沒有釋放所致的,將前端應用關閉后如果還出現這種情況,可以用以下語句確認一下有哪些連接:
##### test02, target standby, primary now ##### SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER' AND SID <> (SELECT DISTINCT SID FROM V$MYSTAT);
如果是Oracle內部進程的連接就不用管他了,執行如下語句就可以了:
##### test02, target standby, priamry now ##### alter database commit to switchover to physical standby with session shutdown
將test03也就是原來是standby的節點轉為primary:
##### test03, target primary, standby now ##### alter database commit to switchover to primary; ##### test03, target primary, primary now #####
打開primary節點的數據庫,使其可對外服務:
##### test03, target primary, primary now ##### shutdown immediate; startup;
啟動standby的歸檔恢復進程:
##### test02, target standby, standby now ##### alter database recover managed standby database disconnect from session;
此時已經完成了Data Guard 主備切換了,可以監控住standby的alert文件,在primay中做一次日志切換,看看是否有歸檔日志傳送過來并且恢復。
如果監控時間比較長的(超過5分鐘)會看到如下錯誤:
##### primary alert ##### Fri Dec 17 14:04:46 2010 Redo Shipping Client Connected as PUBLIC -- Connected User is Valid RFS[10]: Assigned to RFS process 12079 RFS[10]: Database mount ID mismatch [0x9e217391:0x9e217bca] RFS[10]: Client instance is standby database instead of primary RFS[10]: Not using real application clusters Fri Dec 17 14:04:46 2010 Errors in file /u01/app/admin/mydb/udump/mydb_rfs_12079.trc: ORA-16009: remote archive log destination must be a STANDBY database ##### standby alert ##### Fri Dec 17 14:04:54 2010 Errors in file /u01/app/admin/mydb/bdump/mydb_arc1_6821.trc: ORA-16009: remote archive log destination must be a STANDBY database Fri Dec 17 14:04:54 2010 PING[ARC1]: Heartbeat failed to connect to standby 'mydb_test02'. Error is 16009.
雖然不影響 Data Guard 的功能和使用,但如何解決呢?其實這是歸檔進程ARCHn進程在作怪,想辦法屏蔽就可以,一個比較土的方法就是將備節點的log_archive_dest_2設為空,也就是回到上一篇中提到那種配置上,另外一種聰明點的做法就是引入valid_for參數:
##### test02 ##### alter system set log_archive_dest_2='service=mydb_test03 valid_for=(online_logfiles,primary_role)'; ##### test03 ##### alter system set log_archive_dest_2='service=mydb_test02 valid_for=(online_logfiles,primary_role)';
alert文件中再也看不到這兩個錯誤了。
浙公網安備 33010602011771號