【恩墨學院】深入解析:一主多備DG環境,failover的實現過程詳解

恩墨學院發表於2018-03-29

【恩墨學院】深入解析:一主多備DG環境,failover的實現過程詳解

作者介紹


現任雲和恩墨資料庫技術顧問,擅長的安裝配置、故障診斷、效能診斷、效能最佳化、備份容災解決方案的設計與實施。

個人技術部落格:https://www.cnblogs.com/jyzhao



在DG中,switchover和failover是兩個重要的概念,也是DG實現的核心。根據不同的DG配置,switchover和failover也是有差異的。當主庫被crash之後,如何進行DG foilover的操作?


概述


本文是針對在DG災備環境進行failover操作以及後續恢復的報告。


測試環境

資料庫版本:Oracle 11.2.0.4
Site A:主庫 db_unique_name=jyzhao
Site B:備庫(實時應用)db_unique_name=mynas
Site C:備庫(延遲1小時應用)db_unique_name=jyzhao_s


簡稱註釋

A庫 => Site A:主庫
B庫 => Site B:備庫(實時應用)
C庫 => Site C:備庫(延遲1小時應用)


當A庫crash後,在B庫進行failover將B切換為新的主庫,確認failover之後,A庫和C庫應該如何處理才可以成為新的備庫繼續使用?是否需要重建?重建的話,是否需要重新備份來恢復,以前的備份是否可以用來建立備庫?

問題


驗證過程


 1、A庫異常關閉


A庫:

SQL>shutdown abort


 2、B庫進行failover切換為新主庫


failover 標準步驟如下:

#取消DG應用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

#重啟下資料庫(建議)

shutdown immediate;

startup

#操作不可逆,確定實際情況需要failover

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH force;

SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

#嘗試常規切換為主庫

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;


如果這一步的常規切換失敗,提示需要介質恢復,那麼:

 1)恢復備庫 recover standby database until cancel;

 2)啟用備庫 alterdatabaseactivatestandbydatabase;


#最後重新啟動資料庫

shutdownimmediate;

startup


檢視此時B庫的資訊:

SQL>selectname, database_role, open_mode fromgv$database;


Oracle 實戰


可以看到,目前B庫已成為新的主庫,redo日誌的sequence重新開始。


 3、要求C庫成為新主庫的備庫


現在要求C庫成為新主庫的備庫。是否需要重建C庫呢?答案是不需要。下面具體來看下驗證過程。


C庫的alert日誌:


Oracle 實戰

可以看到,在A庫crash之後,C庫收到網路無法連線到A庫的告警,說明C庫目前沒有新的操作。


接下來想要C庫成為B庫(新主庫)的備庫,就需要嘗試在B庫上配置DG引數,使得B庫的歸檔可以傳輸到C庫。


Oracle 實戰

同時在B庫的tnsnames.ora檔案中增加到C庫的連線:

#StandbySingle Instance

JYZHAO_S=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = jyzhao_s))  )


在B庫設定完成後,觀察B庫的告警:


然後返回C庫操作,將C庫開啟實時日誌應用:

SQL>alter database recover managed standby database cancel;

Databasealtered.

SQL>alter database recover managed standby database using current logfile disconnect from session;

Databasealtered.


此時再觀察C庫的告警日誌:


實際看到,C庫已經可以正常應用日誌。說明C庫不需要重建即可透過簡單配置成為新主庫B庫的新備庫。


 4、要求A庫成為新主庫的備庫


此時A庫啟動的話,是一個獨立執行的資料庫,如果想將A庫也設定為主庫的話,那麼,透過新主庫的最新備份肯定是可行的,但是如果資料量很大,之前A庫自己本身有歷史的備份,能否不再耗時備份新主庫,直接透過歷史的備份恢復呢?其實這個從上面的C庫不再需要重建直接成為新主庫的備庫,也可以推斷出,是可以的。只需要確認這個備份是在failover之前完成的。下面我們來具體實驗驗證下可行性。


在B庫建立新的備庫控制檔案,並傳輸到A庫相同路徑下:

backupcurrentcontrolfileforstandbyformat'/tmp/std_control02.ctl';

在A庫啟動到nomount,恢復新的備庫控制檔案

restorestandbycontrolfilefrom'/tmp/std_control02.ctl';

在A庫檢視資料檔案頭的檢查點,確認是在failover之前:


Oracle 實戰


上面這個資料檔案頭的檢查點是0,說明資料檔案沒有正確獲取到,實際上是由於OMF的名字有變化,直接將資料檔案路徑catalog到備份集中,再switch即可。

catalogstartwith'+DATA1/jyzhao/datafile/';

switchdatabase to copy;


再次查詢:


Oracle 實戰


此時在mount狀態下開啟日誌應用:

alter database recover managed standby database disconnect from session;


從告警日誌觀察,確認應用到最新時,取消日誌應用:

alter database recover managed standby database cancel;


開啟資料庫,開啟實時應用:

alter database recover managed standby database USING CURRENT LOGFILE disconnect from session;

最終查詢可以正常實時應用。


結論



一般來說,在A庫crash之後,B庫failover成為新的主庫,那麼原來設定為延遲1小時應用的C 庫是可以直接配置成為新主庫的備庫。A庫修復後,也可以透過failover之前的現有備份集來恢復到failover之前的狀態,而不需要在新主庫重新去備份。


恩墨學院隸屬於雲和恩墨(北京)資訊科技有限公司,致力於提供專業高水準的與大資料培訓服務,挖掘培養大資料與資料庫人才。恩墨學院提供包括個人實戰技能培訓、個人認證培訓、企業內訓在內的全方位大資料和資料庫技術培訓。ACE級別超強師資,配備專業實驗室,沉浸式學習與訓練,專業實驗室、配備專業助教指導訓練。能迅速融入專家圈子,業內資源豐富,迅速積累職場人脈。課程包括:班、Oracle Oracle OCP考試等。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28530558/viewspace-2152410/,如需轉載,請註明出處,否則將追究法律責任。

相關文章