WEB开发网
开发学院数据库DB2 三点之间的对等(peer-to-peer)Q 复制配置 阅读

三点之间的对等(peer-to-peer)Q 复制配置

 2009-12-24 00:00:00 来源:WEB开发网   
核心提示:三点之间的对等(peer-to-peer)Q 复制配置对等 (peer-to-peer) Q 复制是 DB2 Q 复制中一种,利用这种对等 Q 复制可以将任何一台服务器上发生的数据变化通过 MQ 传输到其它相关联的服务器上,三点之间的对等(peer-to-peer)Q 复制配置,并复制到这些服务器上,从而实现多台数据库

三点之间的对等(peer-to-peer)Q 复制配置

对等 (peer-to-peer) Q 复制是 DB2 Q 复制中一种。利用这种对等 Q 复制可以将任何一台服务器上发生的数据变化通过 MQ 传输到其它相关联的服务器上,并复制到这些服务器上,从而实现多台数据库服务器之间的数据同步。 本文将通过一个例子说明如何搭建对等 Q 复制的基本配置环境,实现三个点之间的对等 Q 复制。

简介

对等 Q 复制主要适用于在两台或者多台数据库之间同步数据,它具有如下主要特性:

可以对两台或者两台以上的数据库服务器的表进行复制。

在对等配置中的任何一台数据库服务器上的变化可以复制到其它所有相关的数据库服务器中。

所有的服务器是对等关系,没有“主”服务器的概念,如果发生冲突,最近时间戳更新的数据是有效数据。

越来越多的用户开始采用 DB2 Q 复制作为 DB2 的一种高可用,高扩展性的解决方案,搭建“双活” 甚至“三活”的数据库系统。


图 1. 三台服务器之间的对等 Q 复制架构图
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

本文将通过一个例子来说明如何在三个数据库之间搭建对等 Q 复制环境。

本文档主要分为三个大部分:

第一个部分是操作系统、数据库、 MQ 的基本配置 ;

第二个部分是通过复制中心建立对等 Q 复制环境;

第三部分是对等 Q 复制的配置校验和复制测试。

操作系统、数据库、 MQ 的基本配置

配置前准备工作

在搭建 Q 复制环境之前,需要进行如下准备工作:

1. 安装 DB2 数据库软件。

2. 在操作系统中创建如表 1 所示的 db2 instance 、mqm 用户及组。


表 1. 用户及组设置

描述 Peer A Peer B Peer C
Instance ID db2inst1 db2inst2 db2inst3
Instance Group db2grp1,mqm db2grp2,mqm db2grp3,mqm
Fence ID db2fenc1 db2fenc2 db2fenc3
Fence Group db2fgrp1,mqm db2fgrp2,mqm db2fgrp3,mqm
MQ ID mqm mqm mqm
MQ Group mqm mqm mqm
REP ID qrepladm qrepladm qrepladm

3. 安装 MQ 软件。

4. 创建 DB2 实例和数据库。

注:本文使用的软件版本是DB2 v9.1.0.6和WebSphere MQ 6.0.2.3。本文测试环境是在同一台Linux服务器上创建三个DB2实例和数据库来模拟三点之间的复制。

数据库设置

在上述准备工作完成以后,实例和数据库信息如表 2 所示。


表 2. 数据库信息

描述 Peer A Peer B Peer C
Instance db2inst1 db2inst2 db2inst3
Port 50000 50001 50002
IP 127.0.0.1 127.0.0.1 127.0.0.1
Indirect Database TP1 TP2 TP3
Remote Database TP2, TP3 TP1, TP3 TP1, TP2

注 : 在使用复制功能之前,所有数据库都应该将日志模式设置为archive logging模式(归档日志模式)。

创建完 DB2 实例和数据库以后,需要在本地进行编目远程数据库后才可以对其进行访问操作。

例如:在 db2inst1 用户下,输入清单 1 所示的命令来实现对远程 TP2,TP3 数据库的编目:


清单 1. 编目 DB2 数据库
 db2 catalog tcpip node db2inst2 remote 127.0.0.1 server 50001 
 db2 catalog database tp2 at node db2inst2 
 db2 catalog tcpip node db2inst3 remote 127.0.0.1 server 50002 
 db2 catalog database tp3 at node db2inst3 
 db2 terminate 

