oracle數據庫高可用DG之gap問題處理

當備庫不能接受到一個或多個主庫的歸檔日誌文件時候,就發生了archive gap。丟失的歸檔日誌文件就是gap,如果有gap,如果發生gap,dg會自動檢測和處理通過拷貝丟失的日誌到備庫。

gap什麼時候被發現

當主庫在本地歸檔一個日誌,但是備庫沒有收到,每分鐘,主庫就會看下他的備庫是否在規定日誌文件序號上有gap。

gap怎麼被解決

gap 恢復通過投票機制處理,對物理和邏輯備庫,dg檢查gap及通過在主庫上面獲取丟失的redo日誌文件來解決。

自動gap恢復依賴主庫的可用性,如果主庫不可樣,你配置了多個物理備庫,那麼你可以配置額外的參數,這樣redo apply就可以在別的備庫上來解決gap。

使用fetch archive log(fal)來解決歸檔gap

fal 客戶端自動要求歸檔日誌文件的傳輸。

fal服務端處理客戶端發過來的請求。

fal機制處理下面類型的gap和問題:

1當創建了一個物理或邏輯的備庫,fal機制自動的獲取在主庫熱備時候產生的歸檔日誌文件

2當備庫已經接受了歸檔日誌文件,但是出問題了,fal機制能自動重新獲取歸檔日誌文件來解決下面問題:

1當歸檔日誌文件在被應用到備庫之前被刪除了

2因爲磁盤損壞導致的歸檔日誌文件不能被應用

3當歸檔日誌文件被別的文件替換了

當你有多個物理備庫的時候,fal機制能自動獲取丟失的歸檔日誌文件在別的物理備庫上面。

手工檢測和解決archive gap

在物理備庫上,爲了檢測是否有gap,執行下面的語句

SQL> SELECT * FROM V$ARCHIVE_GAP;
    THREAD#  LOW_SEQUENCE#  HIGH_SEQUENCE#
-----------  -------------  --------------
          1              7              10

上面的例子說明你的物理備庫當前缺少線程1的序號7到10文件。

然後在主庫上定位這些丟失的文件

SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND   2> SEQUENCE# BETWEEN 7 AND 10;
拷貝這些日誌文件到物理備庫,然後註冊到物理備庫上

 ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_7.arc';
註冊完這些日之後,可以重新啓動redo apply


邏輯備庫

SQL> COLUMN FILE_NAME FORMAT a55
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L
  2> WHERE NEXT_CHANGE# NOT IN
  3> (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)
  4> ORDER BY THREAD#,SEQUENCE#;

   THREAD#  SEQUENCE# FILE_NAME
---------- ---------- -----------------------------------------------
         1          6 /disk1/oracle/dbs/log-1292880008_6.arc
         1         10 /disk1/oracle/dbs/log-1292880008_10.arc

這個例子中說明有gap,因爲在邏輯備庫上對線程1有2個文件顯示,如果是沒有gap的話,這個查詢會對每個線程顯示一個文件,這個結果輸出顯示註冊的最高的文件時序列號10,但是缺少了序列號6的文件

拷貝丟失的日誌文件,然後註冊

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_10.arc';

註冊後重啓sql apply


原文地址:http://blog.csdn.net/aoerqileng/article/details/39323359

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章