DB2 数据库环境准备
数据库级前置条件
每个 DB2 源库都必须先满足以下条件,否则即使配置表级 CDC,也无法捕获变更数据。
启用归档日志
ASN Capture 要求 DB2 数据库开启 archival logging。
db2 update db cfg for DB_NAME using LOGARCHMETH1 DISK:/database/logs/
db2 backup db DB_NAME to /dev/null
db2 restart db DB_NAME
验证:
db2 get db cfg for DB_NAME | egrep -i "LOGARCHMETH|Backup pending|Rollforward pending"
期望:
LOGARCHMETH1 = DISK:/database/logs/Backup pending = NORollforward pending = NO
编译并安装 ASN 管理 UDF
当前容器已有 Debezium ASN 工具:
cd /asncdctools/src
/opt/ibm/db2/V11.5/samples/c/bldrtn asncdc
cp /asncdctools/src/asncdc /database/config/db2inst1/sqllib/function
安装 UDF:
db2 connect to DB_NAME
db2 -tvmf /asncdctools/src/asncdc_UDF.sql
创建 ASN 控制表
db2 connect to DB_NAME
db2 -tvmf /asncdctools/src/asncdctables.sql
db2 -tvmf /asncdctools/src/asncdcaddremove.sql
当前环境也可以直接运行官方脚本:
cd /asncdctools/src
./dbsetup.sh DB_NAME
注意:dbsetup.sh 会执行绑定、备份、重启、创建 UDF 和控制表、启动 Agent 等操作。数据库已初始化时,请勿重复执行;运行前先检查 ASNCDC schema 是否存在。
启动 ASN Capture Agent
CONNECT TO DB_NAME;
VALUES ASNCDC.ASNCDCSERVICES('start','asncdc');
VALUES ASNCDC.ASNCDCSERVICES('status','asncdc');
进程验证:
ps -ef | grep -i "[a]sncap.*DB_NAME"
状态验证里至少应看到类似线程状态:
HoldLThread ... is waitingAdminThread ... is restingPruneThread ... is restingWorkerThread ... is doing workLogrdThread ... is doing work
如果启动失败并出现 ASN0539E,说明数据库归档日志配置异常,请返回「启用归档日志」一节检查配置。
表级开启 CDC
对每张业务表执行两层操作。
开启 DB2 表自身 data capture
ALTER TABLE SCHEMA_NAME.TABLE_NAME DATA CAPTURE CHANGES;
验证:
SELECT TABSCHEMA, TABNAME, DATACAPTURE
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'SCHEMA_NAME'
AND TABNAME = 'TABLE_NAME';
期望:DATACAPTURE = Y。
加入 ASN capture mode
CALL ASNCDC.ADDTABLE('SCHEMA_NAME', 'TABLE_NAME');
这会创建对应 change-data table:
ASNCDC.CDC_SCHEMA_NAME_TABLE_NAME
例如:
ASNCDC.CDC_DB2INST1_ECOMMERCE_ORDER_EVENT
激活 registration 并重载 Capture
ADDTABLE 后如果 registration 不是 active,需要激活后 reinit。
UPDATE ASNCDC.IBMSNAP_REGISTER
SET STATE = 'A'
WHERE SOURCE_OWNER = 'SCHEMA_NAME'
AND SOURCE_TABLE = 'TABLE_NAME';
COMMIT;
VALUES ASNCDC.ASNCDCSERVICES('reinit','asncdc');
VALUES ASNCDC.ASNCDCSERVICES('status','asncdc');
批量表可以用 IN (...)。
最终验证
验证注册状态
SELECT SOURCE_OWNER, SOURCE_TABLE, CD_OWNER, CD_TABLE, STATE
FROM ASNCDC.IBMSNAP_REGISTER
WHERE SOURCE_OWNER = 'SCHEMA_NAME'
AND SOURCE_TABLE = 'TABLE_NAME';
期望:
STATE = ACD_OWNER = ASNCDCCD_TABLE = CDC_SCHEMA_NAME_TABLE_NAME
验证 Capture trace
SELECT OPERATION, TRACE_TIME, SUBSTR(DESCRIPTION, 1, 240) AS DESCRIPTION
FROM ASNCDC.IBMSNAP_CAPTRACE
ORDER BY TRACE_TIME DESC
FETCH FIRST 20 ROWS ONLY;
期望看到:
capturing changes for "N" registrations
并且目标表不在 stopped/inactive 状态。
验证 change-data table 存在
SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'ASNCDC'
AND TABNAME = 'CDC_SCHEMA_NAME_TABLE_NAME';
当前环境的最短命令模板
在 db2-cdc-remote-debug 容器内:
su - db2inst1
cd /asncdctools/src
./dbsetup.sh DB_NAME
db2 connect to DB_NAME
db2 update db cfg for DB_NAME using LOGARCHMETH1 DISK:/database/logs/
db2 backup db DB_NAME to /dev/null
db2 restart db DB_NAME
db2 connect to DB_NAME
db2 "ALTER TABLE SCHEMA_NAME.TABLE_NAME DATA CAPTURE CHANGES"
db2 "CALL ASNCDC.ADDTABLE('SCHEMA_NAME', 'TABLE_NAME')"
db2 "UPDATE ASNCDC.IBMSNAP_REGISTER SET STATE='A' WHERE SOURCE_OWNER='SCHEMA_NAME' AND SOURCE_TABLE='TABLE_NAME'"
db2 "COMMIT"
db2 "VALUES ASNCDC.ASNCDCSERVICES('start','asncdc')"
db2 "VALUES ASNCDC.ASNCDCSERVICES('reinit','asncdc')"
db2 "VALUES ASNCDC.ASNCDCSERVICES('status','asncdc')"
限制和注意事项
- SQL Replication 不支持
BOOLEAN类型的 CDC;含BOOLEAN的表通常只能 snapshot 或改字段类型。 - 表进入 capture mode 后,对源表做 DDL,需要同步维护对应
ASNCDC.CDC_*change-data table。 - DB2 JDBC 驱动和 license 通常需要单独放进 Flink/Debezium 运行环境。
ADDTABLE会按源表当前结构创建变更数据表;请先确定 schema,再开启 CDC。- 归档日志目录要有空间;否则 Capture 后续可能因为日志归档问题停掉。
部署拓扑差异
| 部署方式 | 必须配置 | 推荐配置 | 限制/风险 | 验证命令 |
|---|---|---|---|---|
| DB2 LUW 单机 | SQL Replication/ASN,UDF,ASN agent,逐表 capture mode | 监控 ASN 延迟、CPU 和 capture table 增长 | capture agent 轮询会增加源库负载 | VALUES ASNCDC.ASNCDCSERVICES('status','asncdc'); |
| HADR/HA | 当前被采集节点需有可用 ASN capture 和 capture table | 故障切换后确认 ASN 服务、capture mode、日志连续性 | 切换后可能需要重新确认或重建 capture 环境;DDL 维护更敏感 | ASN status + 表 capture 状态 |
| 托管 DB2 | 平台需支持 SQL Replication/ASN 相关对象和 UDF | 提前确认是否允许安装 UDF 和访问 capture table | 若不能安装 UDF 或启动 ASN agent,则不满足 Debezium/Flink CDC DB2 前提 | 平台权限检查 + ASN status |