通過failover切換ADG,如何解決數據丟失問題

通過failover方式做角色切換時,目標庫會放棄日誌應用(日誌包括主庫未歸檔的redo日誌、未傳送到目標端歸檔日誌、目標端未應用的日誌),立即切換爲主庫角色,從而導致數據丟失。
在時間允許的情況下,可以嘗試以下方案儘量減少數據丟失。步驟4~9可以在DGMGRL管理窗口,通過dgmgrl命令執行。oracle的DGMGRL在管理ADG方面是非常智能且簡單易用的,建議大家儘量配置DGBroker。

操作步驟:
step1:如果主庫可以mount起來,將未傳送到目標端的歸檔日誌和在線重做日誌刷到standby數據庫。操作成功,failover操作時可以避免數據丟失。如果主庫mount失敗,則執行step2。
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name; ###如果該步驟執行成功,則直接跳到步驟5執行。

step2:備庫節點上查詢各個線程日誌最大SEQUENCE號
SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';  

##如果可能,複製主庫最近的歸檔日誌到standby數據庫上,並註冊

step3:查詢備庫上是不是存在日誌gap
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'; 
##如果存在gap,儘可能複製主庫最近缺失的日誌到standby數據庫上,並註冊

step4:重複步驟2、3,把存在的問題儘量解決

step5:目標standby節點取消日誌應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

step6:failover切換
SQL> ALTER DATABASE FAILOVER TO target_db_name;
##如果成功則直接執行step6,報錯則執行step7

step7:執行數據丟失的failover切換
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
##儘量解決報錯,如果報錯無法解決,則執行上述命令

step8:打開數據庫
SQL> ALTER DATABASE OPEN;

step9:對新主庫做全庫備份
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章