Q Replication 基於 WebSphere MQ (WMQ) 消息隊列,以壓縮消息形式在 DB2 實例間實現低延遲、高吞吐的單向/雙向同步。本文以單向同步 (Source → Target) 為例,覆蓋環境準備、MQ 基礎設施、Q Capture/Q Apply 程序、隊列映射、表訂閱創建全流程,環境:MacBook + VMware Fusion + Windows XP SP3 + WMQ V6.0 + DB2 Express-C V9.5.2。
db2inst1) 具備 DB2 SYSADM、WMQ mqm 群組權限。# 源端
crtmqm -q -d "Source QMgr for QRepl" QM_SRC
strmqm QM_SRC
# 目標端
crtmqm -q -d "Target QMgr for QRepl" QM_TGT
strmqm QM_TGT
# 源端運行 (runmqsc QM_SRC)
DEFINE QLOCAL(QREPL.SEND.Q) REPLACE DESCR('Q Capture -> Q Apply')
DEFINE QLOCAL(QREPL.RECV.Q) REPLACE DESCR('Q Apply -> Q Capture (ACK)')
DEFINE QLOCAL(QREPL.ADMIN.Q) REPLACE DESCR('Control messages')
DEFINE QLOCAL(SYSTEM.DEAD.LETTER.QUEUE) REPLACE
# 目標端運行 (runmqsc QM_TGT)
DEFINE QLOCAL(QREPL.RECV.Q) REPLACE DESCR('Q Capture -> Q Apply')
DEFINE QLOCAL(QREPL.SEND.Q) REPLACE DESCR('Q Apply -> Q Capture (ACK)')
DEFINE QLOCAL(QREPL.ADMIN.Q) REPLACE DESCR('Control messages')
DEFINE QLOCAL(SYSTEM.DEAD.LETTER.QUEUE) REPLACE
# 源端 Sender
DEFINE CHANNEL(QM_SRC.TO.QM_TGT) CHLTYPE(SDR) CONNAME('target_host(1414)') XMITQ(QREPL.SEND.Q)
DEFINE QREMOTE(QREPL.RECV.Q) RNAME(QREPL.RECV.Q) RQMNAME(QM_TGT) XMITQ(QREPL.SEND.Q)
# 目標端 Receiver
DEFINE CHANNEL(QM_SRC.TO.QM_TGT) CHLTYPE(RCVR) TRPTYPE(TCP)
# 啟動通道
runmqsc QM_SRC: START CHANNEL(QM_SRC.TO.QM_TGT)
runmqsc QM_TGT: START CHANNEL(QM_SRC.TO.QM_TGT)
驗證:DISPLAY CHSTATUS(*) 顯示 RUNNING;DISPLAY QSTATUS(QREPL.*) 無錯誤。
# 源/目標均執行
db2 connect to SRC_DB
db2 "CREATE TABLESPACE QREPL_TS MANAGED BY AUTOMATIC STORAGE"
db2 "GRANT USE OF TABLESPACE QREPL_TS TO USER qrepl_user"
db2 connect to TGT_DB
db2 "CREATE TABLESPACE QREPL_TS MANAGED BY AUTOMATIC STORAGE"
db2 "GRANT USE OF TABLESPACE QREPL_TS TO USER qrepl_user"
# 源端
db2 "UPDATE DB CFG FOR SRC_DB USING LOGINDEXBUILD ON"
db2 "UPDATE DB CFG FOR SRC_DB USING LOGRETAIN RECOVERY"
# 目標端 (同步應用端需更大日誌)
db2 "UPDATE DB CFG FOR TGT_DB USING LOGFILSIZ 4096 LOGPRIMARY 20 LOGSECOND 50"
# 使用 Replication Center 或 ASNCLP 腳本
# ASNCLP 示例
asnclp <
asnclp <
將源端發送隊列映射到目標端接收隊列,建立邏輯傳輸通道。
asnclp <
asnclp <
關鍵選項說明:
LOADTYPE REPLACE:首次同步以 LOAD REPLACE 方式全量初始化目標表 (速度最快)。CONFLICT LEVEL NONE:單向同步無衝突檢測,性能最優。SEARCH CONDITION:支持 WHERE 子句過濾行 (如 DEPT='IT')。# 源端
asnqcap capture_server=SRC_DB capture_schema=ASN
# 目標端
asnqapp apply_server=TGT_DB apply_schema=ASN
| 指標 | 監控視圖/命令 | 告警閾值建議 |
|---|---|---|
| 捕獲延遲 (Capture Latency) | SELECT CURRENT TIMESTAMP - MAX(COMMIT_TIME) FROM ASN.IBMQREP_CAPTRACE | > 30 秒 |
| 應用延遲 (Apply Latency) | SELECT CURRENT TIMESTAMP - MAX(SOURCE_COMMIT_TIME) FROM ASN.IBMQREP_APPLYTRACE | > 60 秒 |
| 隊列深度 (Queue Depth) | runmqsc QM_SRC: DISPLAY QSTATUS(QREPL.SEND.Q) CURDEPTH | > 10,000 消息 |
| 錯誤/跳過事務 | SELECT * FROM ASN.IBMQREP_EXCEPTIONS WHERE TIMESTAMP > CURRENT TIMESTAMP - 1 HOUR | 任何非零行 |
| Q Capture/Q Apply 進程存活 | OS 進程檢查 / asnqcap -status / asnqapp -status | 進程消失即告警 |
IBMQREP_SUBS 表 STATE 欄位;查看 IBMQREP_EXCEPTIONS 具體錯誤碼 (如 -204 表不存在、-803 唯一鍵衝突)。AMQERR*.LOG;配置通道心跳 HBINT(300)、自動重連 RCVRYINT(60)。LOGFILSIZ/LOGPRIMARY/LOGSECOND;啟用 INFINITE LOGGING (需 DB2 9.7+)。AUTO_DDL 參數啟用;複雜 DDL (RENAME、DROP COLUMN) 需手動協調。Q Replication 以「MQ 解耦 + 並行適用 + 衝突免檢」三大特性,成為 DB2 異地災備、報表分流、雲遷移同步的首選方案。掌握上述全流程部署與監控體系,即可構建企業級高可用數據分發網絡。