程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 三點之間的對等(peer-to-peer)Q 復制配置

三點之間的對等(peer-to-peer)Q 復制配置

編輯:DB2教程

三點之間的對等(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 復制場景。

-
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved