Oracle

Oracle Data Guard:視圖 v$archive_gap 中何時會存在數據行?

  • November 16, 2016

我正在嘗試學習如何手動解決主備之間的差距,我的 oracle 數據庫的版本是 11gr2。

我做瞭如下:

  1. 一開始,主備同步,日誌序列相同
  2. 禁用參數log_archive_dest_2,主要用於將重做發送到備用
  3. alter system switch logfile在主要創建歸檔日誌
  4. 對備用數據庫執行查詢v$archive_gap以查找主數據庫和備用數據庫之間的差距

在第 4 步,v$archive_gap 沒有返回任何行,所以我對這種情況感到困惑:

Q1:我有參數設置為待機fal_clientfal_server是不是這個因素導致“沒有數據返回v$archive_gap

Q2:如果一切順利,會返回一些數據行v$archive_gap。事實上,我log_archive_dest_2在primary 處禁用了,所以standby 和primary 沒有意識到對方,standby 怎麼知道有差距?

歸檔日誌間隙僅僅意味著備用站點上的應用服務無法繼續,因為在應用的序列和下一個可用序列之間缺少序列(從主站點發送或手動複製)。

換句話說,如果在備用站點應用了序列 57,但下一個可用序列是 59,則應用服務無法繼續,直到序列 58 可用(並且已應用)。

解決差距很大程度上取決於為什麼會有差距。如果使用“刪除所有輸入”選項在主站點上進行歸檔日誌備份並且這些歸檔日誌尚未發送到備用站點,則可能會發生這種情況。由於重新啟用傳送過程時歸檔日誌備份不會自動發送到備用站點,因此在備用站點上檢測到間隙,然後可以在v$archive_gap.

在上面的範例中,解決差距涉及(假設是 Windows 環境):

通過作業系統命令手動將歸檔日誌備份複製到備用站點(在此範例中,我將歸檔日誌備份複製到 l:\oracle\archivegaps):

將歸檔日誌備份註冊到備用站點:

catalog start with 'l:\oracle\archivegaps';

從歸檔日誌備份中解壓歸檔文件:

RUN
{ 
 SET ARCHIVELOG DESTINATION TO 'l:\oracle\archivegaps';
 RESTORE ARCHIVELOG FROM sequence 58 UNTIL sequence 58;
}

向備用站點註冊歸檔日誌(此步驟可能是可選的,因為從備份中解壓縮歸檔日誌可能會自動註冊歸檔日誌,但老實說我不記得了)。

catalog start with 'l:\oracle\archivegaps';

在解決差距之前,您可能還需要重新啟動應用服務:

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

至於你的具體問題:

A1:fal_client 和 fal_server 應該與行是否在 v$archive_gap 中無關。

A2:在應用側檢測到間隙,在技術上不是運輸側,因此即使關閉運輸也可以檢測到間隙。此外,如果在運輸開啟時檢測到差距,然後運輸被關閉,差距仍將列出,v$archive_gap直到差距得到解決。

引用自:https://dba.stackexchange.com/questions/155474