2014-03-06 Created By BaoXinjian
一、摘要
檢查點將進程的當前讀寫位置存儲在磁盤中用於恢復目的。
檢查點不僅可以真實地標記 Extract進程捕獲的要進行同步的數據變化以及 Replicat進程應用到 target數據庫的數據變化,防止進程進行冗余的數據處理,還可以提供容錯機制,防止在系統、網絡或 Oracle GoldenGate進程需要重啟時發生數據丟失。
對於復雜的同步配置,檢查點可以確保多個 Extract或Replicat進程從同一組 trail文件中進行讀取操作。檢查點和進程間的回執機制共同防止了網絡間的信息丟失。
Oracle GoldenGate采用了一套專有的可靠信息傳遞技術。
檢查點修改
1. 語法
語法: BEGIN {NOW | yyyy-mm-dd[:hh:mi:[ss[.cccccc]]] | EOF | SEQNO <sequence number>}
2. 步驟
Step1. 獲取現有隊列文件的checkpoint信息並清理舊進程
Oracle GoldenGate重建抽取進程前,需要通過info xxx,showch的命令獲取當前的checkpoint信息,此步驟非常關鍵,務必執行准確。
在獲取抽取進程信息后,就可以進行刪除舊的抽取進程,開始重建工作。
Step2. 添加新的抽取進程
添加進程的語句與以往的創建方式是類似的,但threads需要相應減1,例子如下:
add ext ext_onl, tranlog, begin now, threads 2
Step3. 為新的抽取進程添加隊列文件
添加進程后,需要配置相應的隊列文件,與以往創建方式不同,這里需要加入原有隊列文件的current checkpoint信息
二、Extract進程檢查點
Extract進程創建檢查點來存儲其在數據源中的讀取位置以及trail文件中的寫入位置信息。
由於 Extract進程只捕獲已提交的事務,因此 Extract進程必須跟蹤所有 open(未提交)事務的操作,才能實時感知這些事務的提交狀態。
這就要求 Extract進程記錄一個檢查點來表示該進程當前在事務日志中的讀取位置以及最早開始的 open(未提交)事務的起始位置(可能在當前讀取的事務日志中,也可能在之前的事務日志中)。
為了控制 Extract進程發生中斷后必須重新處理的事務日志量,Extract進程會以特定的時間間隔將正在處理的事務(包括長時間運行的事務的狀態和數據)的當前狀態及數據寫入磁盤。
當 Extract進程在這些時間間隔中任意某個間隔點停止時,Extract進程可以直接從上一個時間間隔內的某個時間點或者上一個檢查點位置開始進行恢復,而不用從事務日志中最早開始的長時間運行事務的起始位置開始進行恢復。
三、Replicat進程檢查點
Replicat進程創建檢查點來存儲其在 trail文件中的讀取位置。
Replicat進程將其檢查點信息存儲在 target 數據庫中的檢查點表中來保護其處理的事務的提交信息以及在 trail文件中的讀取位置。
當數據庫進行恢復后,檢查點表可以保證數據的一致性,確保即使是在 Replicat進程或者數據庫進程發生故障后,一個事務也只會被應用一次。
為了實現報告目的,Replicat進程還會在OGG根目錄下的 dirchk子目錄下寫一個檢查點文件。對於 initial load之類的非持續性同步配置,不需要檢查點機制。
四、修改方式
1. 修改抽取進程的開始抽取點:(即:myext的讀檢查點)
alter extract myext BEGIN yyyy-mm-dd:hh:mi:ss
alter extract myext BEGIN now
2. 修改myext的寫檢查點:
alter extract myext, etrollover
3. 修改傳輸mydp進程的讀檢查點
alter extract mydp, extseqno 234, extrba 0
4. 修改傳輸mydp進程的寫檢查點
alter extract mydp etrollover
5. 修改myrep的讀檢查點
alter replicat myrep, extseqno 1234, extrba 0
五、案例 - 數據庫克隆后,修改Checkpoint以啟動OGG
待續
Thanks and Regards
部分參考: 冰釋鏡湖 - http://blog.csdn.net/xiangsir/article/details/8967577