关键字
KingbaseFlySync,KFS,同步服务,DB2,CDC
问题描述
KFS解析DB2增量数据,源端启动时报错:

问题分析
DB2解析增量数据采用的是CDC方式进行捕获,配置CDC时会记录下当时对应表的表结构(此时会将表中对应的列在ASNCDC模式下记录)。
如果对应的表结构发生了变化,CDC进行增量数据捕获时,由于列不匹配,就会发生报错
解决方案
规范DDL变更流程,需要依照特定的流程进行DDL变更,防止因为表结构变化导致的KFS解析异常。具体规范如下:
1、确保需要变更的表上暂无业务数据,且相关业务数据已经完全同步到目标端(如果没有同步完成,执行后续的remove操作后,就可能会丢失相关数据)
2、停止KFS应用(replicator stop)
3、在DB2inst1用户下,连上相关数据库(使用setupCDC.conf文件中source_user配置的用户),然后执行如下命令:db2 "call ASNCDC.REMOVETABLE(‘模式名’,‘表名’);
4、在DB2数据库中变更相关DDL(变更后需要执行reorg TABLE 模式名.表名)
5、在{KFS解压目录}/flysync-replicator/extractors/db2-cdc下
A 、如果setupCDC.conf文件中source_user配置的用户有dba权限,则:
直接执行 setupCDC.sh
B、如果setupCDC.conf文件中source_user配置的用户是最小权限,则:
1):先查看捕获进程的状态
/home/db2inst1/sqllib/bin/asnccmd capture_schema=asncdc capture_server=DBName status
2)如果进程未启动,则启动进程,否则跳过此步骤
/home/db2inst1/sqllib/bin/asncap capture_schema=asncdc capture_server= DBName autoprune=n commit_interval=5 &
3)使用source_user用户连接数据库,然后执行:
db2 "call ASNCDC.ADDTABLE(‘模式名’,‘表名’);
4)reinit捕获进程
/home/db2inst1/sqllib/bin/asnccmd capture_schema=asncdc capture_server= DBName reinit
注意修改sqlib的路径,以及将DBName修改为真实的数据库
6、启动KFS应用(replicate start)




