1.確認主庫可以切換為standby角色
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果結果顯示TO STANDBY或者SESSIONS ACTIVE,則表明主庫可以切換為standby角色,否則,切換操作將不可行,因為redo傳輸不是配置錯誤就是不能正常進行。
2.主庫啟動switchover
執行如下SQL語句將主庫切換為standby角色:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
在switchover之前,當前的控制文件備份到當前SQL執行的會話跟蹤文件中,這使得,如果需要的話,可以重建當前的控制文件。
注意:如果第1步中查詢結果顯示是TO STANDBY,該SQL語句中的WITH SESSION SHUTDOWN子句可以省略。
3.關閉并mount前主庫
SQL> SHUTDOWN ABORT; SQL> STARTUP MOUNT;
這個時候,原主庫已經變成了standby角色。
注意:Oracle 11g (11.2.0.4) 或者更新的版本,不需要執行SHUTDOWN ABORT,因為一旦數據庫執行“ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN”就默認包括了該操作。
4.確保switchover目標可以切換為primary角色
通過V$DATABASE查詢standby庫的SWITCHOVER_STATUS值:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果查詢結果顯示TO PRIMARY或者SESSIONS ACTIVE,則表明備庫可以切換為primary角色。否則,確認redo應用是否是激活的、redo傳輸的配置是否正確并且能否正常運行,直到查詢結果顯示TO PRIMARY或者SESSIONS ACTIVE。
5.切換目標物理備庫到primary角色
在目標物理備庫上執行如下SQL:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
注意:如果第1步中查詢結果顯示是TO PRIMARY,該SQL語句中的WITH SESSION SHUTDOWN子句可以省略。
6.打開新的主庫
SQL> ALTER DATABASE OPEN;
7.打開新物理備庫的redo應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
8.重啟redo應用,如果在該Data Guard配置中任何其他物理備庫中redo應用已經關閉
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
物理備庫進行failover操作步驟如下:
1.將主庫所有未傳至目標備庫的redo數據刷新到目標備庫
如果主庫可以mounted,可能可以將主庫所有未發送的歸檔日志和當前的redo從主庫刷新到備庫,如果這個操作能成功執行,那么即便主庫不是運行在零數據丟失保護模式下,零數據丟失的故障轉移也是可能的。
確保目標備庫的redo應用是開啟的,然后mount但不要打開主庫(如果主庫不能mounted,直接跳到第2步)。
在主庫執行SQL:
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;
target_db_name,指定備庫的DB_UNIQUE_NAME,它用來接收主庫刷新過來的redo數據。該SQL用來刷新主庫所有未發送的redo數據到備庫,然后等待redo應用到備庫。如果該步驟無誤完成,那么直接進入第5步;如果該步驟執行有誤或者因為不能等它執行完就已停止,則進入第2步。
2.確保備庫擁有每個主庫線程最新的歸檔日志
通過V$ARCHIVED_LOG視圖查詢目標備庫查詢每個redo線程的最大日志序列:
SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
如果備庫中不存在每個主庫redo線程的最大日志序列對應的歸檔日志,如果可以,從主庫復制并注冊它們到備庫:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3.確認并解決所有歸檔日志的缺失
通過V$ARCHIVE_GAP視圖查詢目標備庫是否存在日志缺失:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
對于缺失的日志,執行第2步的操作,直到沒有日志缺失的情況存在。
4.關閉redo應用
在目標備庫執行:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
5.完成所有收到的redo日志應用
在目標備庫執行:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
如果該SQL執行無誤,進入第7步,如果執行有誤,說明收到的redo沒有被應用,需要解決錯誤再進入下一步。注意,如果第3步redo缺失沒有解決,將收到redo缺失的錯誤警告,如果錯誤沒有被解決,failover通過備庫上如下SQL也可以完成:
SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
語句執行完進入第8步。
6.確認目標備庫可以轉換為primary角色
通過查詢V$DATABASE視圖的SWITCHOVER_STATUS值來確認:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果查詢結果顯示TO PRIMARY或者SESSIONS ACTIVE,則表明備庫可以切換為primary角色。否則,確認redo應用是否是啟動的,直到查詢結果顯示TO PRIMARY或者SESSIONS ACTIVE。
7.切換物理備庫到primary角色
在目標物理備庫上執行如下SQL:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
注意:如果第1步中查詢結果顯示是TO PRIMARY,該SQL語句中的WITH SESSION SHUTDOWN子句可以省略。
8.打開新的主庫
SQL> ALTER DATABASE OPEN;
9.備份新的主庫
10.重啟redo應用,如果在該Data Guard配置中任何其他物理備庫中redo應用已經關閉
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
11.有選擇的恢復故障主庫
Failover后,通過Flashback或者RMAN工具,原主庫可以轉換為新主庫的物理備庫,或者可以通過新主庫的備份以作為物理備庫的身份被重建。一旦原主庫轉為standby角色,就可以通過switchover操作恢復其主庫身份。
本文參閱Oracle官方文檔翻譯,不足之處歡迎批評指正!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com