文档信息
| 项目 |
内容 |
| 文档版本 |
V1.0 |
| 修订日期 |
2025-12-04 |
| 适用范围 |
OGG FOR DB2(LUW/z/OS/i 系列)CDC同步 |
| 核心目标 |
明确DB2不同版本对DML全列捕获的支持性,规范OGG配置,解决全列信息缺失问题 |
| 适用DB2版本 |
LUW v8+/z/OS v9+/for i V5R4+ |
| 适用OGG版本 |
11gR2(11.2.1+)/12c(12.1.2+)/21c |
一、前言
1.1 文档目的
本文档系统梳理DB2各版本对INSERT/UPDATE/DELETE操作全列信息捕获的支持能力,标准化OGG配置规则,为CDC同步场景中全列数据捕获的实施、版本选型及问题排查提供统一指导,保障数据同步的完整性。
1.2 核心背景
DB2原生日志仅记录DML操作的“增量信息”:INSERT默认记录全列,UPDATE仅记录修改列+主键,DELETE仅记录主键/唯一键。OGG需通过专属参数组合,基于主键定位从表中抓取全列数据,该能力生效依赖“DB2版本+OGG版本+配置参数+权限环境”四者匹配。
1.3 核心概念与术语
| 术语 |
解释 |
| DML全列信息 |
OGG捕获DML操作时,记录该行所有列数据(无论是否修改) |
| DB2 LUW |
DB2 for Linux/Unix/Windows(通用版) |
| DB2 z/OS |
DB2 for z/OS(大型机版) |
| DB2 for i |
DB2 for i(AS/400 小型机版) |
| BEFORE 值 |
UPDATE操作的“更新前值”、DELETE操作的“删除前值” |
| AFTER 值 |
UPDATE/INSERT操作的“更新/插入后值” |
| Trail 文件 |
OGG存储捕获数据的临时文件 |
| Extract 进程 |
OGG源端核心进程,负责从DB2日志捕获DML数据 |
二、技术前置条件
2.1 DB2日志配置(核心)
OGG依赖DB2归档日志实现全列捕获,需按以下步骤开启:
db2 connect to YOUR_DB_NAME user DB2INST1 using YOUR_PWD
db2 update db cfg for YOUR_DB_NAME using LOGARCHMETH1 DISK:/db2_archive_log
db2 update db cfg for YOUR_DB_NAME using LOGRETAIN ON
db2 backup db YOUR_DB_NAME to /tmp/db2_backup
2.2 权限配置
OGG运行用户(如DB2INST1)需具备以下权限,确保日志读取与表数据访问:
db2 grant sysadm on database to user DB2INST1
db2 grant select on sysibm.systables to DB2INST1
db2 grant select on sysibm.syscolumns to DB2INST1
db2 grant access to database partition group ibmdefaultgroup to DB2INST1
2.3 数据对象要求
- 目标表必须包含主键/唯一键:OGG需通过主键定位行数据,才能抓取UPDATE/DELETE全列信息;无主键表即使配置参数,仅能捕获主键/修改列。
- 禁用行压缩(部分版本):DB2 LUW v9.7等早期版本开启行压缩可能导致全列数据抓取乱码,需临时禁用:
db2 ALTER TABLE DB2INST1.T9 COMPRESS NO;
三、版本兼容性矩阵
3.1 DB2 LUW 版本适配
| DB2 LUW 版本 |
INSERT全列 |
UPDATE全列(BEFORE+AFTER) |
DELETE全列 |
配套OGG版本要求 |
关键说明 |
| v9.7 |
✅ 支持 |
✅ 基础支持(偶发列缺失) |
✅ 基础支持(偶发列缺失) |
11gR2(11.2.1.0.0+) |
高并发场景可能丢列,需控制同步压力 |
| v10.1/v10.5 |
✅ 支持 |
✅ 完全支持 |
✅ 完全支持 |
11gR2+/12c/21c |
企业级主流组合,无兼容性问题 |
| v11.1/v11.5 |
✅ 支持 |
✅ 最优支持 |
✅ 最优支持 |
12c(12.2+)/21c |
适配最新特性,无丢列、乱码问题 |
| v9.1/v9.5 |
✅ 支持 |
❌ 不支持 |
❌ 不支持 |
任意版本 |
归档日志机制不完善,无法稳定抓取全列 |
| v8 及以下 |
✅ 支持 |
❌ 不支持 |
❌ 不支持 |
任意版本 |
无OGG官方适配,日志架构受限 |
3.2 DB2 z/OS 版本适配
| DB2 z/OS 版本 |
INSERT全列 |
UPDATE全列(BEFORE+AFTER) |
DELETE全列 |
配套OGG版本要求 |
关键说明 |
| v10/v11/v12 |
✅ 支持 |
✅ 完全支持 |
✅ 完全支持 |
12c(12.1.3+)/21c |
需配置TRANLOGOPTIONS SUBSYSTEM专属参数 |
| v9 及以下 |
✅ 支持 |
❌ 不支持 |
❌ 不支持 |
任意版本 |
日志架构无全列抓取能力,OGG无适配逻辑 |
3.3 DB2 for i 版本适配
| DB2 for i 版本 |
INSERT全列 |
UPDATE全列(BEFORE+AFTER) |
DELETE全列 |
配套OGG版本要求 |
关键说明 |
| V7R1/V7R2/V7R3 |
✅ 支持 |
✅ 支持(需补丁) |
✅ 支持(需补丁) |
12.2.0.2+ |
需安装IBM PTF补丁(SI72891/SI73187) |
| V7R4/V7R5 |
✅ 支持 |
✅ 完全支持 |
✅ 完全支持 |
12.2+/21c |
无需额外补丁,原生适配全列捕获 |
| V6R1/V5R4 |
✅ 支持 |
❌ 不支持 |
❌ 不支持 |
任意版本 |
表数据访问限制,无法读取更新/删除前全列 |
3.4 不适配版本组合汇总
| 不适配组合 |
不支持的DML全列类型 |
核心原因 |
| DB2 LUW 9.1/9.5 + 任意OGG版本 |
UPDATE/DELETE全列 |
DB2归档日志机制不完善,OGG无法稳定抓取全列数据 |
| DB2 z/OS 9 及以下 + 任意OGG版本 |
UPDATE/DELETE全列 |
DB2日志架构无全列抓取能力,OGG无对应适配逻辑 |
| DB2 for i V6R1/V5R4 + 任意OGG版本 |
UPDATE/DELETE全列 |
DB2表数据访问权限限制,无法读取更新/删除前行数据 |
| 任意DB2版本 + OGG 11gR1及以下 |
UPDATE/DELETE全列 |
OGG无GETUPDATEBEFORES/NOCOMPRESSDELETES核心参数,无法实现全列捕获 |
| DB2 for i V7R1 + OGG 12.2.0.1及以下 |
UPDATE/DELETE全列 |
缺少IBM PTF补丁,OGG无法正常抓取全列数据 |
四、OGG配置规范
4.1 核心参数说明
| 参数 |
作用范围 |
核心功能 |
适用DML操作 |
| LOGALLCOLS |
全局/表级 |
强制UPDATE的BEFORE/AFTER段、DELETE段包含全列(默认仅捕获修改列/主键) |
UPDATE/DELETE |
| GETUPDATEBEFORES |
全局/表级 |
开启UPDATE操作“更新前值(BEFORE)”捕获(默认仅抓AFTER值) |
UPDATE |
| NOCOMPRESSDELETES |
全局/表级 |
强制DELETE操作捕获全列(默认仅抓主键/唯一键) |
DELETE |
| TRANLOGOPTIONS |
全局 |
DB2日志提取专属配置(实例、分区、日志保留等) |
所有DML |
| EXTTRAIL |
全局 |
指定Trail文件路径与属性,存储捕获的DML全列数据 |
所有DML |
| COMPRESSION ON |
全局 |
开启Trail文件压缩,抵消全列捕获导致的文件体积增大问题 |
所有DML |
4.2 基础配置模板(通用版)
配置文件路径:OGG安装目录 /dirprm/EDB2.prm
EXTRACT EDB2
SETENV (DB2INSTANCE = "DB2INST1")
SETENV (DB2DBDFT = "YOUR_DB_NAME")
SETENV (NLS_LANG = "UTF8")
MEMORYOPTIONS CACHESIZE 1G
CHECKPOINTSECS 30
USERID DB2INST1, ENCRYPTED PASSWORD "加密密码" ENCRYPTKEY default
EXTTRAIL ./dirdat/tt, COMPRESSION ON, MEGABYTES 200
TRANLOGOPTIONS
DB2INSTANCE DB2INST1,
MEMBER 0,
LOGRETENTION YES
GETUPDATEBEFORES
NOCOMPRESSDELETES
TABLE DB2INST1.T9, LOGALLCOLS;
4.3 分场景配置示例
场景1:仅捕获指定表DELETE全列
EXTRACT EDB2
SETENV (DB2INSTANCE = "DB2INST1")
SETENV (DB2DBDFT = "YOUR_DB_NAME")
USERID DB2INST1, PASSWORD "YOUR_PWD"
EXTTRAIL ./dirdat/tt, COMPRESSION ON
TRANLOGOPTIONS DB2INSTANCE DB2INST1, LOGRETENTION YES
-- 仅对T9表配置DELETE全列参数
TABLE DB2INST1.T9, LOGALLCOLS, NOCOMPRESSDELETES;
场景2:捕获指定表UPDATE全列(BEFORE+AFTER)+ DELETE全列
EXTRACT EDB2
SETENV (DB2INSTANCE = "DB2INST1")
SETENV (DB2DBDFT = "YOUR_DB_NAME")
USERID DB2INST1, PASSWORD "YOUR_PWD"
EXTTRAIL ./dirdat/tt, COMPRESSION ON
TRANLOGOPTIONS DB2INSTANCE DB2INST1, LOGRETENTION YES
-- 表级精准配置全量全列捕获
TABLE DB2INST1.T9, LOGALLCOLS, GETUPDATEBEFORES, NOCOMPRESSDELETES;
场景3:DB2 z/OS 专属配置
EXTRACT EDB2Z
SETENV (DB2INSTANCE = "DB2ZINST")
SETENV (DB2DBDFT = "YOUR_ZOS_DB")
USERID DB2ZINST, PASSWORD "YOUR_PWD"
EXTTRAIL ./dirdat/zz, COMPRESSION ON
TRANLOGOPTIONS
SUBSYSTEM DB2Z, -- z/OS 子系统名
LOGSTREAMID 0001, -- 日志流ID
LOGRETENTION YES
GETUPDATEBEFORES
NOCOMPRESSDELETES
TABLE DB2ZINST.T9, LOGALLCOLS;
4.4 配置生效步骤
- 将配置文件保存至OGG安装目录
/dirprm 文件夹; - 启动GGSCI工具,执行以下命令完成进程创建与启动:
cd /ogg_home
./ggsci
GGSCI> ADD EXTRACT EDB2, TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL ./dirdat/tt, EXTRACT EDB2
GGSCI> START EDB2
GGSCI> INFO EDB2
GGSCI> VIEW REPORT EDB2
五、全列捕获验证方法
5.1 业务操作验证
- 在DB2中执行测试DML操作,生成全列捕获数据:
db2 connect to YOUR_DB_NAME user DB2INST1 using YOUR_PWD
INSERT INTO DB2INST1.T9 VALUES (1, ' 测试插入 ', 'CODE001', ' 插入备注 ', '2025-12-04');
UPDATE DB2INST1.T9 SET NAME = ' 测试更新 ', CODE = 'CODE002' WHERE ID = 1;
DELETE FROM DB2INST1.T9 WHERE ID = 1;
db2 commit;
- 在GGSCI中查看进程统计,验证全列捕获列数:
GGSCI> STATS EDB2, TABLE DB2INST1.T9
- 生效标志:UPDATE/DELETE操作的“Columns Captured”数量等于表的总列数(而非仅主键/修改列)。
5.2 Trail文件解析验证(logdump工具)
通过OGG自带的logdump工具解析Trail文件,直观校验全列信息:
cd /ogg_home
./logdump
LOGDUMP> OPEN ./dirdat/tt000001
LOGDUMP> DETAIL ON
LOGDUMP> FIND RECORD TYPE UPDATE
LOGDUMP> FIND RECORD TYPE DELETE
LOGDUMP> NEXT
六、生产环境最佳实践
- 版本选型:优先选择“DB2 LUW 11.5 + OGG 21c”组合,稳定性与性能最优;DB2 z/OS推荐v12+搭配OGG 12c+。
- 参数管控:仅对核心业务表(需数据回溯、一致性校验)启用全列捕获参数,非必要表保留默认配置,降低Trail文件体积与DB2压力。
- 安全配置:生产环境必须使用加密密码,通过以下命令生成:
GGSCI> ENCRYPT PASSWORD 你的明文密码 ENCRYPTKEY default
将生成的加密字符串替换配置中的“加密密码”。 - 运维监控:定期通过
INFO EDB2 MONITOR EXTRACT EDB2命令检查进程状态;监控Trail文件大小,通过PURGEEXTTRAIL命令清理过期文件。 - 补丁管理:DB2 for i需及时安装IBM PTF补丁,DB2 z/OS需适配OGG专属版本与子系统配置。
七、常见问题与排查
| 问题现象 |
核心排查方向 |
解决方案 |
| DELETE仅捕获主键,无全列 |
1. 未配置NOCOMPRESSDELETES参数;2. 表无主键/唯一键;3. DB2/OGG版本不适配 |
1. 补充NOCOMPRESSDELETES参数;2. 为表添加主键;3. 核查版本适配性,必要时升级 |
| UPDATE无BEFORE值 |
1. 未配置GETUPDATEBEFORES参数;2. OGG版本<11gR2;3. DB2归档日志未开启 |
1. 新增GETUPDATEBEFORES参数;2. 升级OGG至11gR2+;3. 重新配置归档日志并备份 |
| Trail文件体积过大 |
1. 非必要表开启全列捕获;2. 未开启COMPRESSION ON;3. 单文件分片过大 |
1. 仅对核心表启用全列捕获;2. 配置EXTTRAIL时添加COMPRESSION ON;3. 调整MEGABYTES参数(如100) |
| 全列数据存在乱码 |
1. 字符集配置不一致;2. DB2表开启行压缩;3. 补丁未安装(DB2 for i) |
1. 统一NLS_LANG为UTF8;2. 禁用表行压缩;3. 安装对应PTF补丁 |
八、附录
附录1:核心参数速查表
| 业务需求 |
必配参数组合 |
| UPDATE全列(BEFORE+AFTER) |
LOGALLCOLS + GETUPDATEBEFORES |
| DELETE全列 |
LOGALLCOLS + NOCOMPRESSDELETES |
| INSERT+UPDATE+DELETE全列 |
LOGALLCOLS + GETUPDATEBEFORES + NOCOMPRESSDELETES |
附录2:常用命令参考
| 操作类型 |
命令示例 |
| 进程管理 |
ADD EXTRACT EDB2, TRANLOG, BEGIN NOW;START EDB2;STOP EDB2;INFO EDB2 |
| 配置验证 |
VIEW REPORT EDB2;REFRESH EXTRACT EDB2 |
| 统计与监控 |
STATS EDB2, TABLE DB2INST1.T9;MONITOR EXTRACT EDB2 |
| Trail文件管理 |
ADD EXTTRAIL ./dirdat/tt, EXTRACT EDB2;PURGEEXTTRAIL ./dirdat/tt000001 |
| 密码加密 |
ENCRYPT PASSWORD YOUR_PWD ENCRYPTKEY default |
文档更新时间: 2025-12-12 06:09 作者:阿力