首页 > 代码库 > ODI修改主键后刷新失败解决方案
ODI修改主键后刷新失败解决方案
ODI增量刷新,修改主键值后,会导致刷新失败。解决办法:使用表中值固定不定的列作为增量刷新的依据列。
演示如下:
如上,源表和目标表有相同的记录。现修改源表主键信息
执行数据同步刷新后,目标表数据如下
发现,源表在update主键时,执行同步后,会向目标表新插入一条记录,原主键值记录仍保留在库中。
解决方案:从源表中找出一列(一组)固定不定的字段,目标表中以源表固定不变的字段建立主键,作为更新的依据。
如下:
源表ORDTASK2,主键为ORDNO,METHODCODE;在做数据集成时,我们认为ORIGREC是唯一的,并且加了唯一索引与NOT NULL为约束,值永远不会变化(也就对应到目标表的主键对应到ORDTASK2.ORIGREC)。
目标表ORDTASK3,主键为ORIGREC
为源表启用日志,并添加到CDC中,如下图,ORDTASK2前面加上了小时钟
这时需要修改ORDTASK2上面的触发器、及与日志信息相关的几个表、视图。
先修改日志表
取消原来定义的ORDNO、METHODCODE,修改为ORIGREC。接着,修改触发器
将ORIGREC写入日志表J$ORDTASK2,再修改jv$dordtask2、jv$ordtask2
以上修改操作后,数据同步操作已基本没问题,接下来创建映射ORDTASK2
测试数据同步
为ORDTSK2添加一条数据
如图,ORDTASK2日志表中已经捕捉到这一数据变化。执行数据同步
发现ORDTASK3目标表已经同步过来了。
修改非主键TESTNO为”TN00100”
执行同步
数据已经同步
更新主键值ORDNO修改为“A0010”
执行同步
ORDTASK3数据已刷新
修改主键+非主键
执行同步
删除数据测试
删除ORDTASK2中数据
执行同步
同步成功!
ODI修改主键后刷新失败解决方案