Dataguard中日誌傳輸服務

2021-09-07 22:14:04 字數 1948 閱讀 7249

之前,原本已經嘗試過配置oracle例項的邏輯和物理standby結構,並且做個一些role交換操作,可是由於昨天學習rman的部分命令時沒留意,誤刪掉了primary db上的所有歸檔日誌,因為原來是在maximum protection模式下,standby db上還存在archivel gap,結果之前搭建的standby實驗環境徹底掛了,primary db也自動停了。我只好把primary db在nomount模式下改為maximum performance模式,並將控制standby redo log傳輸的log_archive_dest_state_n設定為defer,才把primary db啟動起來。現在,除了重建standby,還沒找到其他的彌補方法,看來對data guard的理解還是停留在照貓畫虎的操作上,根本公尺有理解它的原理啊。所以重新來過,從基礎開始好了。

首先,data guard的主要原理主要是primary db將所有操作產生的redo log 傳輸到standby db上,在由standby db對此進行應用的。從而產生乙個一致的standby db。在data guard中,存在兩類sync和async,下面分別描述兩類的工作方法,從而進一步認識它的原理。

下圖是sync模式的流程圖。         1、當user 發出 commit命令後,將產生一條 redo record (也稱作redo entry)放入sga中的 redo buffer 中,後台程序lgwr將讀取此redo record,將其寫入online redo log file。並等待從lns程序傳來的確認資訊。         2、lns(log network server) 程序同樣從redo log buffer讀取redo record,並將其通過oracle net services傳輸給standby db。在standby db上的rfs後台程序將接收到的redo record寫入standby database中。         3、當rfs確定寫入所有的redo record到磁碟後,向primary db的lns傳送確認資訊。當lgwr收到lns**的確認資訊後,才返回commit成功的訊息給user。

接下來來看async:類似於sync,只是primary db上的lgwr可以不必等待lns的確認資訊,而且lns可以讀取online redo log中的redo record。對於async,就可以考慮使用壓縮方式傳輸redo record,從而節省頻寬,但是這會使cpu的利用公升高。此外,如果lns在讀取online redo log中記錄時剛好遇到online switch,則可能造成standby的archivelog gap。lns的不同步記錄,在提高效能的同時也可能會產生資料的丟失。

對於redo log的gap的處理,oracle的data guard有自己的自動處理方法。log file gap主要出現在primary db上不斷有事務被提交,同時,lns可能由於網路或是standby db的問題,不能及時同步造成的。此時,primary db會繼續執行,迴圈使用redo logs,並進行歸檔。data guard會在primary db上使用乙個arch程序不斷的ping standby db。當與standby db可以進行通訊時,arch的ping程序會通過rfs查詢standby的控制檔案,獲得上一次完成log同步的scn從而確定從哪乙個歸檔log開始進行同步,從而填補gap。當完成這一步,會自動過度到從當前的日誌檔案中同步。具體的流程圖如下:

對於物理standby來說,它應用接受到的redo record是按下圖的方式的:

Data Guard 日誌傳輸模式

1.概述 data guard 支援兩種使用 lns log network server 程序的重做傳輸方法 同步 sync 和非同步 async 傳輸程序架構 2.同步傳輸 同步傳輸 synchronous transport sync 又稱 零資料損失 方法,因為要等到 lns確認事務恢復所需...

dataguard傳輸日誌方式

日誌傳送 redo send 日誌接收 redo receive primary database產生的redo日誌需要傳送到standby database。傳送動作由primary database的lgwr或者arch程序完成。不同的歸檔目的地可以使用不同的程序 但同一目的地只能選用一種程序。...

Dataguard之redo傳輸服務

整個data guard體系就是圍繞三個關鍵點展開 日誌傳送 redo send 日誌接收 redo receive primary database產生的redo日誌需要傳送到standby database。傳送動作由primary database的lgwr或者arch程序完成。不同的歸檔目的...