【DG】 DataGuard 中處理archive gap的方法

lhrbest發表於2017-06-24

【DG】 DataGuard 中處理archive gap的方法



DG 中處理archive gap的方法
====================
當Primary Database的某些日誌沒有成功傳送到Standby Database, 這時候Standby DB上就會出現歸檔裂縫(Archive Gap)。

Oracle主要由兩個引數處理Archive Gap:

FAL_* 是Fetch Archive Log的縮寫,通過配置FAL_serverFAL_client實現Gap檢測的一種機制。從FAL 這個名字可以看出,這個過程是Standby DB主動發起的“取”日誌的過程,Standby DB就是FAL_CLIENT. 它是從FAL_server中取這些缺失的Gap, 10g中,這個FAL_server可以是Primary DB, 也可以是其他的Standby DB。如:FAL_SERVER='PR1,ST1,ST2';

       當Lgwr和Arch程式傳送redo/archive到standby端的時候,當前log sequence會同standby端RFS程式上次接收到的log sequence做比較,如果發現二者有斷檔,RFS會根據FAL_Server傳送請求,要求主庫傳送缺失的日誌。或者當備端的RFS程式收到archivelog的時候,更新standby的控制檔案以記錄這些歸檔資訊,一旦MRP發現控制檔案被更新,會進行Recover/Apply log。如果MRP發現所需的日誌出現缺失或者所需的日誌檔案不可用(損壞或者被物理移除等),也會通過FAL_Server來傳送相應的處理請求。
       MRP是standby端的恢復程式,不像RFS程式一樣與parimary有直接關聯,通過FAL的引數配置來主動請求primary處理gap。
       從9i以後,一般都不需要手工處理確實的日誌,FAL自動會幫我們處理這些問題。 但是,並非我們就完全不用手工處理了,比如,你的磁碟空間爆滿,歸檔日誌在傳到備庫前被轉移到其他地方,這種情況下FAL是不能解決問題的,需要手工處理一下。 

解決辦法:

解決gap的方法有兩種,方法雖然略有不同,但是原理是相同的

一、gap較少,可以直接將缺少的歸檔scpstandby,在standby手工註冊下即可

二、gap較多,在primary 做基於scnbackup,同時建立一個新的standbycontrolfile,將備份好的backupset standbycontrolfile 拷貝的備庫的相應目錄下,進行restorerecover的操作即可因為這個案例中,standby丟失的歸檔太多,推薦用第二種方法


///////////////////////////////////////////////////////////////////////////////////////////////////

方法一:手工處理日誌GAP的步驟:

1、在備庫檢查是否有日誌缺失
SQL> select * from V$ARCHIVE_GAP;
THREAD#   LOW_SEQUENCE#     HIGH_SEQUENCE#
------------ ----------------------- ----------------------
1                  99                               109
從上面的資訊可以看出,備庫中缺失了99到109的日誌。
2、在主庫中查詢缺失的日誌的所在路徑和名稱
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 99 AND 109 ;
NAME
--------------------------------------------------------------------------------
/u01/archivelog/1_99_626106231.arc
/u01/archivelog/1_100_626106231.arc
/u01/archivelog/1_101_626106231.arc
/u01/archivelog/1_102_626106231.arc
/u01/archivelog/1_103_626106231.arc
/u01/archivelog/1_104_626106231.arc
/u01/archivelog/1_105_626106231.arc
/u01/archivelog/1_106_626106231.arc
/u01/archivelog/1_107_626106231.arc
/u01/archivelog/1_108_626106231.arc
/u01/archivelog/1_109_626106231.arc
如果把日誌移動到其他路徑,則把日誌所在路徑換成當前實際所在路徑。
3、把日誌拷貝到備庫上

4、在備庫上手工註冊上一步中從主庫拷貝來的日誌
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/archivelog/1_99_626106231.arc';
Database altered.
......
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/archivelog/1_109_626106231.arc';
Database altered.
5、稍等片刻,觀察備庫的alert日誌資訊 :
Sun Aug 12 20:38:47 2007
Media Recovery Log /u01/archivelog/1_99_626106231.arc
Media Recovery Log /u01/archivelog/1_100_626106231.arc
Media Recovery Log /u01/archivelog/1_101_626106231.arc
Media Recovery Log /u01/archivelog/1_102_626106231.arc
......
從以上資訊,可以看出之前註冊的日誌已經被正常應用。或者查詢檢視v$archived_log的applied欄位
6、檢查備庫是否還有日誌GAP
SQL> select * from V$ARCHIVE_GAP;
no rows selected
如果有行返回,則重複2-5步,直到查詢結果是"no rows selected"。
如果日誌只是臨時移動到其他地方,過後會再移回原路徑,則不用這麼大費周折手工去手工處理了,把日誌拷回原處後FAL會自動處理GAP。

//////////////////////////////////////////////////////////////////////////////
方法二:操作流程提綱

(1)      standby 取消recover

SQL> select * from v$archive_gap ;

SQL> alter database recover managed standby database cancel;


(2)      在主庫v$archived_log查詢gapLOW_SEQUENCE#-1對應的scn(即:first_change#

SQL>select THREAD#,SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#from v$archived_log where SEQUENCE#=98;

  THREAD#    SEQUENCE#   FIRST_CHANGE#    NEXT_CHANGE#

  ---------- ---------- ------------- ------------

         1      481     542543    551725


(3)      在primary做基於該scn的增量備份

RMAN> run {

2> allocate channel c1 device type disk;

3> allocate channel c2 device type disk;

4> backup incremental from scn 542543 database format '/oradata/bak/ora_scn_%U.bak';    #incremental單詞不要寫錯

5> release channel c1;

6> }


(4)      在primary建立新的standby controlfile

SQL> alter database create standby controlfile as '/oradata/bak/control.ctl';


(5)      將增量的備份集和建立好的standby controlfile 拷貝的備庫


(6)      備庫shutdown

SQL> shutdownimmediate


(7)      使用新的standby controlfile 啟動備庫到mount

SQL> startup mount;


(8)      Standby recover

RMAN> catalog start with '/oradata/bak/ora_scn_05ohoqvu_1_1';     ###放在standby的增量備份的備份集

RMAN> recover database noredo;



(9)      驗證結果

Standby 執行接收並恢復日誌操作

SQL> alterdatabase recover managed standby database disconnect from session;

SQL> select * fromv$archive_gap

no rows selected

SQL> select THREAD#,max(SEQUENCE#) from v$archived_log group by THREAD#;

   THREAD# MAX(SEQUENCE#)

---------- --------------

         1           3729

 

Primary端驗證結果

 

SQL> select THREAD# ,max(SEQUENCE#) from v$archived_log  group by THREAD#;

   THREAD# MAX(SEQUENCE#)

--------- --------------

1                                      3729


Primary進行日誌切換,檢視standby告警日誌。







About Me

...............................................................................................................................

● 本文整理自網路

● 本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 聯絡我請加QQ好友(646634621),註明新增緣由

● 於 2017-06-02 09:00 ~ 2017-06-30 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。

【DG】 DataGuard 中處理archive gap的方法
DBA筆試面試講解
歡迎與我聯絡

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

相關文章