ogg主库更新从库没有该记录的处理办法

本文围绕数据库复制进程展开,介绍了目的库复制进程参数。源库更新操作时复制进程报错,原因是目的库无对应记录。添加handlecollisions可启动进程但记录不同步,可通过加resolveconflict处理。若更新非主键,需在主库加补充日志,还给出resolveconflict常见用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的库复制进程参数如下:
replicat repep
userid goldengate, password goldengate
DiscardFile ./dirrpt/repep.dsc, append, Megabytes 200
gettruncates
allownoopupdates
assumetargetdefs
dboptions suppresstriggers
dboptions deferrefconst
MAP ora12cpdb1.hxl.tb_test,TARGET hxl.tb_test;
MAP ora12cpdb1.hxl.tb_test01,TARGET hxl.tb_test01;
MAP ora12cpdb1.hxl.tb_test02,TARGET hxl.tb_test02;
ddlerror 10655 ignore
ddlerror 10636 ignore

源库进行更新操作
update hxl.tb_test t
set t.name='hxlname1111'
where Id=11;

复制进程报出现absend,错误如下:
OCI Error ORA-01403: no data found, SQL <UPDATE /*+ RESTRICT_ALL_REF_CONS */ "HXL"."TB_TEST" x SET x."NAME" = :a3 WHERE x."ID" = :b0>
Aborting transaction on /u01/ogg/dirdat/ep beginning at seqno 0 rba 6340

原因是:目的库没有id=11的记录导致的;

在复制进程参数加上handlecollisions后,进程可以正常启动,但是id=11的记录不会同步过去,我们要想实现更新的时候发现不存在的记录做insert写入操作,
可以针对每个maping加上resolveconflict处理,如下配置
replicat repep
userid goldengate, password goldengate
DiscardFile ./dirrpt/repep.dsc, append, Megabytes 200
gettruncates
allownoopupdates
assumetargetdefs
dboptions suppresstriggers
dboptions deferrefconst
--handlecollisions
MAP ora12cpdb1.hxl.tb_test,TARGET hxl.tb_test
resolveconflict (updaterowmissing, (default, overwrite));
MAP ora12cpdb1.hxl.tb_test01,TARGET hxl.tb_test01;
MAP ora12cpdb1.hxl.tb_test02,TARGET hxl.tb_test02;
ddlerror 10655 ignore
ddlerror 10636 ignore

这个要是更新的不是主键的话,需要在主库为每个列加上补充日志,如下:
alter database add supplemental log data (all) columns或是
alter table hxl.tb_test add supplemental log data(all) columns;


备注resolveconflict的常见使用:
map hxl.tb_test, target hxl.tb_test,
comparecols (on update all, on delete all),
resolveconflict (updaterowexists, (default, usemin (last_time))),
resolveconflict (deleterowexists, (default, overwrite)),
resolveconflict (deleterowmissing, (default, discard));

转载于:https://www.cnblogs.com/hxlasky/p/10904435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值