文章插圖

文章插圖
在主庫使用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的任務隨即完成 。