DataGuard - ORA-00261錯誤及解決方案
來源:互聯網
上載者:User
錯誤|解決
在DataGuard環境中如果我們在做failover的時候,可能會碰到ORA-00261錯誤,下面是該錯誤的產生原因和解決方案。
如果是由於網路問題而導致需要切換,那麼通常standby端的RFS進程並不會意識到primary已經不可訪問,所以RFS進程也不會釋放當前的standby redo log檔案。
如果是primary端的資料庫執行個體由於故障中斷,那麼一般情況下standby端的RFS進程會立刻意識到primary已經不可訪問,也就會立刻釋放當前的standby redo log檔案。
只要RFS進程沒有釋放standby redo log檔案,那麼執行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH命令就會在alertlog檔案中發現如下的報錯資訊
Warning: log 4 of thread 1 is being archived or modified
Recovery interrupted.
Media Recovery failed with error 261
如果在報上述錯誤的時候,執行SWITCH,那麼將會出現下面的錯誤:
ORA-16139: media recovery required
所以必須檢查alertlog檔案,直到發現如下資訊才表示RFS進程已經釋放了standby redo log檔案,這時候才可以作FINISH:
RFS: Possible network disconnect with primary database
促使RFS進程釋放standby redo log 檔案有兩種方法:
1. 等待RFS進程的network timeout,通常需要等待8分鐘左右
2. 關閉standby資料庫,再重新開啟,這樣會強制RFS進程釋放standby redo log
我們可以通過v$managed_standby視圖來監控RFS進程何時釋放
實行Failover:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
alertlog中將顯示如下資訊,表示finish成功:
Terminal Incomplete Recovery: UNTIL CHANGE 3738452
Terminal Incomplete Recovery: End-Of-Redo log allocation
Terminal Incomplete Recovery: log 4 reserved for thread 1 seq# 8772
TERMINAL RECOVERY changing datafile format version from 8.0.0.0.0 to 9.0.0.0.0
Switching logfile format version from 8.0.0.0.0 to 9.0.0.0.0
Terminal Incomplete Recovery: clearing standby redo logs.
Terminal Incomplete Recovery: thread 1 seq# 8772 redo required
Terminal Incomplete Recovery: End-Of-Redo log /global/oradata/ctsdb/stdby_redo04.log
Identified end-of-REDO for thread 1 sequence 8772
Terminal Incomplete Recovery: end checkpoint SCN 3738453
Media Recovery Complete
Switching logfile format version from 9.0.0.0.0 to 8.0.0.0.0
Terminal Incomplete Recovery: successful completion
Begin: Wait for standby logfiles to be archived
Wed Sep 1 13:42:28 2004
ARC1: Evaluating archive log 4 thread 1 sequence 8772
Wed Sep 1 13:42:28 2004
ARC0: Evaluating archive log 4 thread 1 sequence 8772
Wed Sep 1 13:42:28 2004
ARC1: Beginning to archive log 4 thread 1 sequence 8772
Wed Sep 1 13:42:28 2004
ARC0: Unable to archive log 4 thread 1 sequence 8772
Wed Sep 1 13:42:28 2004
Creating archive destination LOG_ARCHIVE_DEST_1: '/global/oradata/ctsdb/archive/arch1_8772.log'
Wed Sep 1 13:42:28 2004
Log actively being archived by another process
Wed Sep 1 13:42:28 2004
ARC1: Completed archiving log 4 thread 1 sequence 8772
Wed Sep 1 13:42:43 2004
End: All standby logfiles have been archived
Resetting standby activation ID 4038461969 (0xf0b60a11)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH
FINSH成功之後再執行SWITCH:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SWITCH成功之後,重新啟動資料庫:
SHUTDOWN IMMEDIATE;
STARTUP;