程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracledataguard傳輸方式(基本原理)

oracledataguard傳輸方式(基本原理)

編輯:Oracle教程

今天是2014-04-14,很久沒有寫東西,今天拿出 時間來隨筆寫點東西,如下是整理自2013年8月,學習筆記!。後續將完成DG的相關內容簡述整理工作。

那麼對於oracle dataguard(簡稱DG)有兩種傳輸模式:async(異步)和sync(同步),在介紹這兩種傳輸模式前,說一下dg的重做傳輸進程架構。

\

在主庫使用LNS進程從sga中的重做緩沖區中獲得相應redo數據,然後通過網絡服務傳送到備庫,那麼在備庫通過RFS進程接收redo數據存在standby log file中,然後在應用(sql apply或是redo apply)數據。

何為同步傳輸模式呢?

顧名思義同步含有實時確認的意思。見如下圖:

\

當用戶在主庫提交數據的時候,會在sga的redo緩沖區中首先記錄redo信息,在提及操作的時候lgwr會將redo數據寫入redo數據文件中,那麼這個時候lns進程會實時的將redo數據從主庫的redo緩沖區傳送到備庫,在備庫使用rfs接受數據,傳入standby logfile中,進而應用redo數據(sql apply)。在應用完成後rfs將信息返回主庫進程,告知該redo條目已經在備庫應用完畢,lgwr收到lns的確認消息,從而提示提交成功。

在最高可用性中,如果主庫收不到備庫應用的確認消息,那麼會通過net_timeout值超時,繼續完成本次操作,那麼lns進程將不會在獲得sga中的重做數據,只有當下次日志switch的時候才主動去嘗試獲得lns數據,如果期間還是沒有和備庫完成通信,當超過net_timeout參數的時候會繼續停止,主機事務也繼續完成,但當存在於最大保護模式下,那麼必須等到備庫應用redo的確認消息,那麼就會停止數據庫的運行操作。

何為異步傳輸模式呢?

異步傳輸模式就是指主庫不必要等待備庫應用redo的確認消息,就會完成提交工作(見下圖),但是增加了數據丟失的風險性。

\

另外如果主庫和 備庫因魔種原因,導致lns進程無法傳送數據到備庫又會發生什麼呢?

這種情況下叫傳輸滯後。

\

當數據庫運行最高可用性下,當主庫無法與備庫進行通信,那麼主庫依然可以完成事務的提交,lgwr依然可以寫入online redo日志,在沒法通信期間主庫可能會產生很多歸檔日志,那麼oracle為了在備庫和主庫能夠再次通信應用redo日志的情況,會進行自動處理間隔操作。具體就是主庫arch進程會不停ping備庫,當和備庫通信連接後,那麼arch進程通過備庫的rfs進程獲得備庫控制文件中最後應用的歸檔日志信息,將丟失的歸檔日志通過arch進程傳送與備庫進行應用。當在主庫進行redo 日志切換的時候,lns進程會再次和備庫的rfs進程通信繼續完成redo條目的傳送,arch傳送的歸檔日志在後台進行應用。當備庫和主庫redo條目同步後arch的任務隨即完成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved