日期:2014-05-16  浏览次数:20377 次

Oracle GoldenGate 中 HANDLECOLLISIONS 参数使用详解
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