DG的ASYNC與SYNC深層原理解析

eddy0lion發表於2018-01-18

使用LGWR 程式的SYNC 方式

1)Primary Database 產生的Redo 日誌要同時寫到日誌檔案和網路。也就是說LGWR程式把日誌寫到本地日誌檔案的同時還要傳送給本地的LNSn程式(Network Server Process),再由LNSn(LGWR Network Server process)程式把日誌透過網路傳送給遠端的目的地,每個遠端目的地對應一個LNS程式,多個LNS程式能夠並行工作。

2)LGWR 必須等待寫入本地日誌檔案操作和透過LNSn程式的網路傳送都成功,Primary Database 上的事務才能提交,這也是SYNC的含義所在。

3)Standby Database的RFS程式把接收到的日誌寫入到Standby Redo Log日誌中。

4)Primary Database的日誌切換也會觸發Standby Database 上的日誌切換,即Standby Database 對Standby Redo Log的歸檔,然後觸發Standby Database 的MRP或者LSP 程式恢復歸檔日誌。


因為Primary Database 的Redo 是實時傳遞的,於是Standby Database 端可以使用兩種恢復方法: 

實時恢復(Real-Time Apply): 只要RFS把日誌寫入Standby Redo Log 就會立即進行恢復;

歸檔恢復: 在完成對Standby Redo Log 歸檔才觸發恢復。


  Primary Database預設使用ARCH程式,如果使用LGWR程式必須明確指定。使用LGWR SYNC方式時,可以同時使用NET_TIMEOUT引數,這個引數單位是秒,代表如果多長時間內網路傳送沒有響應,LGWR 程式會丟擲錯誤。 示例如下:

alter system set log_archive_dest_2 = 'SERVICE=ST  LGWR  SYNC  NET_TIMEOUT=30' scope=both;


使用LGWR程式的ASYNC 方式

使用LGWR SYNC方法的可能問題在於,如果日誌傳送給Standby Database過程失敗,LGWR程式就會報錯。也就是說Primary Database的LGWR 程式依賴於網路狀況,有時這種要求可能過於苛刻,這時就可以使用LGWR ASYNC方式。 它的工作機制如下:

1) Primary Database 一端產生Redo 日誌後,LGWR 把日誌同時提交給日誌檔案和本地LNS 程式,但是LGWR程式只需成功寫入日誌檔案就可以,不必等待LNSn程式的網路傳送成功。

2) LNSn程式非同步地把日誌內容傳送到Standby Database。多個LNSn程式可以併發傳送。

3) Primary Database的Online Redo Log 寫滿後發生Log Switch,觸發歸檔操作,也觸發Standby Database對Standby Database對Standby Redo Log 的歸檔;然後觸發MRP或者LSP 程式恢復歸檔日誌。


因為LGWR程式不會等待LNSn程式的響應結果,所以配置LGWR ASYNC方式時不需要NET_TIMEOUT引數。示例如下:

alter system set log_archive_dest_2 = 'SERVICE=ST  LGWR  ASYNC ' scope=both;

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

相關文章