DB2远程Q复制实践
【IT168 技术文档】本文将大概讲述SQL Replication,然后引出Q Replication的意义。本文档通过位于两台不同主机上的数据库间的单向复制来展现远程Q复制的使用。除了说明操作步骤以外,本文档同时也对相关的关键概念,一些常见的错误以及相关的信息做出了相应解释。
在实际操作之前,读者应该具有DB2数据库的相关管理操作的基本概念和基础知识,同样也应该对Websphere Information Integrator和Websphere MQ有相关了解。如果读者原来在一个机器上做过DB2复制相关的练习,例如IBM提供的T3练习,将对本文的学习很有帮助。
本文档主要分为三个大部分:第一个部分是配置和编目远程数据库,第二个部分是配置Websphere MQ的相关对象,第三个部分是通过Replication Center来建立起最终的复制环境。对于每一个部分,都包括操作步骤,相关问题和解决办法,以及一些相关的提示信息。
前提条件
1.平台的选择
考虑到大部分读者可能更容易获得Windows操作系统环境,所以,本文档的实现,源数据库和目标数据库是分别在两个Windows操作系统上。但是,实际上如果换成其他操作系统平台,如Unix/Linux,所有的操作步骤将是大同小异。
2.软件的安装
读者需要安装好DB2,Websphere MQ。依据相关安装文档执行即可。
3.本文的相关约定
为了便于读者学习和实践本文,下面给出了笔者在实际操作过程中所建立起来的环境的具体信息,读者当然也可以对自己的相关机器和对象指定其他的名称。在本文中,所使用的对象信息即如下所述(主要包括主机的设置,DB2的设置,以及Websphere MQ的设置)。
4.主机和DB2的相关设置信息
注意: 在使用复制功能之前,数据库ITARGET和SAMPLE都应该将日志模式设置为archive logging模式(归档日志模式)。
5.Websphere MQ的相关配置信息
6.Q复制的配置信息
注意:
1. 上面的Replication q map name可以由用户自行定义,一般可以按照复制的功能特点来进行命名。
2. 对于本文中所使用到的相关的MQ的完整定义,可以在EAST_QUEUE_DEFINE.TXT文件和WEST_QUEUE_DEFINE.TXT文件中找到。读者也可以使用上述脚本来生成所需要的MQ对象。
操作步骤、出错分析及解决
第一部分 配置远程数据库连接
操作步骤
本文中,SAMPLE数据库是源数据库,源表即在这个数据库中。而数据库ITARGET为目标数据库。而对于要创建的MQ对象来说,名字中的EAST和WEST也将用来区分两个主机,EAST相关的MQ对象和ITARGET数据库在同一个主机上,而WEST相关的MQ对象和SAMPLE数据库在同一个主机上。所以,数据将是从SAMPLE(WEST)复制到ITARGET (EAST),其间通过定义好的相关队列来实现数据的中间传递作用。
在EAST端(即Apply Server端,也就是ITARGET目标数据库端),通过下面的操作步骤来编目位于另外一个主机上的SAMPLE源数据库。
1.打开CLP,输入下面的命令来实现对远程SAMPLE数据库的编目:
db2 catalog tcpip node WEST remote 9.181.135.61 server 50000
db2 catalog database SAMPLE at node WEST
db2 terminate;
2.在CLP中输入下面的命令来测试从EAST到WEST的连接是否有效:
db2 connect to SAMPLE user administrator using ***
db2 terminate;
在上述步骤中,可能会遇到一些错误,笔者将其总结在下面的部分,你也可以通过本文后面的参考信息获得更多帮助。这样,一个远程数据库的编目操作就完成了,用户便可以通过CLP命令行方式或者DB2的控制中心图形界面方式来实现对远程数据库的操作。
对于Q复制中的单向复制来说,上述编目步骤即可。如果想实现Q复制中的双向复制或者P2P复制,那么需要在另外一端完成类似上述的步骤,操作方式如下。
在WEST节点(即SAMPLE数据库所在的主机)上,执行如下的操作:
1.打开CLP,输入下面的命令来实现对远程ITARGET数据库中的编目:
db2 catalog tcpip node EAST remote 9.181.135.238 server 50000
db2 catalog database ITARGET at node EAST
db2 terminate;
2.在CLP中输入下面的命令来测试从EAST到WEST的连接是否有效:
db2 connect to ITARGET user administrator using xxx
db2 terminate;
步骤注解
在本部分过程中,我们会经常用到如下一些有用的命令,写在这里,仅供参考: (用户可以修改粗体部分以符合自身需要)
1) db2 list node directory
2) db2 list node directory show detail
3) db2 catalog tcpip node WSII remote 9.181.139.155 server 50000
4) db2 catalog database source at node WSII
5) db2 terminate
6) db2 list database directory
7) db2 create database database_name
8) db2 drop database database_name
9) db2sampl -k (该命令用来创建DB2缺省的SAMPLE数据库,参数k表示建立带有主键的表,如果没有该参数,所有表将没有主键和索引)
10) db2ilist (list instance)
11) db2 uncatalog database database_name
12) db2 uncatalog node node_name
注意: 远程数据库可以被编目,被编目的数据库也可以删除这种编目关系,但是数据库不能在远端被创建和删除。
一些重要的概念:
db2c_DB2
在命令"db2 catalog tcpip node WSII remote 9.181.139.155 server 50000"中,其中的参数50000,不仅可以用这种端口的数字形式,也可以用一个叫做db2c_DB2的服务名称。
db2c_DB2主要实现DB2的网络服务功能。db2c_DB2和数字端口之间的关系实际上可以在dbm cfg文件中找到。
使用"db2 get dbm cfg"命令并查看如下部分:
TCP/IP Service name (SVCENAME) = db2c_DB2
因为dbm在DB2实例级别对相关参数进行设定,所以,上述的SVCENAME即是一个定义TCP/IP服务端口的实例级别的参数,其缺省值为50000。
另外,如果是在类UNIX系统中,在etc/service目录下,在services文件中包含了当前DB2所使用到的相关端口信息,可以通过修改这个文件来进行相关修改和设定。下面即是相关内容的截取。
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://chinaunix.net/jh/22/16779.html