HANDLECOLLISIONS在官方文档上的说明:

使用HANDLECOLLISIONSNOHANDLECOLLISIONS参数来控制在目标上应用SQL时,Replicat是否尝试解决重复记录和缺少记录的错误。

事实是, HANDLECOLLISIONS 经常被烂用。为了省事,许多运维人员,经常在目标端投递出问题时,直接在目标端进程上配置 HANDLECOLLISIONS,然后进程就会启动并继续执行,但这样做只会掩盖问题,并且随着时间的迁移,问题越积越深,最终发现目标端的数据与源端相差很远。

所以 HANDLECOLLISIONS 根据官方的建议,一般只应该用在初始化阶段的replicat进程。如果在其它时候使用 HANDLECOLLISIONS,这是非常不明智的做法,因为极有可能会造成数据不一致。

如果有这种情况,应该立即停止投递进程并删除HANDLECOLLISIONS参数,然后对源和目标端的数据进行对比后重新同步。

要使用 HANDLECOLLISIONS,还需要在源端进程和表的附加日志上做些工作,包括:

1.HANDLECOLLISIONS 只在有PK或唯一索引的表上有效,如果是没有唯一键的表,则可能造成重复记录。

2.在抽取进程使用LOGALLSUPCOLS参数,并针对表打开全字段附加日志,如果没有这样设置,当 HANDLECOLLISIONS 将update操作转换为insert操作时,可能会报ORA-1403错误。

3.如果表上有LOB字段,且存的内容超过缓冲区域(2 kb或4 kb)的大小,则 HANDLECOLLISIONS 会排除此LOB字段的处理,所以,如果有表包含有lob字段,且长度超过2Kb,则不应该使用 HANDLECOLLISIONS。

所以, HANDLECOLLISIONS 最好是在初始化时使用,且初始化追平之后就应该停止使用。下面基于一个示例来讲解:

如果在下午1点启动抽取进程,2点的时候,在确保没有1点之前开始且到2点还没有结束的事务,此时,使用SourceIsTable进行初始化。在初始化的过程中,系统上一般会有数据变化。

下午3点的时候初始化完成,现在在目标端使用 HANDLECOLLISIONS 参数,启动投递进程。此时,投递进程会从队列文件(增量数据)最开始的地方(1点)开始应用数据到目标端DB,理论上1-2点之间变化的数据在OGG增量数据和初始化数据中都有包含。比如,有人在1:15开始一个事务,1:30才结束,在OGG的extract增量数据及initial load中都会包含这个交易的数据。此时,因为有使用 HANDLECOLLISIONS ,所以replicat会根据冲突处理机制,自动处理这些重复数据,确保目标端数据一致。

一旦目标端replicat进程处理到初始化结束的时间点,即3点,则应该立即使用 SEND REPLICAT NOHANDLECOLLISIONS 去掉自动冲突解决机制,并将 HANDLECOLLISIONS 参数从replicat进程中删除。

GoldenGate HANDLECOLLISIONS参数使用说明的更多相关文章

  1. goldengate的HANDLECOLLISIONS参数

    HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用. 在 replicat 进程中使用该参数时,即使目标数据库环境中存在数据完整性问题(如 ...

  2. Oracle GoldenGate中HANDLECOLLISIONS参数使用详解

    Oracle GoldenGate中HANDLECOLLISIONS参数使用详解   HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...

  3. Oracle GoldenGate常用参数

    OGG(Oracle GoldenGate)参数介绍 所有的GoldenGate进程均有参数文件 Manager Extract Replicat Utilities 所有参数均有缺省配置 实际应用只 ...

  4. Linux/Unix 常用参数使用说明

    参数使用说明 ~ 表示当前用户目录 绝对路径 .表示当前目录 绝对路径 | 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 举例 ps aux | grep & ...

  5. Oracle GoldenGate常用参数详解

    Oracle GoldenGate常用参数详解http://blog.itpub.net/28389881/viewspace-2564461/

  6. goldengate一些参数整理

    转自:http://blog.csdn.net/lemontree1123/article/details/46603549 manager参数: AUTOSTART:指定在mgr启动时自动启动那些进 ...

  7. phpmailer 参数使用说明

    $AltBody--属性 出自:PHPMailer::$AltBody 文件:class.phpmailer.php 说明:该属性的设置是在邮件正文不支持HTML的备用显示 AddAddress--方 ...

  8. udhcpc 参数使用说明

    当没有网络的时候,板子一直发送dhcp请求,导致程序不往下执行,解决的办法是把它切换到后台运行,可是如何切换到后台呢,有办法,它自带参数可以实现该功能.如下: udhcpc -b -i eth0 -p ...

  9. ffmpeg参数使用说明2

    附录一(ffmpeg参数说明): [参数] [说明] [示例] -i "路径" 指定需要转换的文件路径 -i "C:\nba.wmv" -y 覆盖输出文件,即如 ...

随机推荐

  1. mapState ,mapGetters ,mapMutations,mapActions

    参考 http://www.imooc.com/article/14741

  2. linux学习:sed与awk与tr用法整理

    流编辑器:sed 语法:sed [-hnV][-e<script>][-f<script文件>][文本文件] 参数: -e<script>或--expression ...

  3. YARN的基础配置

    基于HADOOP3.0+Centos7.0的yarn基础配置: 执行步骤:(1)配置集群yarn (2)启动.测试集群(3)在yarn上执行wordcount案例 一.配置yarn集群 1.配置yar ...

  4. 基于贝叶斯算法实现简单的分类(java)

    参考文章:https://blog.csdn.net/qq_32690999/article/details/78737393 项目代码目录结构 模拟训练的数据集 核心代码 Bayes.java pa ...

  5. Android多种样式的进度条

    原创 2016年04月26日 16:46:35 标签: android / clip / 进度条 / 8473 编辑 删除 ---- The mark of the immature man is t ...

  6. oo第四次总结

    1.论述测试与正确性论证的效果差异,比较其优缺点 测试:通过大量测试样例覆盖测试代码,来检测代码功能的实现是否正确是否完善.正确性论证:通过对代码规格和逻辑的严密分析,推论和证明,来验证代码实现的正确 ...

  7. 异想-天开 python---while、for、if-else 循环学习

    for循环: for i in range(10): # i循环10次 print('------',i) for j in range(10): print(j) if j > 2 : bre ...

  8. odoo定时发送邮件

    采购订单延迟或者存在部分到货的情况,定时发送邮件给相关人员 包含,采购订单明细,订单数量,已到货数量,未到货数量 <?xml version="1.0" encoding=& ...

  9. 线性表->顺序存储

    文字描述: 用一组地址连续的存储单元依次存储线性表的数据元素,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构. 即是,线性表的顺序存 ...

  10. 2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析 实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...