GoldenGate HANDLECOLLISIONS参数使用说明
HANDLECOLLISIONS在官方文档上的说明:
使用HANDLECOLLISIONS和NOHANDLECOLLISIONS参数来控制在目标上应用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参数使用说明的更多相关文章
- goldengate的HANDLECOLLISIONS参数
HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用. 在 replicat 进程中使用该参数时,即使目标数据库环境中存在数据完整性问题(如 ...
- Oracle GoldenGate中HANDLECOLLISIONS参数使用详解
Oracle GoldenGate中HANDLECOLLISIONS参数使用详解 HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...
- Oracle GoldenGate常用参数
OGG(Oracle GoldenGate)参数介绍 所有的GoldenGate进程均有参数文件 Manager Extract Replicat Utilities 所有参数均有缺省配置 实际应用只 ...
- Linux/Unix 常用参数使用说明
参数使用说明 ~ 表示当前用户目录 绝对路径 .表示当前目录 绝对路径 | 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 举例 ps aux | grep & ...
- Oracle GoldenGate常用参数详解
Oracle GoldenGate常用参数详解http://blog.itpub.net/28389881/viewspace-2564461/
- goldengate一些参数整理
转自:http://blog.csdn.net/lemontree1123/article/details/46603549 manager参数: AUTOSTART:指定在mgr启动时自动启动那些进 ...
- phpmailer 参数使用说明
$AltBody--属性 出自:PHPMailer::$AltBody 文件:class.phpmailer.php 说明:该属性的设置是在邮件正文不支持HTML的备用显示 AddAddress--方 ...
- udhcpc 参数使用说明
当没有网络的时候,板子一直发送dhcp请求,导致程序不往下执行,解决的办法是把它切换到后台运行,可是如何切换到后台呢,有办法,它自带参数可以实现该功能.如下: udhcpc -b -i eth0 -p ...
- ffmpeg参数使用说明2
附录一(ffmpeg参数说明): [参数] [说明] [示例] -i "路径" 指定需要转换的文件路径 -i "C:\nba.wmv" -y 覆盖输出文件,即如 ...
随机推荐
- mysql.user表详解
GRANT语法: GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码' 权限: ALL,ALTER,CREATE,DROP,SELECT,U ...
- 如何安装 MySql 5.7.22
你首先得去官网去下载一个zip文件,https://dev.mysql.com/downloads/mysql/ 以我所选版本为例,选择MYSQL Community Server 然后在右边选择你所 ...
- Java注解--笔记
@Override标签的作用@Override是伪代码,所以是可写可不写的.它表示方法重写,写上会给我们带来好处. 1.可以当注释用,方便阅读. 2.告诉阅读你代码的人,这是方法的复写. 3.编译器可 ...
- ajax php 验证注册用户名是否存在
1.在"test"数据库中,建立一张名为"user"的表. sql语句: create table `user`( `id` ) not null auto_i ...
- Android studio 远程服务调用
https://blog.csdn.net/bond_zhe/article/details/50971021
- 了解 yarn 、npm、nodejs
一.前言 针对即将上线的 jeecg-boot 做一些准备. 二.了解系列 1.了解 nodejs Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrom ...
- 移动iptv安装三方软件
1.思路: 分为硬件和软件. a.硬件是ttl直接上串口,弄得比较复杂,且容易损坏盒子,先不考虑 b.软件:抓包获取iptv的请求数据,将移动光猫的iptv出口接到交换机上,电脑和盒子接入到同一个交 ...
- ubuntu安装zabbix 3.2(转)
转自:http://www.zabbix.org.cn/viewtopic.php?f=13&t=1096本人略做了写修改. 准备工作 apt-get update apt-get upgra ...
- Spark SQL 编程初级实践
一.实验目的 (1) 通过实验掌握 Spark SQL 的基本编程方法: (2) 熟悉 RDD 到 DataFrame 的转化方法: (3) 熟悉利用 Spark ...
- 多个页面引用公共的头部 header.html 和尾部 footer.html
方法:通过load()函数,引入公共头部和尾部文件; js代码预览: $(".headerPage").load("header.html"); $(" ...