用清单 2 所示的方法测试 db2inst1 实例是否能正常连接 db2inst2 、db2inst3 实例上的 TP2 、TP3 数据库。


清单 2. 连接远程数据库
 db2 connect to tp2 user db2inst2 using *** 
 db2 connect to tp3 user db2inst3 using *** 
 db2 terminate 

同样的方法在 db2inst2 和 db2inst3 上编目相应的节点和数据库信息。使每个实例都能访问其他两个实例上的数据库。

为了方便复制操作,通常会在各个数据库上创建相同的模式和复制表。

用清单 3 所示的方法在 TP1、TP2、TP3 上给 qrepladm 用户授权并创建 QREPLADM.S_TAB 表


清单 3. 授权及建表
 db2 grant DBADM on DATABASE to USER qrepladm 
 db2 "create table QREPLADM.S_TAB(id integer not null PRIMARY KEY,content varchar(20))" 

MQ 对象设置

本文附件提供一些脚本用于创建相关的 MQ 对象,用户可以修改或者直接使用它们来创建必要的 MQ 对象。QM1.mqs、QM2.mqs、QM3.mqs 文件分别用于创建 QM1、QM2、QM3 相关的消息对象。上述三个脚本中分别定义了 QM1、QM2、QM3 三个队列管理器中的队列、通道等对象。

在 Peer A 上,定义名叫 QM1 的 MQ manager。如果 QM1 已经存在,按照清单 4 所示的命令删除旧的 QM1:


清单 4. 停止并删除队列管理器
 endmqm QM1 
 dltmqm QM1 

然后按照清单 5 所示的方法来创建 QM1:


清单 5. 创建队列管理器及 MQ 对象
 crtmqm QM1 
 strmqm QM1 
 runmqsc QM1<QM1.mqs > QM1.log 

用同样的办法在 Peer B 和 Peer C 上定义名叫 QM2 和 QM3 的 MQ manager 。

创建好所有的 MQ 对象以后,按照清单 6 所示的方法查看 QM1 的队列和通道信息


清单 6. 查看 MQ 队列和通道信息
 mqm@ibmswg01:~> echo "dis Queue(*)" |runmqsc QM1 
 |grep -i Queue|grep -Ev "SYSTEM|AMQ8409" 
 
 Starting MQSC for queue manager QM1. 
 1 : dis Queue(*) 
 QUEUE(IBMQREP.SPILL.MODELQ) TYPE(QMODEL) 
 QUEUE(P1_ADMINQ) TYPE(QLOCAL) 
 QUEUE(P1_RESTARTQ) TYPE(QLOCAL) 
 QUEUE(P1_TO_P2_Q) TYPE(QREMOTE) 
 QUEUE(P1_TO_P3_Q) TYPE(QREMOTE) 
 QUEUE(P2_ADMINQ) TYPE(QREMOTE) 
 QUEUE(P2_TO_P1_Q) TYPE(QLOCAL) 
 QUEUE(P3_ADMINQ) TYPE(QREMOTE) 
 QUEUE(P3_TO_P1_Q) TYPE(QLOCAL) 
 QUEUE(QM2) TYPE(QLOCAL) 
 QUEUE(QM3) TYPE(QLOCAL) 
 
 mqm@ibmswg01:~> echo "dis CHANNEL(*)" |runmqsc QM1 
 |grep -i CHANNEL |grep -Ev "SYSTEM|AMQ8414" 
 
 1 : dis CHANNEL(*) 
 CHANNEL(P1_TO_P2) CHLTYPE(SDR) 
 CHANNEL(P1_TO_P3) CHLTYPE(SDR) 
 CHANNEL(P2_TO_P1) CHLTYPE(RCVR) 
 CHANNEL(P3_TO_P1) CHLTYPE(RCVR) 

用户还可以通过图形界面来查看 MQ 对象相关信息。如图 2 所示,在图形界面中使用 Websphere MQ Explorer 查看 QM1 的队列信息。


图 2. 使用 MQ Explorer 查看 QM1 的队列信息
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

在创建以及查看相关 MQ 对象后,需要测试 MQ 对象(如 MQ 通道和队列等)是否能正常工作。例如测试从 P1 到 P2 发送消息通道配置是否正常的方法如下:

1. 执行清单 7 所示的命令将消息放入到 QM1 的远程队列 P1_TO_P2_Q 中。


清单 7. 放置消息到队列中
 mqm@ibmswg01:~/qmgrs> /opt/mqm/samp/bin/amqsput P1_TO_P2_Q QM1 
 Sample AMQSPUT0 start 
 target queue is CAP_ADMINQ 
 test massage from P1 to P2 
 Sample AMQSPUT0 end 

2. 然后执行如清单 8 所示的命令从 QM2 中的本地队列 P1_TO_P2_Q 中获取信息。


清单 8. 从队列中获取消息
 mqm@ibmswg01:~/qmgrs> /opt/mqm/samp/bin/amqsget P1_TO_P2_Q QM2 
 Sample AMQSGET0 start 
 message <test massage from P1 to P2> 

Q 复制的其他配置信息

Q Capture 目录是指启动 Q Capture 服务器的目录。Q Apply 目录是指启动 Q Apply 服务器的目录。在各点上分别创建表 3 中的 Q Capture 目录和 Q Apply 目录。


表 3.  Q 复制其他配置信息

描述 Peer A Peer B Peer C
Q Capture schema ASN ASN ASN
Q Apply schema ASN ASN ASN
Q Capture Path /home/db2inst1/cap_tp1 /home/db2inst2/cap_tp2 /home/db2inst3/cap_tp3
Q Apply Path /home/db2inst1/app_tp1 /home/db2inst2/app_tp2 /home/db2inst3/app_tp3

Apply 程序要连接到 Capture 服务器,先要在 Apply 目录中创建 Apply 程序所需要的密码文件。如清单 9 所示,在 TP1 Apply 目录上创建所需的密码文件:


清单 9 设置密码文件
 db2inst1@ibmswg01:~/app_tp1> asnpwd init 
 2009-07-06-05.37.24.339783 ASN1981I "Asnpwd" : "" : "Initial". 
 The program completed successfully using password file "asnpwd.aut". 
  
 db2inst1@ibmswg01:~/app_tp1> asnpwd add alias tp2 id db2inst2 password db2inst2 
 2009-07-06-05.38.08.066997 ASN1981I "Asnpwd" : "" : "Initial". 
 The program completed successfully using password file "asnpwd.aut". 
 
 db2inst1@ibmswg01:~/app_tp1> asnpwd add alias tp3 id db2inst3 password db2inst3 
 2009-07-06-05.38.45.351191 ASN1981I "Asnpwd" : "" : "Initial". 
 The program completed successfully using password file "asnpwd.aut". 
 
 db2inst1@ibmswg01:~/app_tp1> ls 
 asnpwd.aut 

复制配置

在上述准备工作做完以后,就可开始进行 Q 复制配置工作,复制配置可以通过命令行或者复制中心图形界面的方式来完成。本文将使用复制中心来完成整个配置工作。图 3 显示在图形界面环境下使用 db2rc 命令启动复制中心。


图 3. 复制中心向导
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

创建 Q Capture 服务器时,需要指定 Q Capture 服务器的名字、模式、用户以及密码。在对等 Q 复制中,每个数据库上同时运行 Capture 服务器和 Apply 服务器,可以同时选择创建 Apply 服务器。 如图 4 所示,指定 Capture 服务器 为 TP1, Q Capture 模式为 ASN,并选择“Create both Q Capture and Q Apply control tables on this server”用来同时创建 TP1 Apply 服务器。


图 4. 指定 Q Capture 服务器和模式
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

运行在 Capture 服务器上的 Q Capture 程序读取 DB2 的变化数据的恢复日志并把这些变化写到 Capture 服务器上的队列管理器的对应队列中去。 如图 5 所示,设置 Capture 服务器 TP1 上的 Q Manager 为 QM1,Admin queue 选择为 P1_ADMINQ,Restart queue 选择为 P1_RESTARTQ 。


