oracle DG 原理及體系


DG基本原理是:
將日志文件從 原數據庫 傳輸到 目標數據庫,然后在目標數據庫上應用這些日志文件,從而使目標數據庫與源數據庫保持同步,是一種數據庫級別的高可用方案。
 
DG整個過程分成3部分:
日志發送(Redo Send)
日志接收(Redo Receive)
日志應用(Redo Apply)
 
兩種日志傳送方式:
主庫 primary database 在運行過程中,會不斷產生redo重做日志,這些日志需要發送到備庫 standby database,這個發送動作可以由
主庫的兩種日志傳輸方式  來完成:
ARCH進程
LGWR進程
 
ARCH進程,可以理解為  傳歸檔日志
LGWR進程,可以理解為  傳重做日志
 
主庫產生了日志以后,通過 LGWR進程 寫入在線重做日志
重做日志滿足一定的條件,會切換
如果開了歸檔,重做日志就會歸檔,通過ARC0歸檔進程(編號有累加)將該日志歸檔
另外一個歸檔進程 通過網絡 將歸檔日志傳輸到備庫
 
備庫上的【RFS】負責接收日志
接收以后,有兩種情況:--【接收以后的動作】參考這里
 
1.如果備庫配置了Standby RedoLogs,會將傳輸過來的日志復制到這里
然后將備用日志歸檔到本地的歸檔目錄里去,再應用歸檔
 
2.如果備庫沒有配置Standby RedoLogs,RFS接收到日志后
會直接放到本地的歸檔目錄,然后再應用日志 --奇怪,還是要放到歸檔目錄
 
應用日志也有兩種:
物理的叫MRP進程
邏輯的叫LSP進程
 
dg就是這兩個進程,ARCH和LGWR,搞清楚了就好了
一個是歸檔進程
一個是重做日志
 
 不同的日志應用方式的詳解:

DG ARCH進程 詳解:
主庫:
產生日志后通過LGWR進程寫入在線重做日志,當滿足相關條件后在線重做日志會進行切換,ARC0進程歸檔該日志至主庫本地的歸檔目錄,歸檔完成后,ARC1進程就會將歸檔日志傳輸到備庫

備庫:
RFS進程負責接收日志
1)如果備庫有Standby重做日志,則把日志復制到Standby重做日志,接着把Standby重做日志歸檔至備庫本地歸檔目錄,最后應用歸檔
2)如果沒有配置Standby重做日志,RFS進行接收日志后,直接把它放到備庫的歸檔目錄下,再應用該日志 

使用 ARCH 進程存在的問題:
主庫 只有在發生歸檔時 才會發送日志到備庫
如果主庫異常宕機,聯機日志中的redo內容就會丟失,因此使用ARCH進程  無法避免數據丟失  的問題,要想避免數據丟失,就必須使用LGWR,而使用LGWR又分為  同步和異步  兩種方式
12c增加了 fast sync模式

 

LGWR ASYNC   --異步過程詳解
主庫:
產生日志,只要有新的重做日志產生,LGWR進程就觸發LNSn進程把新生成的重做日志傳輸到備庫
ASYNC是 redo buffer 保存到 online redo log 后,LNSn才開始傳輸

備庫:
RFS進程負責接收日志,接收日志后將其寫入Standby重做日志,如果備庫開啟了實時應用,就立即做日志應用,如果沒有開啟,則等Standby重做日志 歸檔后 再應用

 

LGWR-SYNC    --同步過程詳解
主庫:產生日志,只要有新的重做日志產生,LGWR進程就將觸發 LNSn進程 把新生成的重做日志傳輸到備庫
SYNC是在 redo buffer 時,LNSn進程就開始傳輸
備庫:RFS進程負責接收日志,接收到日志后將其寫入Standby重做日志,如果備庫開啟了實時應用,就立即做日志應用,如果沒有開啟,則等Standby重做日志 歸檔后 再應用

同步的弊端:

同步的方式,傳輸到備庫后,需要等待回復,如果因為網絡問題一直等待回復,會卡死,把主庫掛死(所以感覺同步還是有很大的風險的), 會影響生產,數據是一致的,但是生產掛了。
 

DG三種數據保護模式:
最大保護:可以保證主庫、備庫同步,任何情況下主庫的損毀都不會導致已提交的數據丟失。如果主庫和備庫之間的網絡出現問題,或者備庫本身出現問題,都會導致主庫停止數據處理

最大可用:保證主庫和備庫的同步,與上面的區別是當網絡或備庫不可用時,主庫仍可以繼續。該保護模式下,零數據丟失

最大性能:缺省模式,主庫、備庫是異步的,這種模式可能在主庫出現損毀時,丟失一部分數據。但是這種模式對主庫的負荷最小,因此具有最好的性能。

 

主從切換:
switchover:無損的
failover:破壞性的操作

 

DG 歸檔裂縫 檢測和解決

當主庫的某些日志沒有成功發送到備庫,這時候發生了歸檔裂縫(archive gap),缺失的這些日志就是裂縫
dg能夠自動檢測,解決歸檔裂縫,不需要DBA介入
這需要配置 FAL_CLIENT,FAL_SERVER 這兩個參數

FAL_CLIENT 通過網絡向 FAL_SERVER 發送請求
FAL_SERVER 通過網絡向FAL_CLIENT 發送缺失的日志

除了自動解決,DBA也可以手工解決

 

12c Far Sync 兩地三中心:
12c后,在主備之間放一個遠程同步實例,可以放在距離主庫較近的異地,專門接收日志
通過 sync 的方式把 redo傳輸到 far sync 實例,然后通過 async的方式 傳輸到終端災備數據庫
在此過程中,如果 far sync 實例 出現問題,生產數據庫可以直接通過 async 方式把 redo 傳輸到 災備數據庫

 

既解決了性能問題,又解決了數據安全問題

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM