物理備數據庫的切換與故障轉移
物理備數據庫的切換與故障轉移:
一、物理備數據庫的切換
切換必須在當前主數據庫上發起,并且在目標備數據庫上完成。下面的步驟描述如何執行切換。
第 1 步檢驗是否可能執行切換。
在當前主數據庫上,在主數據庫上查詢 V$DATABASE 固定視圖的SWITCHOVER_STATUS 列,以檢驗是否可能執行切換。例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
在 SWITCHOVER_STATUS 列中的TO STANDBY 值指出可能切換主數據庫到備角色。如果TO STANDBY 值沒有顯示,則檢查Data Guard 配置是否正確起作用(例如,檢查所有的LOG_ARCHIVE_DEST_n 參數值被正確指定)。如果在 SWITCHOVER_STATUS 列中的值是SESSIONS ACTIVE,你需要終止可能阻礙切換處理的活動用戶或SQL會話。如果,在執行這些步驟之后,SWITCHOVER_STATUS 列還是顯示SESSION ACTIVE,你能通過添加WITH SESSION SHUTDOWN 子句到步驟2 中描述的ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY 語句來成功執行切換。
第 2 步在主數據庫上發起切換。
要更改當前主數據庫到物理備數據庫角色,在主數據庫上使用下面 SQL 語句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
在這個語句完成后,主數據庫轉換到備數據庫。當前控制文件在切換前備份到當前SQL會話跟蹤文件。這使得有可能重構當前控制文件,如果必要的話。
第 3 步關閉并重啟前主實例。
關閉前主實例,并重啟和安裝數據庫:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
注意:在切換過程的這個點,兩個數據庫都配置為備數據庫。
第 4 步檢驗 V$DATABASE 視圖中的切換狀態。
在你更改主數據庫到物理備角色,以及配置中的備數據庫接收到切換通知之后,你應該檢驗目標備數據庫是否處理切換通知,通過查詢目標備數據庫上的V$DATABASE 固定視
圖的SWITCHOVER_STATUS 列。
例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
如果 SWITCHOVER_STATUS 列中的值是SESSION ACTIVE,你需要確定并終止可能阻礙切換處理的活動用戶或SQL 會話。
如果,在執行這些步驟之后,SWITCHOVER_STATUS 列還是顯示SESSION ACTIVE,你能處理到步驟5,并過添加WITH SESSION SHUTDOWN 子句到切換語句。
第 5 步切換目標物理備數據庫角色到主角色。
當備數據庫實例安裝在重做應用模式或對只讀訪問打開時,你能將物理備數據庫從備角色切換到主角色。必須是這些模式之一,主數據庫的切換請求才能被調度。在備數據庫處于適當的模式,在你希望更改主角色的物理備數據庫上,執行下面的SQL 語句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
第 6 步完成備數據庫到主角色的轉換。
你執行的任務依賴于物理備數據庫是否曾經以只讀模式打開過:
l 如果物理備數據庫自從上次啟動過后沒有以只讀模式打開過,執行SQL ALTER DATABASE OPEN 語句來打開新的主數據庫:
SQL> ALTER DATABASE OPEN;
l 如果物理備數據庫自從上次啟動過后曾經以只讀模式打開,你必須關閉目標備數據庫并重啟:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
注:
不需要關閉并重啟在切換的時候聯機的其它備數據庫(不包括在切換中的)。這些備數據庫在切換完成后將繼續正常起作用。
第 7 步如果必要,在備數據庫上重啟日志應用服務。
對于新的物理備數據庫和 Data Guard 配置中的每個其它物理或邏輯備數據庫,如果日
志應用服務沒有預先配置在切換過程中持續打開,使用合適的命令來重啟日志應用服務。
第 8 步開始發送重做數據到備數據庫。
在新的主數據庫上執行下面語句:
SQL> ALTER SYSTEM SWITCH LOGFILE;
二、物理備數據庫的故障轉移
本小節描述如何執行包含物理備數據庫的故障轉移。
在包含物理備數據庫的故障轉移過程中:
l 在所有情況中,在故障轉移后,原主數據庫不能再參與在 Data Guard 配置中。
l 在大多數情況中,其它邏輯或物理備數據庫不直接參與配置中剩余的故障轉移,并不必須關閉或重啟。
l 在一些情況中,可能有必要在配置新的主數據庫之后重建所有備數據庫。
這些情況在下面的故障轉移步驟中的適當位置描述。
注:
Oracle 推薦你只使用在下面小節中描述的故障轉移步驟和命令來執行故障轉移。不要使用ALTER DATABASE ACTIVATE STANDBY DATABASE 來執行故障轉移,因為這條語句可能導致數據丟失。
故障轉移步驟
本小節描述了轉換挑選的物理備數據庫到主角色必須執行的步驟。任何也是配置中的一部分的其它物理或邏輯備數據庫將保留在配置中,并將不需要關閉或重啟。
如果目標備數據庫操作于使用日志寫進程(LGWR)的***保護模式或***可用性模式,在歸檔重做日志文件中不應該存在中斷,你能直接進行到步驟4。否則,從步驟1 開始以確定是否必須執行一些手工中斷解決步驟。
第 1 步確定并解決歸檔重做日志文件中的任何中斷。
要在目標備數據庫上確定是否在歸檔重做日志文件中存在中斷,查詢V$ARCHIVE_GAP 視圖。V$ARCHIVE_GAP 視圖包含對于每個線程已知丟失的歸檔重做日志文件的序列號。返回的數據只反映***的中斷。
例如:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM
V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
在這個例子中,中斷包括線程 1 的歸檔重做日志文件序號90、91、和92。如果可能,
從主數據庫拷貝所有確定的丟失的歸檔重做日志文件到目標備數據庫,并注冊它們。這必須
對于每個線程執行。
例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
第 2 步重復步驟1 直到解決所有中斷。
在步驟 1 中執行的查詢只顯示***的中斷信息。在解決那個中斷后,你必須重復步驟1直到查詢返回零行。
第 3 步拷貝任何其它丟失的歸檔重做日志文件。
要確定是否還有其它丟失的歸檔重做日志文件,在目標備數據庫上查詢V$ARCHIVED_LOG 視圖以獲得每個線程的***序列號。
例如:
SQL> SELECT THREAD# AS THREAD, MAX(SEQUENCE#)
2> OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
THREAD LAST
---------- ----------
1 100
從包含比目標備數據庫上可用的***序列號更高序列號的主數據庫,拷貝任何可用的歸檔重做日志文件到目標備數據庫并注冊它們。這必須對每個線程執行。
例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
在所有可用的歸檔重做日志文件已經注冊后,如步驟 1 中描述地查詢V$ARCHIVE_GAP 視圖,檢驗沒有更多的中斷在步驟3 中引入。
注:
如果,當執行步驟1 到3 時,你不能解決在歸檔重做日志文件中的中斷(例如,因為你
沒有訪問故障主數據庫所在的系統),在故障轉移過程中會發生數據丟失。
第 4 步在目標物理備數據庫上發起故障轉移。
執行下面語句以發起故障轉移:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
FORCE 關鍵詞終止目標物理備數據庫上活動的RFS 進程,使得故障轉移能不用等待網
絡連接超時而立即進行。
注:
故障轉移添加一個重做結束的標識到***一個歸檔的日志文件的頭部,并發送重做到所有允許的對于主數據庫有效的目的地(使用VALID_FOR=(PRIMARY_ROLE, *_LOGFILES)或VALID_FOR=(ALL_ROLE, *_LOGFILES)屬性指定)。
在SQL 語句中FINISH 關鍵詞必須跟在所有其它關鍵詞后面,除了FORCE、WAIT、或NOWAIT。
第 5 步轉換物理備數據庫到主角色。
一旦 SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE 語句成功完成,通過執行下面SQL 語句更改物理備數據庫到主數據庫:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
在執行這條 SQL 語句之后,目標備數據庫經歷到主角色的轉換。作為結果,你不能再使用這個數據庫作為備數據庫,并且任何后繼的從原主數據庫接收的重做不能被應用。再故障轉移過程中,備重做日志文件在其它所有從原主數據庫導出的備數據庫上被自動歸檔并恢復。只有當備目的地在新的主數據庫上正確定義時這才會發生。
沒有必要關閉并重啟任何其它在配置中沒有參與故障轉移的備數據庫。
第 6 步完成備數據庫到主數據庫角色的轉換。
你在本步驟執行的任務依賴于物理備數據庫是否曾經以只讀模式打開過:
l 如果物理備數據庫自從上次啟動過后沒有以只讀模式打開過,執行ALTER DATABASE OPEN 語句來打開新的主數據庫。
SQL> ALTER DATABASE OPEN;
然后,跳到步驟 7。
l 如果物理備數據庫自從上次啟動過后曾經以只讀模式打開,你必須關閉目標備數據庫并重啟:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
目標物理備數據庫現在經歷到主數據庫角色的轉換。
第7 步備份新的主數據庫。
在執行 STARTUP 語句之前,備份新的主數據庫。立即執行備份是必要的安全措施,因為你無法在沒有完整的數據庫備份拷貝的情況下,恢復故障轉移之后的更改。
作為故障轉移的結果,原數據庫不能再參與在 Data Guard 配置中,并且所有其它備數據庫現在接收和應用從新的主數據庫的重做數據。
關于物理備數據庫的切換與故障轉移的講解到這里就全部講完啦,希望大家都能夠從上文中涉及到的內容中有所收獲。





