图 5. 设置 MQ 对象信息
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

用上述同样的步骤创建 TP2 、TP3 Capture 服务器 和 TP2 、TP3 Apply 服务器。

创建好所有的 Capture 和 Apply 服务器后,在复制中心向导中继续创建 Q 预订集。要实现三点之间的 Q 复制需要选择“三点或更多点对等”的复制类型。

如图 6 所示,在复制类型页面中选择"Peer-to-peer,three or more servers"。


图 6. 复制类型
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

在选择完复制类型后,再把创建好的 Capture 和 Apply 服务器加入对等复制的配置中去。通过图 7 所示的 “增加服务器” 对话框,可以增加 TP1 服务器,并且配置 TP1 到 TP3 之间的复制队列图。


图 7. 增加服务器
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

点击图 7 中 “From TP1”和“To TP1” 按钮创建从 TP1 到 TP3 和从 TP3 到 TP1 的复制队列图。如图 8 所示的 TP1 到 TP3 的复制队列图。Capture Server 为 TP1, Apply Server 为 TP3, Capture 服务器上的 Send queue 为 QM1 上的远程 Q: P1_TO_P3_Q ,Apply 服务器上的 Receive queue 为 QM3 上的本地 Q : P1_TO_P3_Q。Capture 服务器上 Admin queue 为 QM1 上的本地 Q: P1_ADMINQ , Apply 服务器上的 Admin queue 为 QM3 上的远程 Q: P1_ADMINQ。复制队列图名称为 TP1_ASN_TO_TP3_ASN。


图 8. 创建复制队列图
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

同样的办法创建其它所需的复制队列图,结果如图 9 所示


图 9. 各点之间的复制队列图
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

为了实现三点之间的对等复制,需要把 TP1、TP2 和 TP3 都加入到对等复制的配置中去。如图 10 所示 ,TP1、TP2 和 TP3 都加入成为对等服务器。


图 10. 点对点服务器
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

配置完对等服务器后需要对复制表进行定义。如图 11 所示,选择复制源表为上文创建的 QREPLADM.S_TAB 。


图 11. 选择复制源表
三点之间的对等(peer-to-peer)Q 复制配置

复制表定义完成以后,三点对等 Q 复制配置中会生成 N*(N-1) 个 Q 预订集(N 为点的个数,本文中为 3)。图 12 显示所生成 6 个 Q 预订集。


图 12. 检查并完成预订集设置
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

检查及测试

配置校验

完成对等复制配置以后,接着对配置进行校验确认。主要校验内容如下:

1. Q CAPTURE 服务器 CAPPARMS 参数校验:

如清单 10 所示, 在 Peer A 上 CAPTURE 服务器 TP1 的 CAPPARMS 配置参数如下:QMGR 应为 QM1 ,ADMINQ 应为 P1_ADMINQ,RESTARTQ 应为 P1_RESTARTQ 。


清单 10. 校验 CAPPARMS 配置参数
 db2inst1@ibmswg01:~> db2 "select char(qmgr,10) qmgr, char(adminq,10) 
 adminq, char(RESTARTQ,15) RESTARTQ , startmode from asn.ibmqrep_capparms" 
 
 QMGR ADMINQ RESTARTQ STARTMODE 
 ---------- ---------- --------------- --------- 
 QM1 P1_ADMINQ P1_RESTARTQ WARMSI 
   1 record(s) selected. 

同样的办法可以校验 TP2 和 TP3 上 Q CAPTURE 服务器的 CAPPARMS 参数配置。

2. Q CAPTURE 服务器 SUBS 校验:

如清单 11 所示,在 Peer A 上 CAPTURE 服务器 TP1 的 SUBS 配置如下:TARGET_ALIAS 应为另外两个远程节点(在 TP1 上的远程节点应该是 TP2 和 TP3), 在 TP1 上的 SENDQ 应为 P1_TO_P2_Q 和 P1_TO_P3_Q 。


清单 11. 校验 SUBS 配置
 db2inst1@ibmswg01:~> db2 "select char(subgroup, 10) subgroup, 
 target_alias, char(sendq,15) sendq, count(source_name) tables_per_target 
 from asn.ibmqrep_subs group by subgroup, target_alias, sendq" 
 
 SUBGROUP TARGET_ALIAS SENDQ TABLES_PER_TARGET 
 ---------- ------------ --------------- ----------------- 
 000001 TP2 P1_TO_P2_Q 1 
 000001 TP3 P1_TO_P3_Q 1 
 
 2 record(s) selected. 

同样的办法可以校验 TP2 和 TP3 上 Q CAPTURE 服务器的 SUBS 配置。

3. Q CAPTURE 服务器 SENDQ 校验:

如清单 12 所示,在 Peer A 上 CAPTURE 服务器 TP1 的 SENDQ 配置参数如下:复制队列图应为 TP1_ASN_TO_TP3_ASN 和 TP1_ASN_TO_TP2_ASN ,SENDQ 应为 QM1 上的远程队列 P1_TO_P3_Q 和 P1_TO_P2_Q,APPLY_ALIAS 应为 TP3 和 TP2 ,RECVQ 应为 QM3 上的本地队列 P1_TO_P3_Q 和 QM2 上的本地队列 P1_TO_P2_Q。


清单 12. 校验 SENDQ 配置参数
db2inst1@ibmswg01:~> db2 "select char(pubqmapname, 20) pubqmapname, 
char(sendq,15) sendq, apply_alias, char(recvq, 15) recvq 
from asn.ibmqrep_sendqueues" 
PUBQMAPNAME SENDQ APPLY_ALIAS RECVQ 
-------------- ------- ------ -------- 
TP1_ASN_TO_TP3_ASN P1_TO_P3_Q TP3 P1_TO_P3_Q 
TP1_ASN_TO_TP2_ASN P1_TO_P2_Q TP2 P1_TO_P2_Q 
 
2 record(s) selected. 
 

同样的办法可以校验 TP2 和 TP3 的 Q CAPTURE 端 SENDQ 配置。

4. Q APPLY 服务器 APPLYPARMS 校验:

如清单 13 所示,在 Peer A 的 APPLY 服务器 TP1 上的 APPLYPARMS 配置参数中的 QMGR 应为 QM1。


清单 13. 校验 APPLYPARMS 配置
 db2inst1@ibmswg01:~> db2 "select char(qmgr,20) qmgr 
 from asn.ibmqrep_applyparms" 
 
 QMGR 
 -------------------- 
 QM1 
 
 1 record(s) selected. 

同样的办法可以校验 TP2 和 TP3 上 Q APPLY 服务器 APPLYPARMS 参数配置。

5. Q APPLY 端 RECVQ 校验:

如清单 14 所示,在 Peer A 的 ALLPY 服务器 TP1 上的 RECVQ 配置参数如下:复制队列图应为 TP3_ASN_TO_TP1_ASN 和 TP2_ASN_TO_TP1_ASN,SENDQ 应为 QM3 上的远程队列 P3_TO_P1_Q 和 QM2 上的远程队列 P2_TO_P1_Q ,CAPTURE _ALIAS 应为 TP3 和 TP2 ,RECVQ 应为 QM1 上的本地队列 P3_TO_P1_Q 和 QM2 上的本地队列 P2_TO_P1_Q。


清单 14. 校验 RECVQ 配置
 db2inst1@ibmswg01:~> db2 "select char(repqmapname, 20) repqmapname, 
 char(sendq, 20) sendq, capture_alias, char(recvq, 20) recvq 
 from asn.ibmqrep_recvqueues" 
 
 REPQMAPNAME SENDQ CAPTURE_ALIAS RECVQ 
 ----------- -------- ------ ----------- 
 TP3_ASN_TO_TP1_ASN P3_TO_P1_Q TP3 P3_TO_P1_Q 
 TP2_ASN_TO_TP1_ASN P2_TO_P1_Q TP2 P2_TO_P1_Q 
 
2 record(s) selected. 

同样的办法可以校验 TP2 和 TP3 上 Q APPLY 端 RECVQ 配置。

复制测试

在复制配置校验完成以后,进行复制测试。主要步骤如下:

1.启动各个 Peer上的 Capture服务器

