IBM DB2 Q 復制是一種高性能的數據庫複製技術,利用 WebSphere MQ 作為傳輸層,以壓縮消息形式在網絡間高效移動數據。本文詳細記錄在單機環境下模擬雙遠程數據庫之間的單向(One-way/Unidirectional)Q 復制配置過程,涵蓋 WebSphere MQ 隊列管理器、隊列、通道的創建,DB2 控制表的建立,Q Capture/Q Apply 程序的設置,以及復制隊列映射與 Q 訂閱的配置。所有操作基於 DB2 Express-C V9.5.2 和 WebSphere MQ V6.0 在 Windows XP (VMware Fusion) 環境下完成,旨在為生產環境部署提供可參考的完整步驟。
XUJM.EMPLOYEE 映射至目標表 XUJM.TGT_EMPLOYEEcrtmqm SRC_QM
crtmqm TGT_QM
strmqm SRC_QM
strmqm TGT_QM
runmqsc SRC_QM
define qlocal('ADMINQ') DEFPSIST(YES)
define ql('RESTARTQ') defpsist(YES)
define QL('TGT_QM') USAGE(XMITQ) DEFPSIST(YES)
define qremote('SENDQ') RNAME('RECVQ') RQMNAME('TGT_QM') XMITQ('TGT_QM') DEFPSIST(YES)
runmqsc TGT_QM
define ql('recvq') defpsist(yes)
DEFINE QLOCAL('SRC_QM') USAGE(XMITQ) DEFPSIST(YES)
DEFINE QREMOTE('ADMINQ') RNAME('ADMINQ') RQMNAME('SRC_QM') XMITQ('SRC_QM') DEFPSIST(YES)
DEFINE QMODEL('IBMQREP.SPILL.MODELQ') DEFSOPT(SHARED) MSGDLVSQ(FIFO) DEFTYPE(PERMDYN)
源端發送通道 + 目標端接收通道:
runmqsc SRC_QM
DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(SDR) TRPTYPE(TCP) CONNAME ('172.16.157.128(1450)') XMITQ('TGT_QM') DISCINT(0)
DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(RCVR) TRPTYPE(TCP)
目標端發送通道 + 源端接收通道:
runmqsc TGT_QM
DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('172.16.157.128(1451)') XMITQ('SRC_QM') DISCINT(0)
DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(RCVR) TRPTYPE(TCP)
QCASN3ASN.IBMQREP_CAPPARMS、IBMQREP_SENDQUEUES、IBMQREP_SUBS 等核心控制表INSERT INTO ASN.IBMQREP_CAPPARMS (qmgr, restartq, adminq, ...) VALUES ('SRC_QM', 'RESTARTQ', 'ADMINQ', ...)QAASN2ASN.IBMQREP_APPLYPARMS、IBMQREP_RECVQUEUES、IBMQREP_TARGETS 等控制表INSERT INTO ASN.IBMQREP_APPLYPARMS (qmgr, ...) VALUES ('TGT_QM', ...)INSERT INTO ASN.IBMQREP_SENDQUEUES
(pubqmapname, sendq, recvq, apply_server, apply_schema, ...)
VALUES ('EMPLOYEE_QMAP', 'SENDQ', 'recvq', 'TARGET', 'ASN', ...);
INSERT INTO ASN.IBMQREP_RECVQUEUES
(repqmapname, recvq, sendq, adminq, capture_server, capture_schema, ...)
VALUES ('EMPLOYEE_QMAP', 'recvq', 'SENDQ', 'ADMINQ', 'SAMPLE', 'ASN', ...);
ALTER TABLE XUJM.EMPLOYEE DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
INSERT INTO ASN.IBMQREP_SUBS
(subname, source_owner, source_name, sendq, target_server, target_owner, target_name, ...)
VALUES ('EMPLOYEE0001', 'XUJM', 'EMPLOYEE', 'SENDQ', 'TARGET', 'XUJM', 'TGT_EMPLOYEE', ...);
並為每個列插入 IBMQREP_SRC_COLS 記錄,指定主鍵 EMPNO。
TSEMPLOYEE 及表 XUJM.TGT_EMPLOYEE(結構與源表一致)IBMQREP_TARGETS 與 IBMQREP_TRG_COLS,完成列級映射runmqlsr -t tcp -m SRC_QM -p 1451
runmqlsr -t tcp -m TGT_QM -p 1450
runmqsc SRC_QM
start channel (SRC_QM.TO.TGT_QM)
runmqsc TGT_QM
start channel (TGT_QM.TO.SRC_QM)
DISPLAY CHSTATUS (TGT_QM.TO.SRC_QM)
# 顯示 STATUS(RUNNING) 即為成功
RNAME 對應對端本地隊列名,RQMNAME 對應對端隊列管理器名,XMITQ 指向本地傳輸隊列。ARCH_LEVEL、COMPATIBILITY 等版本參數。ALTER TABLE ... DATA CAPTURE CHANGES。RUNNING 且 SUBSTATE(MQGET) 表示傳輸層已就緒,後續可啟動 Q Capture/Q Apply 程序進行實際數據同步。生產環境部署時,建議:
IBMQREP_CAPMON、IBMQREP_APPLYMON 等監控表的延遲指標。