整体的流程图如下所示
详细步骤为:
1)必须源端数据库增量同步的表有时间字段,用来到时候按照天数进行增量迁移。先设置一个变量,变量里面分别是一个查询源端最大时间加一天,另外一个字段是表名字段。
时间字段SQL为:SELECT TO CHAR(TIMESTAMPADD (DAY,1,CAST(MAX(时间字段名) AS TIMESTAMP)1,'YYYYHHDD') FROM 模式名.表名;
2)将源端DB2数据库对应表的最大日期当天的数据罗列出来,并且输出到对应的表里面。
3)随后再从源端和目的端查询对应日期的数据量插入日志表里面。(以DM8为例)
4)再调用存储过程进行比较,然后存储到flag表里面即可。
1)迁移完成后,在目的端通过条件查询的时候遇到了使用条件where 列名 = ' ';和 where 列名 !=' ';不等于总数,随后查到其他资料,得知判断一个字段是否为 NULL,应该用 IS NULL 或 ISNOT NULL,而不能用‘=’。对 NULL 的判断只能定性,而不能定值。简单的说,由于 NULL存在着无数的可能,因此两个 NULL 既不是相等的关系,又不是不相等的关系,同样不能比较两个 NULL 的大小,这些操作都是没有意义的,得不到一个确切的答案的。因此,对 NULL 的=、!=、>、<、>=、<=等操作的结果都是未知的,也就算说,这些操作的结果仍然是NULL。随机用is null和is not null查询得出结果相加正好为表的条数。
2)2、当然在这次迁移中我们也发现了一个问题,并且已经解决,我们在没更换驱动之前,迁移数据会一直报错,随后我们查阅相关资料以及文件,通过将DMETL的DB2驱动跟换为跟源端DB2数据库相匹配的,并且在DMETL中的dmetl_svc.conf中加入
wrapper.java.additional.8=-Ddb2.jcc.charsetDecoderEncoder=3
迁移就没有再出现任何问题了。
添加的参数:
跟换的驱动文件,找到源端驱动包
将db2jcc4.jar拿到dmetl对应的drivers目录下面,并改名为db2jcc.jar即可。
添加参数和更换驱动后,就可以正常迁移了。
DMETL适用于周期性的从数据源中抽取变化数据加载到目的数据库中,拥有功能强大的作业调度与监控功能,能够支持不同的数据库之间的迁移以及调度。
文章
阅读量
获赞