HANDLECOLLISIONS 是一個 replicat 進程參數,主要在 initial load 中使用。在 replicat 進程中使用該參數時,即使目標資料庫
環境中存在資料完整性問題(如 update、delete 操作遇到缺失行或重複的插入操作),replicat 進程仍然能夠繼續處理 trail 中的
資料。
如果使用了 HANDLECOLLISIONS 參數,則 replicat 進程將按如下方式處理資料:
Missing updates are ignored.
Missing deletes are ignored.
Duplicate inserts are turned into updates.
如果要使用 HANDLECOLLISIONS 參數,只需在 replicat 進程參數檔案中加入該參數,然後重啟 replicat 進程
即可生效。
既可以對特定的表使用 HANDLECOLLISIONS 參數,也可全域地使用該參數。
使用 send 命令,我們還可以在無需停止 replicat 進程的情況下動態地啟用 HANDLECOLLISIONS 參數,命令如下:
GGSCI> SEND REPLICAT <NAME>, HANDLECOLLISIONS [<owner.table_name>]
執行如下 send 命令可以查看 HANDLECOLLISIONS 參數是否啟用:
SEND REPLICAT <NAME>, REPORT HANDLECOLLISIONS [<owner.table_name>]
Example 1 The following enables HANDLECOLLISIONS for all MAP statements in the parameter file.
HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;
Example 2 The following enables HANDLECOLLISIONS for some MAP statements while disabling it for
others.
HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
NOHANDLECOLLISIONS
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;
Example 3 The following shows a combination of global and MAP-level use. The MAP specification
overrides the global specification for the specified tables.
HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep, NOHANDLECOLLISIONS;
MAP hr.country, TARGET hr.country, NOHANDLECOLLISIONS;
Oracle 不推薦一直啟用 HANDLECOLLISIONS 參數,因為這很可能會導致目標資料庫的資料不一致。即使遇到資料缺失或重複的情況,
replicat 進程都會繼續處理 trail 中的資料。HANDLECOLLISIONS 主要是在進行 initial load 後,來源資料庫端的應用仍然在運行
而GoldenGate仍在捕獲該應用的資料變更的情況下啟動 replicat 時使用。當我們出於特定的目的處理一些棘手的問題時,我們需要
回退 trail 檔案時,也會用到 HANDLECOLLISIONS 參數。
在 GoldenGate 8.0.2.1 及以上版本中,當 replicat 進程停止後,我們可以再 replicat statistics 或 report file 中看到重複
insert 操作的衝突數。
HANDLECOLLISIONS 和 KEYCOLS 結合使用
如果對沒有主鍵或唯一索引的表進行 DML 操作,即使該表指定了 KEYCOLS,GoldenGate 對這類 DML的處理方式也和對具有主鍵或唯
一索引的表的處理方式不同,因為 KEYCOLS 並不能直接取代主鍵,當插入具有相同 KEYCOLS 值的記錄時,GoldenGate 對這些記錄
的處理並不會產生衝突,HANDLECOLLISIONS 規則並不會對這些記錄生效。
HANDLECOLLISIONS 和 PKUPDATES 結合使用
如果缺失的更新是一個主鍵更新,則 replicat 將嘗試插入該記錄而不是忽略該操作。但是當 replicat 嘗試插入時,要插入的記錄
在 trail 檔案中並不是一個完整的映像,要獲得該主鍵更新的完整映像,需要在 extract 進程加入如下參數,並重啟 extract 進程
使之生效:
FETCHOPTIONS FETCHPKUPDATECOLS
轉載請註明作者出處及原文連結:
http://blog.csdn.net/xiangsir/article/details/8714965