1. 程式人生 > 其它 >Data Guard高階玩法:通過閃回恢復switchover主庫 (r10筆記第13天)

Data Guard高階玩法:通過閃回恢復switchover主庫 (r10筆記第13天)

最近又試了下Data Guard的新玩法,可以通過閃回恢復switchover的主庫,這種場景聽起來比較特別,但是Oracle依舊支援。 我們的大體思路就是,在主庫我們標記一下資料狀態,然後做Switchover之後,我們truncate 某個表中的資料,也就間接模擬了一個數據庫故障,這個時候需要做回退,需要把主庫的資料都恢復到切換前的狀態,這個聽起來還是比較複雜的場景,備庫還可以一如既往的跟著主庫嗎? 我們用圖表來說明一下: 首先是一個主備庫的環境:

switchover是計劃內的任務,就是主切備,備切主。

這個時候發現切換出現了問題,我們需要緊急回退,需要回退到切換前的狀態,要知道此時的主庫已經不是原來的主庫,備庫也不是原來的備庫了。閃回是否依舊可行,備庫是否可以依舊選擇一個新的斷點可以重新同步?

我們來通過實戰演練一下,當然這個操作需要保證主備庫都開啟了閃回資料庫的特性,在11g中開啟已經不再需要重啟資料庫,open階段即可隨時開關。

主庫的操作如下:

我們建立一個表test,插入2行記錄。 SQL> select count(*)from n1.test; COUNT(*) ---------- 2 然後我們得到一個初始的SCN值。 SQL> select current_scn,database_role,flashback_on from v$database; CURRENT_SCN DATABASE_ROLE FLASHBACK_ON ----------- ------------------------------ ------------------------------------ 2084486 PRIMARY YES

檢查DG Broker的狀態,這裡snewtest2是主庫,newtest2是備庫。 DGMGRL> show configuration; Configuration - dg_newtest2 Protection Mode: MaxPerformance Databases: snewtest2 - Primary database newtest2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 然後我們開始測試這個方案。

備庫的操作如下:

DGMGRL> switchover to newtest2; Performing switchover NOW, please wait... New primary database "newtest2" is opening... Operation requires startup of instance "newtest2" on database "snewtest2" Starting instance "newtest2"... ...

切換之後檢視DG Broker的狀態,也看到主備庫的角色已經調整過來了。

DGMGRL> show configuration; Configuration - dg_newtest2 Protection Mode: MaxPerformance Databases: newtest2 - Primary database snewtest2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 這個時候我們查看錶test的資料。 SQL> select count(*)from n1.test; COUNT(*) ---------- 2

然後開始破壞。直接truncate SQL> truncate table n1.test; Table truncated.

這個時候業務層面發現了資料的連鎖錯誤,準備開始回退到初始的狀態。 SQL> shutdow immediate SQL> startup mount

開始閃回資料庫,恢復到初始的資料狀態

SQL> flashback database to scn 2084486; Flashback complete.

這個時候需要resetlogs SQL> alter database open resetlogs; Database altered. 原來的主庫操作如下:

先初步驗證,發現這個時候DG Broker驗證失敗。 DGMGRL> show configuration; Configuration - dg_newtest2 Protection Mode: MaxPerformance Databases: newtest2 - Primary database snewtest2 - Physical standby database Error: ORA-16810: multiple errors or warnings detected for the database Fast-Start Failover: DISABLED Configuration Status: ERROR 我們關閉日誌的應用。 SQL> recover managed standby database cancel;

然後開始閃回到指定的SCN SQL> flashback database to scn 2084486; Flashback complete. 完成之後,重新開啟日誌應用。 SQL> recover managed standby database disconnect from session; Media recovery complete.

這個時候操作成功,我們就直接開啟ADG,把資料庫開啟到open狀態。 SQL> alter database open;

稍作等待,就會發現備庫的狀態為READ ONLY WITH APPLY.

SQL> select open_mode from v$database; OPEN_MODE ---------------------------------------- READ ONLY WITH APPLY

這個時候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 這個過程讓我對閃回的強大功能又有了新的認識和了解,希望在一些極端場景中依然能夠幫助到你們。