复制架构:
source:oracle 11g rac
target:teradata(数仓)
从event log里报错信息可以看出,s和t端的数据不一致,到底是因为什么不一致,需要查一下信息,可通过t端的/vardir/log下的相关queue的*errlog.sql及数据库端来核实具体原因。
splex evet log里的报错信息如下:
Error 2016-04-28 13:13:03.633404 42512 1259554560 Table “TRSEN_DATA”.”PAY_TEST” out of sync for queue p1 at source rowid AAAcDnADTAAAOFvAAD: — out of sync (posting from jxcard, queue p1, to NBAT_TIM0)
Error 2016-04-28 13:13:03.045695 42512 1259554560 Table “TRSEN_DATA”.”PAY_TEST” out of sync for queue p1 at source rowid AAAcDnADTAAAOEbAAL: — out of sync (posting from jxcard, queue p1, to NBAT_TIM0)
产生原因:
因为t端丢失了s端部分数据,丢失数据原因是因为利用qview工具做事务的跳过动作导致。
解决方案:
因为是做异构环境的同步,无法利用repair和copy动作去处理,只能利用新queu来初始化不同步的数据,具体操作如下:
1、找出s端和t端不同步的数据,具体表具体对待
2、sourc:创建表结构,没有数据
3、target:将表中此时间段的数据进行delete
4、target:stop post(原队列)
5、source:edit config文件配置另一个队列中,激活config文件
6、source:insert对应时段的数据
7、target:等新insert的数据结束后,start post(原队列)
8、source:激活原来的config文件(activate config xxx nolock;)
针对上述的操作注意事项:
6操作步骤中,注意通过splex的post queue来核实insert的数据有没有全部同步到t端,不要随意去select target端的目标表
7操作步骤中,必须等待数据同步过来再操作
8操作步骤中,必须等待7步骤中start post queue里的backlog数据全部无积压,才能做activate动作,否则会导致原queue因错误无法启动(一句话很麻烦)
Config 文件配置信息:
sp_ctrl (splxvip:2100)> view config teradb3
datasource:o.jxcard
TRSEN.PAY_TEST TRSEN_DATA.PAY_TEST SPLXSCAN:p1@r.NBAT_TIM0
THIG_OWNER.TB_CUST TRSEN_DATA.TB_CUST SPLXSCAN:p10@r.NBAT_TIM0
splex.PAY_TEST TRSEN_DATA.PAY_TEST SPLXSCAN:p10@r.NBAT_TIM0
注意我们是在splex用户进行问题表的部分数据同步,且队列不再原队列上