本期话题是关于SQL-replication的。最近为了这个小小的问题,熬上了好几天夜,终于菜鸟我找到并解决了其中一个原因,还有一个不是原因的原因。
这个问题的症状是,在APPLY端,某一些表不能捕捉到CAPTURE端变化的数据,并且从APPLY端查看到的log来看,并没有出现什么错误信息。不过CAPTURE的log中出现了如下两条信息:
2010-10-18-10.59.30.616886
2010-10-18-10.59.30.616886
2010-10-18-10.59.35.628474
这个错误信息显示,应该是MAP_ID = "20 " 和MAP_ID = "21 " 所对应的两个source table有问题。所以开始第一步行动,查出这两个ID对应的源表:
select * from ASN.IBMSNAP_REGISTER where MAP_ID='20' or MAP_ID='21'
发现source table是两个视图ADUO.V_A和ADUO.V_B。用db2look -d
select * from ASN.IBMSNAP_REGISTER where SOURCE_TABLE='%A'
(或者,select * from ASN.IBMSNAP_REGISTER where SOURCE_TABLE='%B')。而在这次问题中,通过上述语句只查找到了V_A和V_B的记录,而没有A和B的记录。因此,需要在ASN.IBMSNAP_REGISTER 插入这些记录。
在插入基础表的时候,需要注意一个参数:SOURCE_VIEW_QUAL: This column is used to support multiple registrations for different source views with identical SOURCE_OWNER and SOURCE_TABLE column values. This value is set to 0 for physical tables that are defined as sources, and is greater than 0 for views that are defined as sources。也就是说,如果source table是表,那么这个参数就为0,如果是视图这个参数就为1. 现在我们是要插入一条关于表的注册信息,因此这个参数应该为0.
第一个问题,就算解决了。接下来是第二个问题,其实这个问题,是因为这个环境的布置很早,最终版本并没有订下来,于是造成的第二个原因。这就是,原本view ADUO.V_A和ADUO.V_B对应的cd table应该也是视图,却在创建是写成了create table ADUOCD.CDV_A...所以导致capture端的数据没法应用到apply一端。
这本是一个常识性问题,但是因为有些隐蔽,而让我这菜鸟熬了几个夜才发现和解决了,不过也算涨了一些经验值,所以跟大家分享分享吧~~~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21700373/viewspace-676504/ ,如需转载,请注明出处,否则将追究法律责任。