如清单 15 所示,在 Peer A 上的 Capture 目录下用 COLD 模式启动 TP1 Capture 服务器


清单 15. 启动 Capture 服务器
db2inst1@ibmswg01:~/cap_tp1> asnqcap capture_server=tp1 STARTMODE=COLD 
2009-07-06-06.30.56.092250 ASN0600I "Q Capture" : "" : "Initial" : 
 Program "mqpub 9.1.0" is starting. 
 
2009-07-06-06.30.57.769079 ASN0609W "Q Capture" : "ASN" : "Initial" : 
A license for WebSphere Event Publisher was not found. 
 
2009-07-06-06.31.01.092457 ASN7000I "Q Capture" : "ASN" : "WorkerThread" : 
 
"0" subscriptions are active. "2" subscriptions are inactive. "0" subscriptions 
that were new and were successfully activated. "0" subscriptions 
that were new could not be activated and are now inactive. 
 
2009-07-06-06.31.01.209252 ASN0572I "Q Capture" : "ASN" : "WorkerThread" : 
The " " program initialized successfully. 
 

用同样的办法在 Peer B 和 Peer C 上启动 TP2 和 TP3 Capture 服务器

2.启动各个 Peer上的 Apply服务器

如清单 16 所示,在 Peer A 上的 Apply 路径下启动 TP1 Apply 服务器


清单 16. 启动 Apply 服务器
db2inst1@ibmswg01:~/app_tp1> asnqapp apply_server=tp1 
2009-07-06-06.31.44.602613 ASN0600I "Q Apply" : "" : "Initial" : 
Program "mqapply 9.1.0" is starting. 
 
2009-07-06-06.31.48.375575 ASN0572I "Q Apply" : "ASN" : "Initial" : 
The " " program initialized successfully. 
 
2009-07-06-06.31.52.291964 ASN7526I "Q Apply" : "ASN" : "BR00001" : 
The Q Apply program has started processing the receive queue "P2_TO_P1_Q" 
 for replication queue map "TP2_ASN_TO_TP1_ASN". 
 
2009-07-06-06.31.52.533868 ASN7526I "Q Apply" : "ASN" : "BR00000" : 
The Q Apply program has started processing the receive queue "P3_TO_P1_Q" 
for replication queue map "TP3_ASN_TO_TP1_ASN". 

用同样的办法在 Peer B 和 Peer C 上启动 TP2 和 TP3 Apply 服务器

3.激活 Q预订集

如图 13 在复制中心中的 Q Capture 服务器 TP 1 的右键管理菜单中选择 Q 预订集。


图 13. 管理 Q 预订集
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

如图 14 选择需要激活的预订集 S_TAB0006 选择 “start” 按钮激活预订集


图 14. 激活预订集
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

同样的办法激活 TP1 上的预订集 S_TAB0001,图 15 显示被激活后的预订集的状态。


图 15. 被激活后预订集
三点之间的对等(peer-to-peer)Q 复制配置

查看原图(大图)

4.检查预订集状态

当预订集激活以后,Q 预订集和其对应的目标集的状态都应为活动状态 “A”。如清单 17 所示,在 Peer A 的 TP1 上检查 Q 预订集 ibmqrep_subs 以及在 TP2 和 TP3 上对应目标集 ibmqrep_targets 的状态。


清单 17. 检查预定集合目标集状态
 db2inst1@ibmswg01:~> db2 "select char(SUBNAME,10) as SUBNAME,state from asn.ibmqrep_subs" 
 
 SUBNAME STATE 
 ---------- ----- 
 S_TAB0001 A 
 S_TAB0006 A 
 
 2 record(s) selected. 
 
 db2inst2@ibmswg01:~> db2 "select char(SUBNAME,10) as SUBNAME,state 
 from asn.ibmqrep_targets where SUBNAME = ’ S_TAB0006 ’" 
 
 SUBNAME STATE 
 ---------- ----- 
 S_TAB0006 A 
   1 record(s) selected. 
 
 db2inst3@ibmswg01:~> db2 "select char(SUBNAME,10) as SUBNAME,state 
 from asn.ibmqrep_targets where SUBNAME = ’ S_TAB0001 ’" 
 
 SUBNAME STATE 
 ---------- ----- 
 S_TAB0001 A 
   1 record(s) selected. 
 

