Oracle Dataguard故障轉移(failover)操作


注意:故障轉移會破壞DG的主從關系,使其變為互不相關的2個數據庫,謹慎使用。

 

(一)故障轉移操作流程圖

 

 

(二)故障轉移操作流程
備注:以下操作步驟與上面流程圖步驟一一對應

 

STEP1:刷新所有未發送到備庫的日志到備庫
如果主庫還可以啟動到mount狀態,則刷新所有未發送的歸檔日志和在線redo日志到備庫。如果這一步成功了,則可以保證數據零丟失。
如果主庫不能mount,則執行第2步。
使用如下命令刷新redo日志到備庫:

SQL> ALTER SYSTEM FLUSH REDO TO 'target_db_name';

其中,target_db_name為備庫的db_unique_name。
如果上面的語句執行成功,則直接跳到步驟5;如果執行報錯,則執行步驟2。

 

STEP2:確認備庫接收到的最新的歸檔日志文件
在備庫上使用V$ARCHIVED_LOG視圖,查詢每個實例的最大日志序列號的日志,通過查詢出的日志序列號與主庫的最大日志序列號比較(主庫的直接到服務器上去查看歸檔日志文件),可以直到缺失了哪些歸檔日志文件

SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
THREAD       LAST
---------- ----------
1          100

如果可能,對於還未傳輸到備庫的日志文件,直接從主數據庫上拷貝過去,然后注冊日志,注冊日志放入如下:

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

 

STEP3:確認和解決日志GAP
在備庫上查詢V$ARCHIVE_GAP視圖,確認是否存在日志GAP,如:

SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD#    LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1            90             92

在這個例子中,GAP存在於線程1的90,91,92號歸檔日志上,如果可能,拷貝這些日志到備庫服務器上,然后注冊日志

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

 

STEP4:重復步驟3直到把所有GAP解決
繼續在備庫上查詢V$ARCHIVE_GAP視圖,直到沒有數據返回,說明沒有GAP。
如果在執行了步驟2到步驟4后,依然無法解決日志GAP(例如,主服務器宕機,我們無法訪問主數據庫,導致日志無法同步到備庫),則執行failover切換后會存在數據丟失。

 

STEP5:備庫停止日志應用
執行如下操作:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

STEP6:完成所有已經接收日志的應用
在備庫上執行如下操作:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

如果這個操作未報錯,則執行步驟7。
如果發生報錯,嘗試解決錯誤,再次執行以上SQL語句,如果報錯無法解決,可以在目標備庫執行以下語句來進行故障轉移(會丟失數據)

SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;

這個語句完成后跳到第9步執行。

 

STEP7:確認目標備庫准備切換為主庫
查看目標備庫v$database視圖的SWITCHOVER_STATUS列

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO PRIMARY

如果SWITCHOVER_STATUS的值為“TO PRIMARY”或者“SESSIONS ACTIVE”,則說明備庫已經准備切換為主庫。如果不是這2個值,確認Redo日志應用是否還是活躍的,繼續查詢,直到變為這2個值中的一個為止。

 

STEP8:切換物理備庫為主庫
使用下面的SQL語句進行切換:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

 

STEP9:打開新的主庫

SQL> ALTER DATABASE OPEN;

 

后續:

1.在打開數據庫之后,建議做一個完整備份;

2.如果主服務器/數據庫重新啟動,則需要還原失敗的主數據庫。

 

【完】

 

相關文檔:
1.Oracle DataGuard主備切換(switchover)
2.Oracle Dataguard故障轉移(failover)操作
3.Oracle DataGuard故障轉移(failover)后使用RMAN還原失敗的主庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM