FAILOVER詳細步驟
FAILOVER詳細步驟
1.Flush主庫任何未傳輸的redo到目標備庫
如果primary可以mount,則可以flush任何主庫的未傳輸redo到備庫,如果操作成功返回,則可以保證failover的零數據丟失。
1)確保standby數據庫啟用日誌應用
2)mount primary數據庫,執行以下SQL語句,命令等待standby應用redo完成後返回。
SQL> alter system flush redo to target_db_unique_name;
如果成功返回,則轉第5步,如果返回錯誤或者用戶不能等待其耗費的時長,則轉第2步。
2.確認standby應用了primary每個線程的最新歸檔
standby:
SQL> select unique thread# as thread, max(sequence#) over (partition by thread#) as last from v$archived_log;
如果standby沒有應用priamry的最新歸檔,手工傳輸primary歸檔文件到standby並註冊:
SQL> alter database register physical logfile ‘filespec1‘;
3.查找並解決GAP
standby:
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;
如果有GAP, 手工傳輸GAP到standby並註冊:
SQL> alter database register physical logfile ‘filespec1‘;
4.重復第3步,直到解決所有的GAP
直到查詢返回為空,則說明當前已可能沒有GAP(v$archive_gap存在一些已知的BUG)。
5.停止redo應用
SQL> recover managed standby database cancel;
6.完成應用所有接受到的redo數據
SQL> recover managed standby database finish;
如果命令成功返回,轉第7步,如果命令返回錯誤,說明一些redo數據不能應用,排查錯誤並再次執行該SQL語句。
如果錯誤不能解決,執行以下SQL激活物理備庫,可能會丟失數據,執行以下SQL後,轉第9步:
SQL> alter database activate physical standby database;
7.確認物理standby可以轉換為primary
SQL> select switchover_status from v$database;
SQL查詢結果為TO PRIMARY
或SESSIONS ACTIVE
,則表示standby可以轉換為primary角色,否則需要檢查日誌應用是否仍處於激活狀態,確保該值為TO PRIMARY
或SESSIONS ACTIVE
。
8.切換物理standby為primary角色
SQL> alter database commit to switchover to primary with session shutdown;
如果switchover_status為SESSION ACTIVE,則需要加上with session shutdown子句。
9.打開新的primary數據庫
SQL> alter database open;
10.清除DG相關參數
11.立即備份新的primary數據庫
12.DG環境中如果存在的其他物理備庫,重啟其已停止的日誌應用
SQL> recover managed standby database using current logfile disconnect;
13.還原失敗的primary數據庫
FAILOVER詳細步驟