【背景】
经常遇到朋友使用goldengate进行同步数据时,目标端goldengate提示经典的1403错误造成进程abend(也可能有点朋友配置handlecollisions跳过错误或者配置ignore之类,这些是不可取的),部分原因是数据库有正在运行事务时采用expdp初始化数据造成的,例如有些事务被跳过,导致后续遇到更新、删除提示经典错误--1403(找不到数据)
【expdp、extract、aftercsn以及transaction关系】
1、那些事务不能同步
除了T2无法同步,其他事务都可以到目标端,如果这个事务操作表被同步,这时会造成2边数据不一致,造成经典1403错误.
2、为什么T2无法同步
a:因为extract只能捕获在extract启动时间之后事务,所以E={T0,T1,T2,T4}都无法被extract捕获.T3,T5,T6在extract之后启动,所有可以被正常捕获.但是expdp可以导出T0,T1,T4,T5其中EXP={T2,T3,T6}无法导出.
其中E和EP交集是T2=E∩EP={T2}就是无法被同步事务.
总结:只要能够被extract或expdp一方识别就同步目标端,也就是不会出现事务丢失.
【如何完美解决丢失的事务】
--上面也提到能够被extract或expdp一方识别就同步目标端,也就是不会出现事务丢失.
a:如果v$transaction中start_time比较解决最近时间,例如是当天时间点,由于你归档保留时间或者归档大小.
例如start_time是2018-09-21 13:00:00
add extract exttest BEGIN 2018-09-21 12:50:00
b:如果事务是很久之前,可以考虑kill或者等待结束之后来添加抽取进程.