首页/数据/数据工程与 ETL 速查/Oracle CDC:LogMiner 与补充日志
CDC 与同步53 条

Oracle CDC:LogMiner 与补充日志

Oracle 的日志型 CDC 依赖 redo 日志解析:常用路径是数据库内置的 LogMiner 与商业产品 GoldenGate,Debezium、Flink CDC 的 Oracle 连接器也多以 LogMiner 为基础。前置条件是开启归档与补充日志(supplemental logging),并按需授予采集账号相关权限。

Oracle CDC 怎么做

Oracle 没有 MySQL 那样的通用 binlog 订阅接口,日志型 CDC 依赖 redo 日志与归档日志解析。常见路径有三条:数据库内置的 LogMiner(PL/SQL 包 DBMS_LOGMNR,可自己写解析程序)、商业复制产品 GoldenGate,以及第三方工具的连接器——Debezium 与 Flink CDC 的 Oracle 连接器大多也以 LogMiner 为基础。前置条件是要开启归档日志与补充日志(supplemental logging),并为采集账号授予相应权限,否则 UPDATE 与 DELETE 事件取不到旧值或直接报错。

基本信息

日志路径redo 与归档日志(归档必须先开启)
解析工具LogMiner(内置)、GoldenGate(商业)、第三方连接器
补充日志UPDATE 与 DELETE 取旧值的前提,可按库或按表开启
权限采集账号需字典访问与 LogMiner 相关权限,按版本核对
回溯范围由 redo 与归档保留窗口决定

典型使用场景

  • 把 Oracle 交易库实时同步到数仓或 Kafka 供下游分析
  • 异构迁移:Oracle 到分布式数据库或大数据平台的持续复制
  • 准实时明细入仓:按表开启补充日志后解析变更事件
  • 稽核与审计:从日志解析变更轨迹,核对谁在什么时候改了什么
  • 故障回溯:结合归档日志补齐中断期间的变更

补充日志检查与开启

补充日志检查与开启
-- 数据库级补充日志(最小补充日志)
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

-- 表级:记录所有列的补充日志,保证 UPDATE 前后值都可用
ALTER TABLE app.orders ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

-- 确认归档模式与补充日志状态
SELECT log_mode, supplemental_log_data_min FROM v$database;
SELECT log_group_name, table_name FROM dba_log_groups WHERE table_name = 'ORDERS';

三条路径对照

路径性质特点适用
LogMiner数据库内置需自行开发解析与位点管理可控性强、想自研的团队
GoldenGate商业产品功能完善,许可成本高对稳定性要求高的企业
Debezium 连接器开源依赖 LogMiner,配置较复杂已有 Kafka 生态的团队
Flink CDC 连接器开源与 Flink 作业一体,便于加工流批一体加工场景
补充日志会明显增大 redo 体积:按表开启并评估存储与日志写入压力,避免为了同步而影响生产库的日志切换频率。
redo 与归档的保留窗口决定可回溯范围:保留窗口短于故障恢复所需时间时,中断稍久就只能做全量重新初始化。
Oracle 版本之间补充日志与权限细节有差异:切换采集账号或升级数据库前,用测试库先验证一遍解析结果,特别是 UPDATE 的旧值是否完整。

易错点

  • 不开补充日志直接接 CDC,UPDATE 事件缺列值或连接器直接报错,问题往往在切换生产时才暴露
  • 归档未开启或归档空间写满,采集中断后无法从日志续读
  • 补充日志按库全开而非按表开启,redo 体积暴涨,反过来影响生产库
  • 采集账号权限按文档一次配好就长期不改,数据库升级后权限模型变化导致采集中断

数据来源与参考

  • Oracle 官方文档(Using LogMiner / Supplemental Logging)
  • Debezium 官方文档(Oracle Connector 前置条件)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