跳到主要内容

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 = NO
  • Rollforward 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 waiting
  • AdminThread ... is resting
  • PruneThread ... is resting
  • WorkerThread ... is doing work
  • LogrdThread ... 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 = A
  • CD_OWNER = ASNCDC
  • CD_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