用同样的办法检查其它 Q 预订集和目标集的状态。当 TP1 上的预订集激活以后, TP2 和 TP3 上的预订集也会自动激活。

5.插入复制测试

如清单 18 所示,分别在 Peer A 、Peer B、Peer C 上向空表 QREPLADM.S_TAB 插入数据。


清单 18. 在三点上分别插入数据
 db2inst1@ibmswg01:~> db2 "insert into qrepladm.S_TAB(id,content) values(1,'from tp1')" 
 DB20000I The SQL command completed successfully. 
 
 db2inst2@ibmswg01:~> db2 "insert into qrepladm.S_TAB(id,content) values(2,'from tp2')" 
 DB20000I The SQL command completed successfully. 
 
 db2inst3@ibmswg01:~> db2 "insert into qrepladm.S_TAB(id,content) values(3,'from tp3')" 
 DB20000I The SQL command completed successfully. 

然后分别在 Peer A、Peer B、Peer C 上查询 QREPLADM.S_TAB 表中的数据。


清单 19. 在三点上分别查看数据
 db2inst1@ibmswg01:~> db2 "select id,content from qrepladm.S_TAB" 
 
 ID CONTENT 
 ----------- ---------- 
 1 from tp1 
   2 from tp2 
   3 from tp3 
   3 record(s) selected. 
 
 db2inst2@ibmswg01:~> db2 "select * from qrepladm.S_TAB" 
 
 ID CONTENT 
 ----------- ---------- 
 1 from tp1 
   2 from tp2 
   3 from tp3 
   3 record(s) selected. 
  
 db2inst3@ibmswg01:~> db2 "select * from qrepladm.S_TAB" 
 
 ID CONTENT 
 ----------- ---------- 
 1 from tp1 
   2 from tp2 
   3 from tp3 
   3 record(s) selected. 

在每个点的数据库上都看到了相同的数据,其中分别有两条数据是从另外两点上复制过来的,这样就实现了多点之间的数据复制。

6.更新复制测试

如清单 20 所示在 Peer A 、Peer B、Peer C 上的 QREPLADM.S_TAB 表上顺序执行下列数据更新语句。


清单 20. 在三点上顺序更新数据
 db2inst1@ibmswg01:~> db2 "update qrepladm.S_TAB set content='update from tp1' where id=1" 
 DB20000I The SQL command completed successfully. 
 
 db2inst2@ibmswg01:~> db2 "update qrepladm.S_TAB set content='update from tp2' where id=1" 
 DB20000I The SQL command completed successfully. 
 
 db2inst3@ibmswg01:~> db2 "update qrepladm.S_TAB set content='update from tp3' where id=1" 
 DB20000I The SQL command completed successfully. 

然后分别在 Peer A、Peer B、Peer C 上查询 QREPLADM.S_TAB 表中该条被修改的数据。


清单 21. 在三点上分别查看数据
 db2inst1@ibmswg01:~> db2 "select id,content from qrepladm.S_TAB where id=1" 
 
 ID CONTENT 
 ----------- ---------- 
 1 update from tp3 
   1 record(s) selected. 
 
 db2inst2@ibmswg01:~> db2 "select id,content from qrepladm.S_TAB where id=1" 
 
 ID CONTENT 
 ----------- ---------- 
 1 update from tp3 
   1 record(s) selected. 
  
 db2inst3@ibmswg01:~> db2 "select id,content from qrepladm.S_TAB where id=1" 
 
 ID CONTENT 
 ----------- ---------- 
 1 update from tp3 
   1 record(s) selected. 

最后执行数据更新的是 TP3 数据库,因此在所有三点上看到的结果就是 TP3 所更新的数据。

结束语

本文主要介绍了对等 Q 复制的相关概念以及通过复制中心实现的复制配置操作。希望读者对三点之间对等 Q 复制有个基础的了解。 有兴趣的读者也可以采用命令行的方式来实现上述的 Q 复制场景。

Tags:三点 之间 对等

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接