1. 程式人生 > >FAILOVER詳細步驟

FAILOVER詳細步驟

失敗 還原 nag spec 數據庫 flush hover data last

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 PRIMARYSESSIONS ACTIVE,則表示standby可以轉換為primary角色,否則需要檢查日誌應用是否仍處於激活狀態,確保該值為TO PRIMARYSESSIONS 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詳細步驟