Data Guard Services
以下的三部分組成Data Guard的日誌數據傳輸、日誌數據應用以及改變數據庫角色:
a)、日誌傳輸服務(Redo Transport Services)
b)、日誌應用服務
c)、角色轉換
1、Redo Transport Services(日誌傳輸服務)
控制生產數據庫自動將redo data發送至一個或多個歸檔地址
1.1、使用ARCH進程
用ARCH模式傳輸不寫Standby Redo logs,直接保存成歸檔文件存放於Standby端。
說明:
邏輯Standby接收後將其轉換成SQL語句,在Standby數據庫上執行SQL語句實現同步,這種方式叫SQL Apply。
物理Standby接收完Primary數據庫生成的REDO數據後,以介質恢復的方式實現同步,這種方式也叫Redo Apply。
缺點:使用ARCH進程傳遞日誌有一個問題,即只有primary database歸檔以後纔會傳送日誌到 standby database。這就導致,如果primary database異常宕機,聯機日誌中的redo內容就會發生丟失,所以要避免這種數據丟失,我們則要使用LGWR,而使用LGWR又分爲SYNC(同步)和ASYNC(異步兩種方式)。Primary database 缺省使用ARCH進程。
使用ARCH進程傳遞最大問題在於:Primary Database 只有在發生歸檔時纔會發送日誌到Standby Database。如果Primary Database 異常宕機,聯機日誌中的Redo 內容就會丟失,因此使用ARCH 進程無法避免數據丟失的問題,要想避免數據丟失,就必須使用LGWR,而使用LGWR 又分SYNC(同步)和ASYNC(異步)兩種方式。
1.2使用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=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY NET_TIMEOUT=30' scope=both;
1.3使用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=db_phystdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY ' scope=both;
2、Log Apply Services (日誌應用服務)
在備庫上應用redo data來保持與主數據庫事務的一致。可以應用歸檔日誌文件,或real-time apply(實時應用)啓用,用 standby redo log files(備用重做日誌文件)
Standby Database 的RFS(Remote File Server)進程接收到日誌後,就把日誌寫到Standby Redo Log或者Archived Log文件中,具體寫入哪個文件,取決於Primary 的日誌傳送方式和Standby database的位置。如果寫到Standby Redo Log文件中,則當Primary Database發生日誌切換時,也會觸發Standby Database上的Standby Redo Log 的日誌切換,並把這個Standby Redo Log 歸檔。如果是寫到Archived Log,那麼這個動作本省也可以看作是個歸檔操作。
在日誌接收中,需要注意的是歸檔日誌會被放在什麼位置:
1)如果配置了STANDBY_ARCHIVE_DEST 參數,則使用該參數指定的目錄。
2)如果某個LOG_ARCHIVE_DEST_n 參數明確定義了VALID_FOR=(STANDBY_LOGFILE,*)選項,則使用這個參數指定的目錄。
3)如果數據庫的COMPATIBLE參數大於等於10.0,則選取任意一個LOG_ARCHIVE_DEST_n的值。
4)如果STANDBY_ARCHIVE_DEST 和LOG_ARCHIVE_DEST_n 參數都沒有配置,使用缺省的STANDBY_ARCHIVE_DEST參數值,這個缺省值是$ORACLE_HOME/dbs/arc.
3、Role Transitions(角色轉換)
改變數據庫角色,從一個備份庫到主庫,或從一個主庫到備庫,使用switchover 或 failover操作。
Oracle數據庫運行在primary 或standby兩個角色中的一個。應用Data Guard,你可以使用switchover 或failover操作來改變一個數據庫的角色。
Switchover 是一個primary database 和其一個standby database之間的人物。Switchover 確保無數據丟失。通常這樣做的目的是爲了維護主系統。在切換期間,primary database 轉換爲了standby 角色,standby 數據庫則轉變爲primary角色。這種轉換,而無需重新創建數據庫。
Failover 是當住數據庫不可以用。Failover只在primary database發生災難性故障事故,failover可以將standby數據庫過渡爲一個primary角色。數據庫管理員可以配置Data Guard來確保無數據丟失。