DB2远程Q复制实践
出错分析及解决
问题1描述:
SQL30081N 检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信API: "SOCKETS"。检测到错误的位置:"9.181.139.155"。检测到错误的通信函数:"connect"。协议特定的错误代码:"10060"、"*"、"*"。 SQLSTATE=08001
分析:
这个错误的原因通常是网络连接不稳定造成的。
解决:
检查并确保源数据库所在的主机和目标数据库所在的主机之间的网络连接可用,并且端口正确。在很多情况下,网络病毒导致网络不可用是需要首先检查的方面。
问题2描述:
SQL0332N 没有从源代码页 "1252" 至目标代码页 "1386" 的转换。原因码为 "1"。
SQLSTATE=57017
分析:
这个问题主要是由于本地数据库和远程数据库的代码页(codepage)不一致造成的。比如本地数据库是代码页为1386的中文版本,而远程数据库是代码页为1252的英文版本,这样可能会产生一些意外的错误。
解决:
通过如下命令来检查代码页的相关设置:(红色字体可以由用户指定)
db2 get db cfg for clientdb (检查clientdb所使用的代码页)
db2 get db cfg for serverdb (检查serverdb所使用的代码页)
db2set (检查当前数据库系统所使用的代码页)
通过如下命令来改变本地DB2数据库系统的代码页:
db2set db2codepage=serverdb codepage (e.g. "1252")
db2 terminate
可以通过如下简单的命令来核对上述修改是否成功:
db2 connect to source user administrator using passw0rd // source是远程数据库服务器
如果source数据库和target数据库可兼容,那么该命令可以成功返回。
第二部分 配置MQ对象
操作步骤
1. 本文附件提供了一些脚本来创建相关的MQ对象,用户可以通过修改或者直接使用它们来创建出必要的MQ对象。EAST_QUEUE_DEFINE.TXT文件是用来创建QM_EAST相关的消息对象,WEST_QUEUE_DEFINE.TXT文件是用来创建QM_WEST相关的消息对象。上述两个脚本,里面都定义了queues、channels,以及queue managers等对象。请注意,上述文件定义的对象,实际上是用来做bidirectional的Q复制,对于本文的单向复制而言,只需要用到其中的一部分即可。
2. 在Server A上,定义名叫QM_EAST 的MQ manager。
如果QM_EAST已经存在,按照如下步骤删除旧的QM_EAST:
(1) endmqm QM_EAST
(2) endmqlsr (停止queue manager 的listener,也可以通过MQ services的start/stop 完成。)
(3) dltmqm QM_EAST
然后通过下面的步骤来创建之:
(1) crtmqm -q QM_EAST
(2) strmqm
(3) runmqlsr -t tcp -p 1451
(4) runmqsc QM_EAST<EAST_QUEUE_DEFINE.TXT (需要再开一个cmd运行之)
EAST_QUEUE_DEFINE.TXT在附件中可以找到。
3. 在Server B上,定义名叫QM_WEST的MQ manager。步骤和2类似。
如果QM_WEST已经存在,按照如下步骤先删除之:
(1) endmqm QM_WEST
(2) endmqlsr
(3) dltmqm QM_WEST
然后再创建之:
(1) crtmqm -q QM_WEST
(2) strmqm
(3) 在MQ Services的控制面板中,选择QM_WEST,右键单击,然后选择new->new listener, 然后添加一个listener(TCP,端口1451),并确保该listener运行正常。
(4) runmqsc QM_WEST<WEST_QUEUE_DEFINE.TXT
EAST_QUEUE_DEFINE.TXT在附件中可以找到。
注意:QM_EAST和QM_WEST 的listener端口可以任意指定可用的端口,它们可以相同,也可以不相同。这里,我们将QM_EAST和QM_WEST 的端口分别指定为1450和1451,以示区别。
上面讲述了创建相关MQ对象的步骤,下文将对如何测试MQ对象(如MQ channels和queues等)是否正常工作进行详细讲解。
测试WSMQ对象的连接性
在定义好WSMQ对象之后,用户可以先对其连通性进行测试,以确保后面的步骤可以正确进行。主要可以从如下方面进行测试:
1. 通过MQ Explorer来检查channels连接的有效性.
(1) 在QM_EAST所在的主机上,打开MQ Explorer,启动QM_EAST,那么在"channels"->"advanced"里面,将可以看见EAST_TO_WEST和WEST_TO_EAST两个channel。
(2) 用户可以右键点击EAST_TO_WEST并选择start启动之,然后可以选择Status选项来查看其是否正常运行。
(3) 如果status是"running",表明channel运作正常。
(4) 如果status是"binding",表明channel正在绑定监听端口,稍后将有可能开始处于正常运作状态。这种情况下,稍等片刻并再次检查其状态,如果仍然是处于"binding"的状态,那么停止并重新启动。
(5) 如果status是"retrying",表明当前channel不能正常运作,这个通常是由于网络原因造成的。检查网络状况,例如通过ping程序来检查网络是否有问题,防火墙有时也可能导致MQ channel的retrying状态;检查远端的queue manager (这里是指QM_WEST)是否已经启动,其listener是否运作正常,并且检查CCSID是否一致。如果远端的QM_WEST没有启动,那么status很有可能就是retrying的状态。所以应该检查QM_WEST,保证其处于正常状态,然后在QM_EAST中停止EAST_TO_WEST 这个channel并重新启动之。这些步骤之后,应该能解决上述问题。
对于WEST_TO_EAST这个channel,在QM_EAST,用户可以检查其状态但是不能启动或者停止它,它只能被发送方启动或者停止。用户应该在QM_WEST端启动或者停止它。