Q复制的原理为:
目前测试环境为
l 源库主机: 10.1.4.56 源端数据库:QTESTDB1 db2inst1/db2inst1
Capture server
AIX v53,8C, 16G内存
l 目的主机: 10.1.4.60 目的数据库:QTESTDB1 db2inst1/db2inst1
Apply Server
AIX v53,4C, 8G内存
l 两边均已经安装了 Replication Server、DB2v9、MQv6软件
l MQ Server的实例被升级到64位类库,因为DB的实例是64位的
2.Q复制配置步骤
Q复制的配置主要分为五个过程:
1.配置MQ队列
2. 配置数据库
3. 配置环境变量
4.配置Q复制服务组件
5.根据需要复制的表配置Q预定
2.1 配置MQ队列
MQ的配置有一套模版脚本,放在 /qrep/mqscript 目录下,其中在源端运行source.sh,目的端运行 target.sh。针对测试环境目前设置的队列深度为 1M,日志文件大小为256M,主辅日志文件个数为9:6,以上参数基本上只需要根据数据复制量来调整日志文件个数。
如果在不同的机器环境下,只需要更改脚本中的主机IP和端口号。在 source.sh 和 target.sh 脚本中只需要修改端口号,而在 source.mqdef 和 target.mqdef 脚本中需要修改主机的IP和端口号。
2.2 配置数据库(1)将实例用户加入到mqm组,并为DB2添加包含Q-复制功能的license
ESE的license不含Q-复制license,需要单独添加Q-复制的license
AESE的license中则包含Q-复制的license
(2)更新LOGRETAIN为归档模式
db2 UPDATE DB CFG USING FOR dbname LOGRETAIN = ON
更新该参数后需要归档数据。
(3)编目目标数据库到源系统
CATALOG TCPIP NODE nodename REMOTE ip_address SERVER port
CATALOG DATABASE dbname AS alias AT NODE nodename
修改实例用户的.profile,加入以下内容:
(1) AIX操作系统:
PATH="${PATH}:/usr/mqm/bin:."
export PATH
LIBPATH="${LIBPATH}:/usr/mqm/lib64"
export LIBPATH
(2) SUSELINUX操作系统:
修改/home/${INSTNAME}/sqllib/db2profile,增加如下内容:
AddRemoveString LD_LIBRARY_PATH /opt/mqm/lib64 a
修改.profile,增加如下内容:
export PATH=$PATH:/opt/mqm/bin:.
2.4 配置Q复制服务器组件
Q复制的服务器组件包括Q Capture Server 和 Q Apply Server,配置Q复制服务器组件只需要执行如下脚本:
ASNCLP –f qrep.bin
确认防火墙已经关闭。
其中 qrep.bin 脚本内容如下:
一般情况下此脚本不需要修改,只有粗体部分需要注意,如果数据库的访问口令修改了则应修改相应的脚本,如果是第一次建立Q服务器组件则删除脚本无效,需要注释掉。
2.5 配置Q预定配置Q预定只需要在服务端执行如下脚本:
ASNCLP –f qsub.bin
MAP中服务端表需要激活data capture changes属性,命令如下:
alter table tabname data capture changes
其中,qsub.bin内容如下:
ASNCLP SESSION SET TO Q REPLICATION; SET LOG "qsub.err"; SET RUN SCRIPT NOW STOP ON SQL ERROR ON; SET OUTPUT CAPTURE SCRIPT "QREPCAPSUB.SQL" TARGET SCRIPT "QREPAPPSUB.SQL"; SET QMANAGER QMGA FOR CAPTURE SCHEMA; SET QMANAGER QMGB FOR APPLY SCHEMA; SET CAPTURE SCHEMA SOURCE ASN; SET APPLY SCHEMA ASN; SET SERVER CAPTURE TO DB qtestdb1 id db2inst1 password "db2inst1" ; SET SERVER TARGET TO DB qtestdb2 id db2inst1 password "db2inst1" ;
DROP QSUB USING REPLQMAP S_TO_T_MAP (SUBNAME GATEST0001 );
CREATE QSUB USING REPLQMAP S_TO_T_MAP (SUBNAME GATEST0001 TCBSUSRA.GATEST OPTIONS HAS LOAD PHASE I SUPPRESS DELETES Y EXIST TARGET NAME TCBSUSRA.GATEST CONFLICT ACTION F LOAD TYPE 0);
START QSUB SUBNAME GATEST0001 ; |
其中,qtestdb2是需要编目到服务端的。subname不能重复。
2.6 启动Q复制组件
(1) 启动Capture组件
asnqcap capture_server=qtestdb1 capture_schema=asn startmode=cold &
(2) 启动Apply组件
asnqapp apply_server=qtestdb2 apply_schema=asn &
2.7 检查Q复制组件状态
(1) 检查Capture组件状态
asnqccmd capture_server=qtestdb1 capture_schema=asn status show details
(2) 检查Apply组件状态
asnqacmd apply_server=qtestdb2 apply_schema=asn status show details
2.8 停止Q复制组件
(1) 停止Capture服务组件
asnqccmd capture_server=qtestdb1 capture_schema=asn stop
(2) 停止Apply订阅组件
asnqacmd apply_server=qtestdb2 apply_schema=asn stop
启动:asnqcap capture_server=qtestdb1 capture_schema=asn [startmode=cold]&
停止:asnqccmd capture_server=qtestdb1 capture_schema=asn stop
查看状态:asnqccmd capture_server=qtestdb1 capture_schema=asn status [show details]
Q apply server:
启动:asnqapp apply_server=qtestdb2 apply_schema=asn &
停止:asnqacmd apply_server=qtestdb2 apply_schema=asn stop
查看状态:asnqacmd apply_server=qtestdb2 apply_schema=asn status [show details]
查看状态时ACTIVE_QSUBS表示订阅个数,为0表示为订阅成功。
命令行进行复制订阅集/控制表
asnclp –f <asnclp.sql>
QA:
1. 如果启动之后订阅失败,请clear服务组件的MQ 队列GA.RESTARTQ 和 GA.ADMINQ。
然后重新执行订阅脚本,最后重启服务。
2. 服务组件激活成功,订阅组件未激活成功。检查服务组件发送通道是否启动,订阅组件监听是否启动。
4 目前的问题因为Q复制的Q预定是基于表的,所以表结构变化之后需要重新配置,下图的五张表的定义不准确,主要是因为Excel中定义的条件所使用的数据列已经发生变化,即和数据库不一致,修改Excel后,停止Q复制,重新建立Q预定后再启动Q复制即可。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论5 条评论
2014-11-06 22:34
2014-11-05 10:27
2014-11-05 09:50
2014-10-16 16:11
2014-10-14 21:04