Data Guard Physical Standby Switchover
Data Guard Physical Standby Switchover
一、確保主庫相關參數文件,設置正確
如下為主數據庫相關參數
DB_NAME=pridb
DB_UNIQUE_NAME=pridb
LOG_ARCHIVE_CONFIG='DG_CONFIG=(pridb,stdb)'
CONTROL_FILES='/arch1/chicago/control1.ctl', '/arch2/chicago/control2.ct'
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/chicago/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pridb'
LOG_ARCHIVE_DEST_2='SERVICE=boston ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=stdb'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
同時在主數據庫上增加了額外的備用角色初始化參數。當主數據庫過渡到備用數據庫時,這些參數將生效
AL_SERVER=stdb
DB_FILE_NAME_CONVERT='stdb','pridb'
LOG_FILE_NAME_CONVERT=
STANDBY_FILE_MANAGEMENT=AUTO
二、檢查物理備用數據庫是是可用的
創建物理備用數據庫並設置重做傳輸服務後,您可能需要驗證數據庫修改是否已經成功地從主數據庫傳輸到備用數據庫,要看到在備用數據庫上接收重做數據,您應該首先識別備用數據庫上現有的歸檔重做日誌文件,在主庫手動做一次日誌和歸檔切換,然後再次檢查備用數據庫。下麵的步驟展示了如何執行這些任務。
1、 識別現有的歸檔重做日誌文件。在備用數據庫上,查詢V $ ARCHIVED_LOG視圖,以識別歸檔重做日誌中的現有文件 ,例如:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
2、在主數據庫上,手動做一次日誌切換
SQL> ALTER SYSTEM SWITCH LOGFILE;
3、在備用數據庫上,查詢V $ ARCHIVED_LOG視圖,以驗證已接收到的重做數據並歸檔到備用數據庫
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
4、驗證所接收的重做已應用
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
三、切換前檢查
1、在備庫驗證恢複進程是運行的,下麵的查詢在備用驗證管理恢複正在運行
SQL> SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS
如果恢複檢查沒有運行或開啟實時應用,restart managed recovery with
real-time apply enabled
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT
2、確保參數LOG_ARCHIVE_MAX_PROCESSES的值是4或更高在主庫和備庫,注意不要把它設置得太高,因為附加的歸檔程序可以增加關閉數據庫的時間
3、備庫切換成主庫之前,最好將備庫的Online Redo Log Files做一次cleare,盡管在做SWITCHOVER TO PRIMARY 的時候,備庫上會自動做一次clear,但是Oracle還是建議手動clear一次。
在目標物理備用運行以下查詢,以確定在線重做日誌是否未被cleard
SQL> SELECT DISTINCT L.GROUP# FROM V$LOG L, V$LOGFILE LF
WHERE L.GROUP# = LF.GROUP#
AND L.STATUS NOT IN (‘UNUSED’, ‘CLEARING’,’CLEARING_CURRENT’);
如果上麵的查詢返回行,在備庫停止日誌應用,為每個組#返回和重新啟動Redo應用程序發出以下語句
SQL> ALTER DATABASE CLEAR LOGFILE GROUP ;
4、確認備庫沒有GAP
在物理備用數據庫執行以下查詢,以確定物理備用數據庫是否有GAP
SQL> SELECT * FROM V$ARCHIVE_GAP;
5、確認主備庫的tempfile和datafile狀態是online
三、執行Switchover操作
1、在主庫查詢JOB的狀態
SQL> SELECT * FROM DBA_JOBS_RUNNING;
Note: Job candidates to be disabled among others: oracle text sync and optimizer, RMAN backups, application garbage collectors, application background agents
將個運行job停止
SQL> ALTER SYSTEM SET job_queue_processes=0 SCOPE=BOTH SID=’*’;
SQL> EXECUTE DBMS_SCHEDULER.DISABLE( );
2、打開準備庫的trace
如果出現任何問題,可以提供診斷信息。打開跟蹤並不會對切換時間產生任何明顯的影響,但確實需要空間來執行跟蹤輸出。捕獲主服務器和目標物理備用數據庫的當前值
SQL> SHOW PARAMETER log_archive_trace
SQL> ALTER SYSTEM SET log_archive_trace=8191;
trace文件路徑通過BACKGROUND_DUMP_DEST可知:
SQL> SHOW PARAMETER background_dump_dest
3、創建保證的恢複點(可選)
那麼您可以在主數據庫和備用數據庫中創建一個有保證的恢複點,保證可以切換回退
方法:
在備庫
停止日誌應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
開啟日誌應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
在主庫
SQL> CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
4、查詢確認主庫可以切換到備庫
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
TO STANDBY
如果返回為TO STANDBY 或 SESSIONS ACTIVE可以切換在切換命令上需要使用WITH SESSION SHUTDOWN,如果沒有返回這些值,則不可能進行切換
注:如果主庫是Rac,關閉其他實例,隻留一個實例
5、開始切換
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;
摘自官方文檔:If an ORA-16139 error is encountered, as long as V$DATABASE.DATABASE_ROLE=’PHYSICAL STANDBY’, then you can proceed. A common case where this can occur is when there are a large number of data files. Once managed recovery is started on the new standby, the database will recover. If the role was not changed then you need to cancel the switchover and review the alert logs and trace files further.
在備庫:
確認驗證可以切換到主庫
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
TO PRIMARY
摘自官方文檔:A value of TO PRIMARY or SESSIONS ACTIVE indicates that the standby database is ready to be switched to the primary role. If neither of these values is returned, verify that redo apply is active and that redo transport is configured and working properly. Continue to query this column until the value returned is either TO PRIMARY or SESSIONS ACTIVE
切換到主庫
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
Open the new 主庫
SQL> ALTER DATABASE OPEN.
如果新的備用數據庫(前主數據庫)在切換到備用數據庫後沒有關閉,則將它帶到mount狀態並開始管理恢複。這可以與新的主開放並行進行
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
四、
SQL> ALTER SYSTEM SET job_queue_processes= scope=both sid=’*’
啟用任何禁用的作業。
SQL> EXECUTE DBMS_SCHEDULER.ENABLE();
在創建保證恢複點的所有數據庫上,刪除任何有保證的恢複點
SQL> DROP RESTORE POINT SWITCHOVER_START_GRP;
最後更新:2017-09-20 11:02:40