DB2_DB2 60000/tcp
DB2_DB2_1 60001/tcp
DB2_DB2_2 60002/tcp
DB2_DB2_END 60003/tcp // These ports reserved for
DB2 Fast Communications Manager
db2c_DB2 50000/tcp // this is the connection port for instance DB2
Codepage:
因为笔者在操作的过程中,曾经试验过一个是中文操作系统,另外一个是英文操作系统的情况。在上述情况下,会发生所谓的codepage不兼容的问题(这个问题在下面的"出错分析及解决"有进一步说明)。Codepage就是指DB2的语言的版本。一般来说,如果操作系统是中文的话,那么DB2自动安装成为中文版本,如果操作系统是英文的话,那么DB2自动安装成为英文版本。尽管如果源数据库和目标数据库的codepage不一样,用户仍然可以成功地从源数据库连接到目标数据库(即connect命令仍然可以成功运行),但是如果没有定义恰当的转换表(用来转换两个不同数据库之间的codepage的表),在复制的时候错误将不可避免。为了简单起见,在本操作实践过程中,两个数据库都是使用的同样的codepage。需要提及的是,codepage可以在创建该数据库的时候为其指定。
关于codepage和数据库链接方面的进一步信息,请参考如下网址:
http://www.ibm.com/developerworks/cn/db2/library/techarticles/dm-0506chong/
http://iyunv.com/jh/22/16779.html 出错分析及解决
问题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 (检查当前数据库系统所使用的代码页)
/usr/mqm/samp/bin/amqsput EAST_RESTARTQ QM_EAST
Sample AMQSPUT0 start
target queue is EAST_RESTARTQ
This is a test message to a local queue
Sample AMQSPUT0 end
然后通过执行下面的命令来从queue中获取信息。这个时候应该会显示出上面输入的消息文本。
/usr/mqm/samp/bin/amqsget EAST_RESTARTQ QM_EAST
Sample AMQSGET0 start
message <This is a test message to a local queue>
no more messages
Sample AMQSGET0 end
在WEST端,执行如下命令来将一个消息放到队列里面:
/usr/mqm/samp/bin/amqsput WEST_RESTARTQ QM_WEST
Sample AMQSPUT0 start
target queue is WEST_RESTARTQ
This is a test message to a local queue
Sample AMQSPUT0 end
同样的,执行如下命令来从queue中获取信息。这个时候应该也会显示出上面输入的相关消息文本。
/usr/mqm/samp/bin/amqsget WEST_RESTARTQ QM_WEST
Sample AMQSGET0 start
message <This is a test message to a local queue>
no more messages
Sample AMQSGET0 end
/usr/mqm/samp/bin/amqsput WEST_ADMINQ QM_EAST
Sample AMQSPUT0 start
target queue is WEST_ADMINTQ
This is a test message to a remote queue
Sample AMQSPUT0 end
在WEST中执行如下命令获取来自WEST_ADMINQ 队列上的消息。
/usr/mqm/samp/bin/amqsget WEST_ADMINQ QM_WEST
Sample AMQSGET0 start
message <This is a test message to a remote queue>
no more messages
Sample AMQSGET0 end
在MQ消息手册中查找关于AMQ6047的相关信息,如下: AMQ6047 Conversion not supported.
Explanation: WebSphere MQ is unable to convert string data tagged in CCSID &1 to data in CCSID &2.
User Response: Check the WebSphere MQ Application Programming Reference Appendix and the appropriate National Language Support publications to see if the CCSIDs are supported by your system.
这个错误的原因是由于两个queue manager的CCSID 的设置不兼容造成的。而这种不兼容的最根本原因是由于本地的locale和远程主机的locale不一致造成的(从而WebSphere MQ的安装语言版本不一样)。这点和DB2的code page问题很类似。
解决:
(1) 在MQ explorer中找到CCSID及相关属性。在笔者的环境中,如果安装的是中文版的MQ,那么CCSID的缺省值是1381,而英文版的则相应为437。在这两者之间,它们并没有直接的转换方式来进行兼容性处理。
(2) 由于(1),我们必须在本地对CCSID进行转换。在EAST(CCSID=1381)端通过如下命令来实现其转换:
strmqm
runmqsc
display qmgr // 检查当前queue manager的CCSID值
alter qmgr ccsid(437)
end
第三部分 通过Replication Center图形界面建立远程Q复制
操作步骤
这部分主要通过GUI图形界面(即Replication Center)来完成。同时,为了方便起见,其中也会用到CLP命令行方式。对于本文的单向复制而言,这里主要通过配置EAST端来说明相关使用方法。
在开始配置Capture和Apply之前,首先应该对密码和连接性进行测试。在Replication Center中,选择Manage Password and Connectivity,然后选择Systems,在其中添加两行信息,即本地EAST和远程WEST的相关密码和连接信息。
对于远程Q replication图形界面方面的基本操作,大体和完全在一个机器上的Q replication类似,主要的区别在于对MQ相关对象的操作上有所不同。所以下面的操作部分重点在于MQ的详细介绍。
1.建立Q Capture相关的控制表
通过前面的步骤,这里至少可以有两个DB2 server可用,一个是Server A,一个是Server B。可以使用如下命令来获取相关信息:db2 list db directory
具体操作步骤如下:
输入命令"asnpwd add alias SAMPLE id administrator password ***"。这样就会生成一个相应的password文件。
6.启动Q Capture程序
设定相关参数,启动Q Capture。
7.启动Q Apply程序
设定相关参数,启动Q Apply。
步骤注解
1. 当在Replication Center中配置password和connectivity的时候,它会要求指定Directory ,这应该是DB2安装目录下的bin目录所在的路径,如"c:\sqllib\bin"。
2. 当在Replication Center中配置password和connectivity的时候,远程主机名字应该正确指定。实际上,在这里IP地址也可以和远程主机名字同样被使用。
3. 在设置复制环境的时候,记得将Capture Server所在的数据库设置为archive logging模式。
4. Password文件在如下情况下是必须的:
a. 当Q Apply需要使用export来导出数据时
b. 当Q Capture需要连接到多个数据库分区时
c. 当需要建立相应的Alert Monitor时
d. 当需要运行Q Analyzer(该程序需要连接到被分析的Q Capture和Q Apply)时
e. 当需要用到TDIFF工具时
5. 关于Dead Letter Queue,可以参考《Fast Track Implementation Scenarios》中的Appendix C. Dead letter queues in a Q replication environment
出错分析及解决
问题1描述:
Capture可以正常启动,但是Apply不能正常启动,处于presume stopped的状态。Receive queue正常运作,subscription处于"inactive"的状态,MQ channels正常运作。
分析:
这个问题很有可能是网络原因造成的,例如IP设置错误等等。
解决:
保证网络正常连接,设定正确的IP地址等等。
问题2描述:
在apply日志中,有如下信息:
2005-10-14 12:12:49.578000 ERROR ASN7551E "Q Apply" : "ASN" : "BR00000" : The Q Apply program detected a gap in message numbers on receive queue "WEST_TO_EAST_Q", replication queue map "SAMPLE_ASN_TO_ITARGET_ASN". It read message ID "51524550434D6AB0000000000000000000000000000003F0", but expected to find message ID "51524550434D6AB000000000000000000000000000000001". The Q Apply program cannot process any messages until if finds the expected message.
分析:
Q apply程序检查从Q Capture程序发送过来的消息,这些消息都具有一个依次递增的号码,递增增幅为1。当Q apply发现消息之间的号码不是依次递增时,Apply程序将停止处理并且将相关信息写入apply log中。可以通过命令"db2 ? ASN7551E"来获取更多信息。下面即是截取的一部分:
用户响应(ASN7551E):
在用来在 Q Capture 和 Q Apply 程序之间传输消息的所有WebSphere MQ 队列管理器的所有"死信队列"上查找具有期望消息标识的消息。如果恢复消息,则将它放置在接收队列上,并保留WebSphere MQ 消息头信息(尤其是消息标识)。如果不能恢复消息,则遵循下列步骤:
1. 使用 stopq 命令来停止 Q Apply 程序从接收队列中进行读取。
2. 取消激活此复制队列图的所有 Q 预订。
3. 清空发送队列和接收队列。
4. 使用 startq 命令,以便 Q Apply 程序继续从接收队列中进行读取。
5. 激活此复制队列图的所有 Q 预订。
解决:
通过如下步骤,可以解决这个问题:
1. asnqacmd apply_server=ITAGGET apply_schema=ASN stoptq=WEST_TO_EAST_Q
2. 在RC中将该Q subscriptions设置成为"deactivate"的状态。
3. 通过RC将WEST_TO_EAST_Q清空。
4. asnqacmd apply_server=ITARGET apply_schema=ASN startq=WEST_TO_EAST_Q
5. 再次将Q subscriptions设置成为"active"的状态。
对于该错误一个较好的方法就是:在启动Q Capture或者Q Apply之前,将QM_EAST和QM_WEST 上的admin、restart、和send_receive queueus 清空。
问题3描述:
2005-10-16 15:48:16.171000 ERROR ASN0005E CAPTURE "ASN" : "WorkerThread". The Capture program encountered an error when reading the DB2 log. The log sequence number is "0000:0000:0000:0697:A8BD", the SQLCODE is "-2650", and the reason code is "piStartLSNdb2ReadLog2".
分析:
这个错误主要可能是由于DB2的内部错误引起的。
解决:
完全重新安装DB2来解决这个问题。
问题4描述:
2005-10-16-19.40.47.328000 <dbConnection::dbConnectCtx> ASN0552E "Q Apply" : "ASN" : "BR00000SP001" : The program encountered an SQL error. The server name is "SAMPLE". The SQL request is "CONNECT". The table name is "N/A". The SQLCODE is "-30082". The SQLSTATE is "08001". The SQLERRMC is "3PASSWORD MISSING". The SQLERRP is "SQLEXSMC".
分析:
这个错误主要是由于缺少password文件而导致的。
解决:
安装本文上述相关内容生成password文件即可。