首页 > 代码库 > 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修改主键后刷新失败解决方案