文档信息

项目 内容
文档版本 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归档日志实现全列捕获,需按以下步骤开启:

-- 1. 连接目标数据库
db2 connect to YOUR_DB_NAME user DB2INST1 using YOUR_PWD

-- 2. 开启归档日志
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

-- 3. 开启后立即备份数据库(日志生效必需)
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 数据对象要求

  1. 目标表必须包含主键/唯一键:OGG需通过主键定位行数据,才能抓取UPDATE/DELETE全列信息;无主键表即使配置参数,仅能捕获主键/修改列。
  2. 禁用行压缩(部分版本):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

-- ==============================================
-- OGG Extract 配置(DB2 DML全列捕获通用模板)
-- 适配:DB2 LUW 10.5+/OGG 12c+
-- ==============================================
-- 1. 进程定义
EXTRACT EDB2        -- 进程名(E开头,长度≤8字符)

-- 2. DB2环境变量配置
SETENV (DB2INSTANCE = "DB2INST1")       -- 替换为实际DB2实例名
SETENV (DB2DBDFT = "YOUR_DB_NAME")      -- 替换为实际数据库名
SETENV (NLS_LANG = "UTF8")              -- 数据库字符集(按需调整为GBK等)

-- 3. 性能与检查点配置
MEMORYOPTIONS CACHESIZE 1G              -- 进程缓存大小(按需调整:512M/2G)
CHECKPOINTSECS 30                       -- 30秒生成检查点,异常重启快速恢复

-- 4. 认证配置(生产环境推荐加密密码)
USERID DB2INST1, ENCRYPTED PASSWORD "加密密码" ENCRYPTKEY default
-- 测试环境明文密码(不推荐生产使用):
-- USERID DB2INST1, PASSWORD "YOUR_PWD"

-- 5. Trail文件配置(开启压缩降低存储开销)
EXTTRAIL ./dirdat/tt, COMPRESSION ON, MEGABYTES 200

-- 6. DB2日志提取专属配置
TRANLOGOPTIONS 
  DB2INSTANCE DB2INST1,                 -- 与SETENV保持一致
  MEMBER 0,                             -- DPF分区环境需指定成员编号
  LOGRETENTION YES                      -- 保留日志至OGG提取完成,防止提前清理

-- 7. 全局全列捕获参数(按需选择)
GETUPDATEBEFORES                       -- 全局开启UPDATE BEFORE值捕获
NOCOMPRESSDELETES                      -- 全局开启DELETE全列捕获

-- 8. 表级配置(优先级高于全局)
TABLE DB2INST1.T9, LOGALLCOLS;          -- T9表开启全列捕获
-- 多表配置示例:
-- TABLE DB2INST1.T8, LOGALLCOLS;
-- TABLE DB2INST1.T7, LOGALLCOLS, GETUPDATEBEFORES, NOCOMPRESSDELETES;

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 配置生效步骤

  1. 将配置文件保存至OGG安装目录 /dirprm 文件夹;
  2. 启动GGSCI工具,执行以下命令完成进程创建与启动:
# 进入OGG安装目录
cd /ogg_home

# 启动GGSCI工具
./ggsci

# 1. 创建Extract进程(基于事务日志,从当前时间开始捕获)
GGSCI> ADD EXTRACT EDB2, TRANLOG, BEGIN NOW

# 2. 关联Trail文件(与配置中EXTTRAIL路径一致)
GGSCI> ADD EXTTRAIL ./dirdat/tt, EXTRACT EDB2

# 3. 启动Extract进程
GGSCI> START EDB2

# 4. 验证进程状态(正常运行标志:RUNNING)
GGSCI> INFO EDB2

# 5. 查看进程报告(排查配置或运行异常)
GGSCI> VIEW REPORT EDB2

五、全列捕获验证方法

5.1 业务操作验证

  1. 在DB2中执行测试DML操作,生成全列捕获数据:

-- 连接DB2数据库
db2 connect to YOUR_DB_NAME user DB2INST1 using YOUR_PWD

-- 1. 插入测试数据
INSERT INTO DB2INST1.T9 VALUES (1, ' 测试插入 ', 'CODE001', ' 插入备注 ', '2025-12-04');

-- 2. 更新测试数据(修改非主键列)
UPDATE DB2INST1.T9 SET NAME = ' 测试更新 ', CODE = 'CODE002' WHERE ID = 1;

-- 3. 删除测试数据
DELETE FROM DB2INST1.T9 WHERE ID = 1;

-- 提交事务
db2 commit;
  1. 在GGSCI中查看进程统计,验证全列捕获列数:
GGSCI> STATS EDB2, TABLE DB2INST1.T9
  • 生效标志:UPDATE/DELETE操作的“Columns Captured”数量等于表的总列数(而非仅主键/修改列)。

5.2 Trail文件解析验证(logdump工具)

通过OGG自带的logdump工具解析Trail文件,直观校验全列信息:

# 进入OGG安装目录
cd /ogg_home

# 启动logdump工具
./logdump

# 1. 打开Trail文件(替换为实际生成的文件,如tt000001)
LOGDUMP> OPEN ./dirdat/tt000001

# 2. 开启详情显示模式
LOGDUMP> DETAIL ON

# 3. 查找指定DML操作记录
LOGDUMP> FIND RECORD TYPE UPDATE  # 查找UPDATE记录
LOGDUMP> FIND RECORD TYPE DELETE  # 查找DELETE记录

# 4. 查看记录详情(生效标志:显示表所有列的名称和去空格后的值)
LOGDUMP> NEXT

六、生产环境最佳实践

  1. 版本选型:优先选择“DB2 LUW 11.5 + OGG 21c”组合,稳定性与性能最优;DB2 z/OS推荐v12+搭配OGG 12c+。
  2. 参数管控:仅对核心业务表(需数据回溯、一致性校验)启用全列捕获参数,非必要表保留默认配置,降低Trail文件体积与DB2压力。
  3. 安全配置:生产环境必须使用加密密码,通过以下命令生成:
    GGSCI> ENCRYPT PASSWORD 你的明文密码 ENCRYPTKEY default
    将生成的加密字符串替换配置中的“加密密码”。
  4. 运维监控:定期通过INFO EDB2 MONITOR EXTRACT EDB2命令检查进程状态;监控Trail文件大小,通过PURGEEXTTRAIL命令清理过期文件。
  5. 补丁管理: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   作者:阿力