author:skate
time:2011/09/05
Dataguard的Log Gap檢測和處理原理
提到dataguard的Gap處理機制,大多數人能說出的措施便是設定fal_server和fal_client,從9i開始,
Oracle提供了2種log gap的檢測和處理機制。對於gap的處理,fal_*參數在某些情況下並不是必須配置的。
1.Automatic Gap Resolution
2.FAL Gap Resolution
1.Automatic Gap Resolution
從9i開始,Dataguard就引入了自動日誌缺失檢測的機制,無需設定任何fal_*參數,Datguard便運行在這種機制下。
當Lgwr和Arch進程發送redo/archive到standby端的時候,當前log sequence會同standby端RFS進程上次接收到的log sequence做比較,如果發現二者有斷檔,RFS會發送請求到primary端,要求主庫傳送缺失的日誌。從9iR2開始,Automatic gap resolution 功能上得到增強。主庫上的ARCH進程會每分鐘檢查備庫上的日誌gap情況並做相應處理。
2.FAL Gap Resolution
FAL是Fetch Archive Log的縮寫,通過配置FALserver和FALclient實現Gap檢測的一種機制。當備端的RFS進程收到
archivelog的時候,更新standby的控制檔案以記錄這些歸檔資訊,一旦MRP發現控制檔案被更新,會進行Recover/Apply log。如果MRP發現所需的日誌出現缺失或者所需的記錄檔不可用(損壞或者被物理移除等),會通過FAL來發送相應的處理請求。MRP是standby端的恢複進程,不像RFS進程一樣與parimary有直接關聯,通過FAL的參數配置來主動請求primary處理gap。
FAL_Server和fal_client是standby端的參數配置,考慮到switchover的平滑性,可考慮在primary 端也做預先設定。
FAL_SERVER: 指向primary端的Oracle Net service
FAL_CLIENTL: 指向standby端的Oracle Net service
在9iR2以上版本中,Oracle首先嘗試使用FAL Gap Resolution 進行GAP處理,當發現FAL機制並沒有配置生效的時候,
進而嘗試使用Automatic Gap Resolution進行處理。
對於一些cascade dataguard架構,FAL Gap Resolution是更好的gap處理方式。另外,Automatic gap resolution
在某些版本的dg環境下存在bug(比如bug 5929647等),需要不得不配置FAL參數。
----------------------end----------------------