文主要讨论,采用时间戳的方法进行增量数据同步时,造成源表和目标表数据不一致的情况的原因进行讨论。在浏览此文时,请大家先浏览数据同步之采用时间戳的方法进行增量数据同步(一)、数据同步之采用时间戳的方法进行增量数据同步(二)这两篇文章。在探讨这个问题时,本文还是继续引用前面的文章的例子。
一、数据同步情况说明
将源数据库S中的A表(将此表称为源表),通过ETL工具同步至目标数据库T的A表(将此表称为目标表)。假设源表A的表结构与目标表A的表结构完全一致。表结构如下图所示:
采用时间戳的方式进行增量数据同步,需要目标数据库T中建立一张数据同步日志表LOG,来记录每次数据同步的情况。
表结构如下图所示:
其中,KSSJ、JSSJ字段为保存的值为源表A中每次数据同步时,根据ZHXGSJ字段进行数据过滤的字段值。
二、数据同步存在的问题
1、数据遗漏,即数据量不一致。即源表和目标表的数据量不一致。
2、数据记录内容不一致。即源表和目标表的数据量一致。但是存在部分数据,它们分别对应的源表和目标表的数据记录,内容不一致。
三、数据同步问题的原因分析。
1、源系统(即源表对应系统)开发人员的原因。
这种原因经常使得数据同步时,造成数据记录内容不一致。它是源系统的开发人员在修改源表的某记录的时候,并未同步更新对应记录的时间戳字段造成的。
在本例中,源系统的开发人员,在对源表A中插入一条记录时,使用的SQL为:
insert into A(ID,MC,ZHXGSJ) values ('111111','测试',to_date('2019-01-01 12:05:00','yyyy-mm-dd hh24:mi:ss'