Data Guard高階玩法:通過閃回恢復failover備庫
今天看到有一個網友提了一個問題,描述很簡短
測試DG時,主庫不能當機,如何測試failover?
其實這個需求從業務層面來說是合理的,一個資料量很大的核心資料庫,如果需要做災難演練,就希望在備庫上做一下演練工作,而這個演練其實又不想影響到目前的主庫,而且又希望能夠儘可能模擬真實的情況,我想這樣對於運維部門來說是最具有考核力度,而對於開發業務部門來說是最受歡迎的,因為他們什麼都不需要改動。
而從技術角度來看,似乎有一些地方需要考量,如果備庫Failover為主庫,那麼這個主庫肯定是可以進行讀寫操作的,如果把它再切回備庫,資料一致性怎麼保證,怎麼能保證是從上次的斷電開始恢復。如果可以做,那真是一大福利。
我們來看看Oracle提供的方式方法,兩大法寶,switchover和Failover
Switchover切換的核心指令碼如下,
在備庫執行,取消日誌應用
recover managed standby database cancel;
在主庫執行,切換角色
Alter database commit to switchover to physical standby with session shutdown;
而Failover的核心指令碼則為:
在備庫執行
alter database recover managed standby database finish force;
alter database commit to switchover to primary;
如此來看,要實現上面的部分還是有一些難度。
今天反反覆覆測試了不下十多次,重建了很多次環境,總算在晚飯過後把這個問題順利除錯好了,雖然思路上是可行的,但是有一個地方總是卡在了下面的錯誤上。
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: '/U01/app/oracle/oradata/newtest2/system01.dbf'
明白了原委,解決起來全然不費功夫。
我們先講講思路,還是閃回,但是閃回的玩法有一些差別,和reinstate的方式有一些區別。假設是一主一備的環境,備庫開啟了閃回資料庫功能。
我們不動原來的主庫,把備庫Failover為主庫。
然後這個時候Failover的主庫可讀可寫,當然最後還是要切換回備庫接收歸檔,可以使用閃回,同時還需要切換角色,這個地方需要好好琢磨一番改怎麼處理。
假設我們的資料庫主庫為newtest2,備庫為snewtest2
在備庫snewtest2上開啟閃回,在備庫上MRP可以實時接受資料變化。
SQL> alter database open;
Database altered.
SQL> SQL> alter database flashback on;
Database altered.
得到一個參考的SCN
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1765837
檢視閃回資料庫特性是開啟的。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES
然後我們在備庫上開始failover
DGMGRL> DGMGRL> failover to snewtest2;
Performing failover NOW, please wait...
Failover succeeded, new primary is "snewtest2"
DGMGRL>
操作很快完成,我們檢視備庫此時的狀態和角色
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------------------------------------- --------------------------------
READ WRITE PRIMARY
當然這個步驟可以做一些讀寫操作之類的。
然後我們開始計劃切回備庫。
SQL> shutdown immediate
SQL> startup mount
然後開啟閃回資料庫,恢復到指定的SCN,這個時候要注意,此時還是主庫。
SQL> flashback database to scn 1765837;
Flashback complete.
我們需要切換為備庫,這個時候切換的命令就是關鍵,不是使用switchover的方式。
SQL> alter database convert to physical standby;
Database altered.
當然這個時候資料庫在nomount階段,我們需要重啟備庫。
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted
SQL> shutdown immediate
SQL> startup mount
重新配置一下DG Broker即可,可以設定dg_broker_start=false,停掉dmon,然後刪掉$ORACLE_HOME/dbs下的dr*newtest2.dat的配置檔案,重新配置DG Broker即可。
配置起來都是老套路。
簡單配置後,DG Broker的檢查就正常了。
DGMGRL> DGMGRL> show configuration;
Configuration - dg_newtest2
Protection Mode: MaxPerformance
Databases:
newtest2 - Primary database
snewtest2 - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
對應的資料庫日誌中可以看到後臺已經開始應用日誌了。
RFS[2]: Assigned to RFS process 44981
RFS[2]: Selected log 5 for thread 1 sequence 48 dbid 795252212 branch 921251959
Tue Aug 30 21:32:01 2016
Archived Log entry 5 added for thread 1 sequence 48 ID 0x2f7352f8 dest 1:
Tue Aug 30 21:32:01 2016
Media Recovery Log /U01/app/oracle/fast_recovery_area/SNEWTEST2/archivelog/2016_08_30/o1_mf_1_48_cwc2pk57_.arc
Media Recovery Waiting for thread 1 sequence 49 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 49 Reading mem 0
Mem# 0: /U01/app/oracle/fast_recovery_area/SNEWTEST2/onlinelog/o1_mf_4_cwc0lmr7_.log
當實現這個看起來有些特殊的需求的時候,我真心內心充滿了喜悅,也著實驚歎Oracle的閃回給備庫帶來了如此多的改進。
測試DG時,主庫不能當機,如何測試failover?
其實這個需求從業務層面來說是合理的,一個資料量很大的核心資料庫,如果需要做災難演練,就希望在備庫上做一下演練工作,而這個演練其實又不想影響到目前的主庫,而且又希望能夠儘可能模擬真實的情況,我想這樣對於運維部門來說是最具有考核力度,而對於開發業務部門來說是最受歡迎的,因為他們什麼都不需要改動。
而從技術角度來看,似乎有一些地方需要考量,如果備庫Failover為主庫,那麼這個主庫肯定是可以進行讀寫操作的,如果把它再切回備庫,資料一致性怎麼保證,怎麼能保證是從上次的斷電開始恢復。如果可以做,那真是一大福利。
我們來看看Oracle提供的方式方法,兩大法寶,switchover和Failover
Switchover切換的核心指令碼如下,
在備庫執行,取消日誌應用
recover managed standby database cancel;
在主庫執行,切換角色
Alter database commit to switchover to physical standby with session shutdown;
而Failover的核心指令碼則為:
在備庫執行
alter database recover managed standby database finish force;
alter database commit to switchover to primary;
如此來看,要實現上面的部分還是有一些難度。
今天反反覆覆測試了不下十多次,重建了很多次環境,總算在晚飯過後把這個問題順利除錯好了,雖然思路上是可行的,但是有一個地方總是卡在了下面的錯誤上。
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: '/U01/app/oracle/oradata/newtest2/system01.dbf'
明白了原委,解決起來全然不費功夫。
我們先講講思路,還是閃回,但是閃回的玩法有一些差別,和reinstate的方式有一些區別。假設是一主一備的環境,備庫開啟了閃回資料庫功能。
我們不動原來的主庫,把備庫Failover為主庫。
然後這個時候Failover的主庫可讀可寫,當然最後還是要切換回備庫接收歸檔,可以使用閃回,同時還需要切換角色,這個地方需要好好琢磨一番改怎麼處理。
假設我們的資料庫主庫為newtest2,備庫為snewtest2
在備庫snewtest2上開啟閃回,在備庫上MRP可以實時接受資料變化。
SQL> alter database open;
Database altered.
SQL> SQL> alter database flashback on;
Database altered.
得到一個參考的SCN
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1765837
檢視閃回資料庫特性是開啟的。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES
然後我們在備庫上開始failover
DGMGRL> DGMGRL> failover to snewtest2;
Performing failover NOW, please wait...
Failover succeeded, new primary is "snewtest2"
DGMGRL>
操作很快完成,我們檢視備庫此時的狀態和角色
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------------------------------------- --------------------------------
READ WRITE PRIMARY
當然這個步驟可以做一些讀寫操作之類的。
然後我們開始計劃切回備庫。
SQL> shutdown immediate
SQL> startup mount
然後開啟閃回資料庫,恢復到指定的SCN,這個時候要注意,此時還是主庫。
SQL> flashback database to scn 1765837;
Flashback complete.
我們需要切換為備庫,這個時候切換的命令就是關鍵,不是使用switchover的方式。
SQL> alter database convert to physical standby;
Database altered.
當然這個時候資料庫在nomount階段,我們需要重啟備庫。
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted
SQL> shutdown immediate
SQL> startup mount
重新配置一下DG Broker即可,可以設定dg_broker_start=false,停掉dmon,然後刪掉$ORACLE_HOME/dbs下的dr*newtest2.dat的配置檔案,重新配置DG Broker即可。
配置起來都是老套路。
簡單配置後,DG Broker的檢查就正常了。
DGMGRL> DGMGRL> show configuration;
Configuration - dg_newtest2
Protection Mode: MaxPerformance
Databases:
newtest2 - Primary database
snewtest2 - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL>
對應的資料庫日誌中可以看到後臺已經開始應用日誌了。
RFS[2]: Assigned to RFS process 44981
RFS[2]: Selected log 5 for thread 1 sequence 48 dbid 795252212 branch 921251959
Tue Aug 30 21:32:01 2016
Archived Log entry 5 added for thread 1 sequence 48 ID 0x2f7352f8 dest 1:
Tue Aug 30 21:32:01 2016
Media Recovery Log /U01/app/oracle/fast_recovery_area/SNEWTEST2/archivelog/2016_08_30/o1_mf_1_48_cwc2pk57_.arc
Media Recovery Waiting for thread 1 sequence 49 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 49 Reading mem 0
Mem# 0: /U01/app/oracle/fast_recovery_area/SNEWTEST2/onlinelog/o1_mf_4_cwc0lmr7_.log
當實現這個看起來有些特殊的需求的時候,我真心內心充滿了喜悅,也著實驚歎Oracle的閃回給備庫帶來了如此多的改進。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2124234/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Data Guard高階玩法:通過閃回恢復switchover主庫
- Oracle 11g Data guard 物理備庫應急切換(failover)後原有主庫的重建(通過RMAN恢復)OracleAI
- Oracle 19C Data Guard基礎運維-07 failover後閃回恢復dg架構Oracle運維AI架構
- 【備份恢復】閃回資料庫(一)閃回資料庫的管理資料庫
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- 【備份恢復】閃回資料庫(二) 基於 SCN 閃回資料庫資料庫
- 【備份恢復】 閃回技術之閃回刪除
- 閃回查詢恢復過程
- 【備份恢復】閃回資料庫(三)基於時間戳閃回資料庫資料庫時間戳
- 【備份恢復】閃回技術之閃回版本查詢
- Oracle -- 閃回恢復區---實踐1---閃回庫Oracle
- 【備份恢復】閃回資料庫(四)基於可靠還原點閃回資料庫資料庫
- Oracle 11g Data guard 物理備庫故障恢復重建例項Oracle
- 【備份恢復】 閃回技術之閃迴歸檔
- Oracle 12c Data guard 物理備庫應急切換(failover)流程OracleAI
- Oracle 11g Data guard 物理備庫應急切換(failover)流程OracleAI
- Oracle Data Guard Failover(activate)OracleAI
- In Data Guard,choose switchover or failover?AI
- data guard failover on solaris 10AI
- Data Guard物理備庫read/write後,切換回備庫狀態
- Oracle資料庫的閃回恢復區Oracle資料庫
- 資料庫高階恢復資料庫
- Oracle閃回恢復區Oracle
- 【備份恢復】 閃回技術之閃回事務處理查詢
- Data Guard Switchover and Failover Best PracticesAI
- Oracle9i Flashback Query 閃回查詢總結 --- (通過SCN恢復)Oracle
- Data Guard主備庫切換
- Data Guard跳歸檔恢復的案例
- failover切換後恢復原來主庫為新備庫AI
- DATA GUARD主庫丟失資料檔案的恢復(2)
- DATA GUARD主庫丟失資料檔案的恢復(3)
- DATA GUARD主庫丟失資料檔案的恢復(1)
- Oracle DBA2 ---- 閃回恢復Oracle
- (f)--閃回恢復區-- 並行載入對閃庫的影響並行
- 通過duplicat恢復資料庫資料庫
- 【DG】利用閃回資料庫(flashback)修復Failover後的DG環境資料庫AI
- 10g Data Guard physical standby的主備庫角色轉換測試(switchover & failover)AI
- 【DataGuard】物理Data Guard之Failover轉換AI