实时数据引擎系列(四): 关于 Oracle 与 Oracle CDC

实时数据引擎系列(四): 关于 Oracle 与 Oracle CDC
最新回答
南故归

2026-10-25 09:22:36

Oracle 与 Oracle CDC 的详解

Oracle 的 CDC(Change Data Capture,实时数据变更获取)实现相对复杂,这主要源于 Oracle 作为商业数据库,并未计划将其内部变更接口暴露给第三方用户。这种闭源和无接口的策略,使得开发者在实现 Oracle CDC 时面临巨大挑战。尽管如此,为了满足市场需求,开发者们依然通过不同途径实现了 Oracle CDC。

一、Oracle CDC 的主要实现方式

  1. Logminer

    简介:Logminer 是 Oracle 官方提供的一个日志分析工具,可以将 Oracle 的内部日志解析成事件输出。这是目前超过 99% 的开源工具集成的方案,集成简单但问题较多。

    优势:作为官方工具,Logminer 的兼容性较好。

    劣势:

    性能问题:Logminer 运行在 Oracle 内部,且运行在日志落地之后,会消耗数据库的算力。Oracle 对 Logminer 做了资源限制,每个 Logminer 进程的资源消耗不能超过 1 个 CPU 核心,导致日志解析速度受限。

    政策不确定性:Logminer 的 "Continuous Mining" 模式在 Oracle 12 版本被标记为弃用,并在 19 版本去除,增加了使用风险。

  2. XStream

    简介:XStream 是 Oracle 内部接口,将事件变更通过内存流池共享出去。这是效率较高的方式,但有严格的 License 限制。

    优势:去除了日志落地与解析的环节,效率较高。

    劣势:使用方需要购买 OGG(Oracle GoldenGate)的 License 才能合法使用,成本高昂。

  3. 裸日志解析

    简介:直接根据 Oracle 的 redo log 落盘文件反向解析出事件。

    优势:

    性能释放:解析不再依赖 Oracle 数据库的算力。

    无 License 问题。

    劣势:

    工程量巨大:Oracle 的日志格式没有文档可查,需要大量尝试和猜测,同时需要面对 Oracle 版本升级带来的格式变动风险。

    技术难度高:需要深厚的 Oracle 技术和逆向工程能力。

二、Oracle CDC 实现中的通用问题

  • 事务日志的复杂性:Oracle 的事务日志中会出现 COMMIT + ROLLBACK 并存的情况,以及无效提交、无效回滚等特殊日志,增加了处理难度。
  • 特殊数据类型:如 CLOBS、BLOBS 在日志里没有原始数据,需要特殊处理。

三、TAPDATA 的 Oracle CDC 解法

TAPDATA 在实现 Oracle CDC 时,提供了多种方案以满足不同用户的需求:

  • 默认 Logminer 解析模式:适用于数据库增量小于 1w 每秒的情况,提供了开箱即用的能力。
  • XStream 集成方式:适用于数据库增量较大的土豪用户,但需要客户有 OGG 的授权许可。
  • 并发 Logminer 解析:对于一般用户,提供了基于并发 Logminer 解析的第二种实现方式,可以在不做任何部署修改的情况下,提供 N(并发数)倍的增量事件捕获能力。
  • 裸日志解析方案:通过部署在数据库的代理进程,将日志文件传输到引擎所在的机器上做解析,单核性能可以达到 30 倍 Logminer 的解析速度。

四、开源与闭源的讨论

对于商业公司而言,开源解析能力可能有助于获得更多关注度和用户反馈,但也可能面临技术泄露和竞争压力。闭源则能保持技术竞争力,但可能限制用户的使用和定制。因此,公司需要根据自身情况和市场需求做出权衡。

综上所述,Oracle CDC 的实现方式多种多样,每种方式都有其优势和劣势。在选择具体方案时,需要根据实际需求和资源情况进行综合考虑。