本文为技术白皮书Oracle GoldenGate 优势的翻译及阅读笔记。以下注释中GoldenGate为OGG。
副标题为:Oracle 数据库的变更数据捕获 (CDC) 技术比较。版本为July, 2021, Version 2.1。
Oracle GoldenGate 被客户和分析师公认为功能最齐全、性能最高、最值得信赖 的数据集成和数据库复制 解决方案。作为一种经过验证 的异构 解决方案,它与数百种非 Oracle 数据库、数据存储和云的组合集成。对于 Oracle 数据库,GoldenGate 是唯一可扩展、完整且完全支持的解决方案。用于从 Oracle 数据库捕获数据事件的其他框架和工具不完整、不可扩展和/或不受支持。例如,LogMiner 是一个功能有限的单线程诊断 API。依赖于 LogMiner API 的第三方数据集成技术无法与 Oracle GoldenGate 相媲美,无法与 Oracle 数据库一起使用。
# 性能最高指低开销,高实时性;经过验证与唯一表示产品成熟度,和丰富的案例
异构支持的丰富性见下图
本文的重点和目的是解释从 Oracle 数据库捕获数据事件的选项、GoldenGate 如何适应以及为什么它可能是您的最佳选择。
Oracle GoldenGate
GoldenGate 是一家成立于 20 世纪 90 年代的旧金山初创公司,其最初的目的是为通过 Tandem NonStop 数据库运行的联网 ATM/自动取款机提供业务连续性和数据高可用性。
# 初衷并非用于数据集成
图 1:Oracle GoldenGate 平台功能
如今,Oracle GoldenGate 已扩展成为一个成熟的集成和分析功能平台,可为 Oracle 和非 Oracle 数据源提供服务。保证交易交付的可靠性使 GoldenGate 成为提供 Oracle MAA"白金级"服务级别的核心技术。这种可靠性扩展到非 Oracle 数据库,例如 NonStop、SQL Server、DB2 iSeries、大型机和其他支持的数据存储。全球数以千计的银行、零售商、电信、医疗保健公司等在 Oracle GoldenGate 的可靠基础上运行其运营数据平台。
# MAA白金级依赖OGG提供0切换时间,不过这种需求非常少,大部分还是黄金级,即用ADG。
GoldenGate 是一个实时数据复制平台,可以检测数据事件并以极低的延迟通过网络进行路由。 GoldenGate 技术用于操作数据库的地理分片、低停机时间数据迁移、多活动(在线)数据存储、实时数据提取到云、数据湖和数据仓库等。自 2015 年以来,GoldenGate 越来越关注多语言大数据和 noSQL 数据有效负载,并且已经完全重构为本机微服务"即服务"部署。
# 实时性对于业务非常重要。OGG从传统关系型数据扩展到支持大数据。

图 2:Oracle GoldenGate 平台。逻辑架构和关键组件
# 在CVC-GoldenGate-Overall中找到一个类似的图,如下:
2018 年,GoldenGate 平台增加了数据管道和流分析功能,并配备了强大的复杂事件处理 (CEP) 核心引擎,该引擎可扩展到每秒数十亿个事件,同时将有序数据处理保持在纳秒级。该事件引擎可以使用非常强大的语义进行转换或分析,并在开源 Apache Spark 上运行以进行大规模并行处理 (MPP)。
凭借这些新功能,GoldenGate 可以直接向数据消费者提供高价值数据产品。过去,GoldenGate 主要用于向数据管道或其他数据产品传送低延迟原始数据。如今,GoldenGate 可以推送原始数据事件,并提供高价值的数据产品。
GoldenGate 的工作原理
从本质上讲,GoldenGate CDC 功能用于检测和传输数据事件。数据事件通常包括数据库 DML(数据操作语言)和 DDL(数据定义语言) 。在 Oracle 数据库上,GoldenGate 还可以检测和传输过程事件,这在保持数据库同步时很有用。 GoldenGate 从一开始就被设计为值得信赖的数据事件提供商,并且可以用于 MAA(最大可用性架构)用例,以及任务关键型的 DW(数据仓库)、数据湖和数据流(例如基于 Kafka)场景。

图 3:Oracle GoldenGate 中的变化检测和传播
# 过程事件指执行存储过程或函数引发的DML和DDL
对于Oracle数据库,需要解释一下Classic Capture和Integrated Capture的区别。简单来说,Integrated Capture更推荐,比Classic Capture限制更少(尽管其也有限制),不直接访问Redo Log,而是通过数据库进程(源端为ora_ms_xxx,即mining server,目标端为ora_as_xxx,即applying server)。由于无需直接直接访问redo log,因此OGG 抽取和复制进程可以部署在Oracle数据库服务器之外。
两种模式的比较参考官方文档。
GoldenGate 交易剖析
当数据库日志事件被捕获时,它们会被转换成名为 Trail 的 GoldenGate 规范分类账。所有受支持的源/平台的数百种组合的数据事件日志都被转换为这种单一的规范 Trail 格式 。它是通过 GG 分发微服务分发的 Trail。每个 Trail 可能有一个或多个"路径",并且 Trail 消费者可以发起自己对路径的访问,或者可以配置 GoldenGate 将 Trail 推送到下游接收器微服务中。

图 4:GoldenGate 事务剖析,在分布式架构中保留 ACID 属性
GoldenGate 能够感知所有源操作,因为它们会影响数据库日志,并且每种不同类型的数据库处理操作的方式都不同。一般来说,一旦数据事件在源系统上提交,GoldenGate 就会发出数据事件。在数据库系统中,许多操作可以组合在一次提交中 。事实上,在一些长期运行的事务中,数百万个对象可能会作为单个事务的一部分被修改,而这个事务需要花费数小时才能完成,并且还会与数千个较小的未提交操作交织在一起。当这些事务在网络中移动时,GoldenGate 会将它们分组、隔离并保持它们的一致性。
Oracle 数据库中检测事件的选项
多年来,Oracle 数据库已经拥有许多可用于变更数据捕获 (CDC) 的 API。如今,仍有少数技术仍然是 Oracle 生态系统的战略组成部分:
-
数据库触发器 是存储的 PL/SQL 块,它可能与表相关联,并在发生 INSERT、UPDATE 或 DELETE 等 DML 语句时执行。使用触发器来检测事件需要对模式和应用程序有详细的了解,这容易导致员工流失和文档记录不善。这种高度侵入 性的策略既不完整,又会产生大量的运行时开销。尽管如此,许多 ETL 供应商仍然支持使用带有数据库触发器的 CDC。 (文档)
-
Oracle LogMiner 是 Oracle 数据库的一个组件,它使用户能够通过 SQL 界面查询在线和存档的重做日志文件。 LogMiner 是许多 ETL 和复制供应商的热门选择,因为它是数据库的 API,可以免费使用 ,无需任何额外的许可。激活 LogMinor 后,Oracle 数据库的更新性能可能会明显下降 。(文档)
-
Oracle XStream 由 Oracle 数据库组件和应用程序编程接口 (API) 组成,使客户端应用程序能够从 Oracle 数据库接收数据更改并将数据更改发送到 Oracle 数据库。 XStream 需要 Oracle GoldenGate 许可 ,并被 ISV 应用程序合作伙伴和非 Oracle 复制工具用于支持来自 Oracle 数据库的高速 CDC。(文档)
-
Oracle GoldenGate 是检测 Oracle 数据库更改和复制事务的最佳性能和功能最丰富的方法。现代微服务架构使 GoldenGate 成为现代化运营 IT 系统、应用程序和分析数据平台的理想解决方案。 (文档)
# 实际上OGG Integrated extract 也使用了xstream 和 logmining API
- 不受支持的磁盘日志读取器 是第三方专有工具,可直接从基于磁盘的存储中挖掘 Oracle 数据库日志。这些方法对 Oracle 数据库数据文件和 API 进行逆向工程。这种方法不受 Oracle 支持 ,会带来可衡量的安全风险,并且可能违反 Oracle 许可协议。在本文档的后面,我们将解释该技术所涉及的风险。
Oracle GoldenGate 是使用 Oracle 数据库进行 CDC 和复制的推荐 方法。它支持超过 300 种源和目标组合,包括所有补丁级别的所有版本的 Oracle 数据库。 GoldenGate 使用其自身深度集成的日志捕获 API 来检测日志事件并从 Oracle DB 读取日志记录,从而实现侵入性最小、速度最快且可扩展性最强的解决方案。
使用数据库触发器更改数据
对于少量表以及没有大量交易量的用例,使用触发器是一种可接受的检测 DML 事件的方法。但是,每个触发器都会将新对象放置在数据库中,并且本质上会为每个触发的事件运行一个存储过程 - 因此,在广泛使用触发器时,应用程序和数据库可能会产生相当大的开销。很少有高端工具会使用触发器,但尽管如此,一些主流 ETL 工具仍然提供开发人员工具,将触发器设置和配置为 ETL 流程的一部分,这是需要注意的,因为它可能会对数据库的性能产生负面影响。
# 开销可能是次要的,代码的维护可能是个问题
此示例创建一个 DML 触发器,该触发器使用条件谓词来确定四个可能的触发语句中的哪一个触发了它:
sql
CREATE OR REPLACE TRIGGER t
BEFORE INSERT OR UPDATE OF salary, department_id OR DELETE
ON employees
BEGIN
CASE
WHEN INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting');
WHEN UPDATING('salary') THEN
DBMS_OUTPUT.PUT_LINE('Updating salary');
WHEN UPDATING('department_id') THEN
DBMS_OUTPUT.PUT_LINE('Updating department ID');
WHEN DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting');
END CASE;
END;
/
图 5:DML 触发器示例
使用 Oracle Database LogMiner 更改的数据
从历史上看,Oracle 创建了 LogMiner 并对其进行维护以支持和诊断用例。尽管许多第三方供应商使用此 API 来捕获变更数据,但该用例并不是该 API 的初衷。
Oracle 重做日志捕获对用户数据或数据库字典所做的所有更改,以便可以执行数据库恢复操作并符合关系数据库 ACID(原子性、一致性、完整性、持久性)属性。
LogMiner 是 Oracle 数据库中嵌入的实用程序 ,Oracle 支持使用它来查看重做日志文件的内容。它是一种审计和诊断工具 ,也是一种数据分析工具。作为 DBA,LogMiner 使用 PL/SQL 过程和函数来查找重做日志文件中更改的记录。
LogMiner 的主要功能包括:
- 跟踪数据库逻辑损坏(例如应用程序级别的错误)何时开始。准确了解错误发生的时间非常重要,这样您才知道何时启动基于时间或基于变化的恢复。 (文档)
- 使用一组反向 SQL 语句执行细粒度恢复,以便将表返回到其初始状态
- 使用趋势分析功能进行数据库调整。确定哪个表接收了最多的更新和插入,以便从历史角度了解磁盘访问统计数据
- 检查事务一致性,因为它不仅可以跟踪 DDL 和 DML,还可以跟踪执行的顺序以及哪个用户执行了语句
LogMiner 是 Oracle 数据库的一个强大实用程序,但在尝试扩展 LogMiner 的用例以超越其最初的设计目的时,也需要注意一些挑战。
LogMiner 面临的挑战
以下部分列出了客户在直接使用 LogMiner 或任何基于 LogMiner 的第三方 CDC 工具时应该注意的一些潜在痛点:
- Log Miner 被设计为数据库重做日志的诊断工具。当以持续的方式挖掘重做日志时,它的性能将达不到最佳水平。
- Log Miner 是单线程的,并且设计时不考虑检索重做记录时的低开销。
- 当日志挖掘器达到当前系统提交号(SCN)时,它将停止。新的请求将从日志的开头开始,类似于全表扫描(FTS)操作。 (文档:https://docs.oracle.com/en/database/oracle/oracle-database/21/sutil/oracle-logminer-utility.html#GUID-319446A8-6FEC-42CE-A6A4-582CA65377CF)
- 使用 Log miner 进行 CDC 时处理回滚或部分回滚可能会很麻烦或容易出错。当应用程序会话中止(例如,突然退出)时,应该因任何事务失败而发生回滚。如果事务被取消或失败,则数据库必须清理该事务完成的未提交的工作,以便其他事务可以继续进行。此清理工作涉及回滚未提交的工作。从 LogMiner 的角度来看,回滚语句本身被报告为 SQL_REDO 而不是 SQL_UNDO。对于回滚的 SQL,不会生成撤消 SQL,并且会设置回滚标志。
- 从 Oracle Database 12.2 开始,LogMiner 的 continuous_mine 选项已被弃用,并且在 Oracle Database 19.1 及更高版本中不再可用。任何依赖于持续挖掘的第三方工具将不再适用于数据库 19c 及更高版本。如需了解更多详细信息并查看已停用功能的完整列表,请查看文档。 (文档)
- 自 DB 12.2 起的数据类型将生成不受支持的 sql_redo 和 sql_undo,包括:JSON、OSON、BFILE、嵌套表、带有嵌套表的对象、带有标识列的表、临时表有效性列、PKREF 表、长标识列和属性、嵌套 ID 列(在 Oracle Database 12.2+ 版本中,数据类型与 DBMS_ROLLING 兼容)
需要理解的一个关键事实是,每个实施基于 LogMiner 的客户端的供应商可能都有自己独特的限制和责任------使用 LogMiner 并不能保证任何特定级别的统一性或对服务级别 (SLA) 和 KPI 的共同期望。
# 不要重新发明轮子,除非你的轮子更好
例如,一家第三方供应商于 2021 年夏季推出了对 LogMiner 的 CDC 支持,但存在以下限制:
-
大于 100 GB 的表无法回填。
-
不支持 Oracle 多租户架构 (CDB/PDB)。
-
不支持 Oracle 自治数据库。
-
没有主键的表中的事件将不包含在消费者端执行更新所需的信息。
-
事件的大小限制为 3 MB。
-
不支持索引组织表(IOT)。
-
对于 BFILE 类型的列,只会复制文件的路径。该文件的内容将不会被复制。
-
不支持数据类型为 ANYDATA、BLOB、CLOB、LONG/LONG RAW、NCLOB、UDT、UROWID、XMLTYPE 的列,这些列将被替换为 NULL 值。
-
对于 Oracle 11g,不支持具有数据类型为 ANYDATA 或 UDT 的列的表,并且不会复制整个表。
-
Oracle Label Security (OLS) 未被复制。
-
如果模式发生变化,则可能会读取新模式中的某些事件,但仍然应用旧模式。
-
并非所有对源模式的更改都能被自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
- 删除列
- 在表格中间添加列
- 更改列的数据类型
- 重新排序列
- 删除表(如果重新创建同一张表并添加新数据则相关)
- 截断表
-
不支持复制视图。
-
流运行时创建的物化视图不会自动填充。
Log Miner 仍然专注于诊断用例,选择依赖于 LogMiner 的第三方 CDC 工具的客户应在框架的已知限制内谨慎行事。每秒超过数百个事务的在线工作负载的用例可能会导致延迟、内存和可扩展性问题。对于小型和低容量的数据库,LogMiner 可能对于简单的工作负载来说"足够好"。然而,在许多情况下,LogMiner 会与其他第三方工具配对,这可能会给源数据库带来额外的生命周期挑战或不必要的负载。
任何使用带有 LogMiner 的第三方 CDC 工具的人都应该仔细衡量对源数据库本身的影响和负载要求,并确保数据类型覆盖范围、功能限制和安全问题对于业务来说是可以接受的。
使用 XStreams API 更改数据
XStream 是 Oracle 数据库的一个战略组成部分,它提供了一个低级 API,使事务流能够在数据库"内"或"外"进行复制。其目的是为客户端应用程序提供将逻辑更改记录(LCR 包含从源发送到目标的 DML 和/或 DDL)插入和提取到隐式或显式流中的能力。 XStream API 旨在帮助高级用户、技术合作伙伴和第三方工具直接使用 Oracle 数据库进行高性能 CDC、流式传输和复制。
XStream 包含两个主要功能:XStream Out 和 XStream In。 XStream Out 提供 Oracle 数据库组件和 API ,使您能够与其他系统共享对 Oracle 数据库所做的数据更改。 XStream Out 可以从重做日志中检索数据操作语言 (DML) 和数据定义语言 (DDL) 更改,并将这些更改发送到使用 API 的客户端应用程序。 (文档)
总的来说,XStream API 是一个非常强大、现代且最新的访问层,用于在 Oracle 数据库内外进行高速事务复制。然而,有一些重要的主题需要注意。
重要的 XStream 事实
- 许可,使用 XStream API 需要任何使用 XStream 的数据库的 GoldenGate 许可证
- 无法保证使用 XStream 的工具的自动化和生命周期。由于 XStream 是一个低级 API,因此任何更高级别的工具(例如第三方 CDC 工具)都必须实现自己的软件自动化和生命周期管理,以便处理用户、连接、字典、事务以及任何补充日志记录或检查点语义。非 Oracle 供应商提供的各个工具的质量和功能各不相同。
- 与 XStream API 一起使用的任何数据库的恢复语义。任何源或目标数据库都可能由于多种原因而失败,并且连接并使用 XStream 的第三方客户端将需要实现自己的逻辑以正常处理重启情况。如果检查点和恢复操作不正确,第三方 CDC 工具可能会跳过某些记录、写入重复记录或在复制的数据存储中产生不一致的数据集。将事务从 Oracle 数据库复制到非关系目标(如 Apache Kafka 或对象存储)时,这种情况也很重要。
- XStream 不保证第三方工具的一致性。当第三方工具仅仅是 XStream API 的客户端时,没有什么神奇的方法来保证高质量的 CDC。不同供应商的实现可能有所不同,并且开源框架在 XStream 之上可能有完全不同的实现。警惕任何供应商在使用 XStream 时的一致性问题,即使 Oracle 数据库客户实施了多种使用 XStream 的 CDC 工具,各个工具之间的各自功能、质量和结果也会有所不同。
# Oracle使用XStream发明了一个轮子OGG,其他的软件厂商也可以使用XStream发明自己的论证,但是否好过OGG就看软件开发水平了,另外,还需要支付OGG许可费用
使用 Oracle GoldenGate 更改数据
Oracle GoldenGate 利用其自身高度优化的本机 API 与 Oracle 数据库紧密集成。 GoldenGate API 深度集成在数据库核心中,以针对高速数据事件进行优化并利用数据库的新功能。 GoldenGate 是唯一获得 Oracle 最高可用性架构 (MAA) 白金级认证的复制框架。 (文档)
与上面提到的 MAA 技术论文一样,GoldenGate 通常以"中心"配置运行。这对于单点项目和简化 GoldenGate 组件的管理非常有利。
# 没懂,后续看文档

图 6:Oracle GoldenGate 可以部署为 Hub,也可以部署在基于微服务的数据网格中
Oracle GoldenGate 还可以作为大型企业、分布式环境或多云复制项目的网格(Mesh)运行。通过数据网格方法,客户可以使用 GoldenGate 分发服务在微服务层/应用程序之间分发事件。
Oracle GoldenGate 的一般优势
Oracle GoldenGate 与 Oracle 数据库深度集成(日志记录、重做、备份和恢复层、安全性、管理、数据保护、数据保管库、自治数据库等)
- Oracle GoldenGate 是 Oracle 最稳定、性能最强、最可靠 的 CDC/复制解决方案
- 高性能:Oracle GoldenGate 能够实现亚秒级延迟 的数据移动,具有低影响的事务数据捕获、路由、转换和交付
- GoldenGate 是唯一一款与核心 Oracle 数据库中新兴创新(安全性、功能、数据类型等)保持同步的 CDC / 复制工具。
- GoldenGate 支持广泛的用例,从传统的 OLTP 数据复制和高可用性(单向、双向、点对点等)到数据湖提取或多云提取、SaaS 应用程序复制、消息传递复制。在过去的五年中,GoldenGate 一直在扩展到流处理模式,用于数据管道、数据转换、时间序列分析、预测分析、地理空间、实时分析等用例。
- 从 Oracle 数据库捕获时,Oracle GoldenGate 更易于使用 ,尤其是在处理 Oracle Real Application Clusters (RAC) 和 Oracle Automated Storage Management (ASM) 等选项时。此外,GoldenGate 是唯一获得 Exadata、Exadata Cloud Service 和 Exadata Cloud at Customer 认证的 CDC/复制技术。
- 由于 GoldenGate 是唯一获得 Oracle 白金级最高可用性架构认证的 CDC / 复制工具,客户可以放心,GoldenGate 已经过最严格的 RPO(恢复点目标)和 RTO(恢复时间目标)场景测试 - 我们的客户数据信任和他们最宝贵的 GoldenGate
从操作角度来看,GoldenGate 具有命令行和图形 Web 用户界面 ,支持数据库管理员、系统管理员和 DevOps 团队。 GoldenGate 微服务优势包括:
- 简单易用的 Web 界面
- 快速简便的安装或配置
- 通过可以在任何地方运行的 AdminClient 进行命令行访问
- 适用于 DevOps 的 RESTful API
- 提供内置监控,但也可以轻松适应您自己的监控

图7:Oracle GoldenGate的简单易用用户界面(本地或云原生)
银行和金融客户一直要求最严格的安全框架。GoldenGate的安全功能包括:
- 数据可以在磁盘上和通过在线协议进行加密
- 加密配置文件封装了用于从Oracle密钥库检索主密钥的配置信息
- 原生支持DMZ环境和私有云环境。
- 通过所有版本的数据库支持Oracle透明数据加密(TDE)和表空间加密(TSE)(拥有专有磁盘读取器的第三方供应商无法支持此功能)
- 对跨分布式服务的证书的丰富支持,包括对mTLS 1.3的支持
- API受到跨站点请求伪造(CSRF)身份验证的保护。默认配置是强制执行基于CSRF令牌的保护。
关于第三方磁盘日志读取器的简要说明
多年来,一些供应商选择创建专有软件,直接对Oracle数据库日志进行逆向工程,以发现数据更改。选择此策略的供应商避免使用受支持的API和实用程序,如LogMiner和XStream。这使数据、数据安全和持续支持面临风险。
这些专有日志解析器有以下缺点:
- 不受支持且未记录 - Oracle 不记录重做日志/归档日志的内容和结构,并且不支持使用第三方工具对这些日志进行逆向工程,这违反了 Oracle 主协议(第 8 部分)和 Oracle 软件许可协议(第 9 部分)。
- 显著的功能限制------由于这些读取器正在对磁盘日志进行逆向工程,因此他们只能看到数据库引擎所执行操作的一小部分语义(含义)。这导致与 Exadata、数据压缩(EHCC)、表加密、安全密钥访问、数据类型不兼容等诸多不兼容问题。拥有二进制日志读取器的供应商将强制客户在数据库中禁用此功能以处理数据。
- 最终用户的治理和安全风险------需要直接主机访问数据库日志并有权使用用户提供的加密密钥的管理工具对许多政策(如 SOC2、巴塞尔、BCBS239 等)构成重大合规风险。
- 缺乏生命周期集成------对于关键任务系统,没有支持或认证的 Oracle MAA 配置来提供使用第三方二进制日志解析器实现故障转移和重启的自动化。
5.意外停机风险------由于这是一个不受支持的集成,Oracle 可能会随时更改日志格式、加密、密钥库等,从而导致在应用数据库补丁时发生意外停机和复杂的回滚。 - 云数据库问题------Oracle 托管云数据库(例如 Oracle 数据库云服务、Oracle 自治数据库、Oracle Exadata 云服务和 Oracle Exadata Cloud at Customer)可能不受支持。特别是,不支持从 Oracle 管理的云主机安装第三方二进制日志解析器。此外,Exadata 云系统需要加密表,而数据库 19.1 及更高版本中的二进制日志解析器无法读取这些表。
- 性能和规模平庸------与 GoldenGate 对 Oracle 数据库引擎的本机访问相比,任何基于磁盘的直接重做日志访问都会导致不必要的 I/O 问题以及并行性和计算利用率的限制。当使用本机集成的 GoldenGate 提取时,实际工作负载的运行速度可能会提高 2 到 5 倍,处理的数据量可能会增加 3 到 10 倍。当远程访问 ASM 存储时,这些问题会进一步加剧。
- 所有权和限制------Oracle 主协议明确禁止导致或允许他人对软件的数据结构进行逆向工程,请参阅在线交易 Oracle 主协议第 3.4 节,网址。
- 数据库软件许可------Oracle 软件许可协议还明确禁止导致或允许他人对软件的数据结构进行逆向工程,请参阅 D 部分第 3 点。
关于 Apache Kafka 或对象存储的 GoldenGate
GoldenGate 是一个用于将数据复制到 Apache Kafka 和对象存储并从中复制数据的绝佳平台。
Oracle GoldenGate 是第一个支持 Kafka 的 CDC / 复制工具,发明 Kafka 的 LinkedIn 团队多年来一直广泛使用 GoldenGate 来实现 Kafka。世界上几个最大的 Kafka 实现每天都依赖 GoldenGate 将 PB 级的变化数据提取到其事件流中。 GoldenGate 客户可以放心,该解决方案将扩展到地球上最苛刻、最关键的 Oracle 到 Kafka 用例。

图 8:使用 GoldenGate 进行 CDC、数据集成和流分析
高层目标是将数据库事件从源数据库流式传输到 Kafka。但在这样做时,保留事务边界(DML 和 DDL)对于事务完整性至关重要。这很重要,因为像 Kafka 这样的消息传递系统不具备 ACID(原子性、一致性、完整性和持久性)属性。当 GoldenGate 目标是具有 ACID 功能的存储(例如关系数据库、Apache Hive、MongoDB 等)时,用户可以确定数据事件在写入并合并到目标数据存储时得到正确处理。这为支持 ACID 的数据存储提供了可靠的"同步数据"的巨大优势。
当 GoldenGate 将数据事件写入非 ACID 存储(例如 Apache Kafka、对象存储、基于搜索的索引等)时,GoldenGate 通常需要采取额外步骤,用额外的元数据"装饰"有效负载,以便数据事件的消费者能够在需要执行回滚操作时正确地重建数据读取器的位置。
例如,GoldenGate 用户经常希望在其数据事件中看到的元数据类型包括:
- 交易前后映象
- 源操作类型(插入、更新、删除、截断、创建、更改、删除)
- 源提交序列号(SCN、LSN、RBA 等)
- 源提交时间戳
- 源元数据,例如表和列定义
- GoldenGate 目标trail序列号
- GoldenGate 目标trail RBA
- 元数据版本
- 源数据库名称和类型
- 源操作日志位置(如果有)
- 源交易用户和名称(如果有)
GoldenGate 可以将交易发送到数百个不同的数据存储和平台组合 。具体来说,对于 Kafka,GoldenGate 输出格式支持各种非关系有效负载,例如:CSV、固定长度、XML、JSON、Avro、Parquet、ORC。越来越多的高级文件类型正在尝试注入高水平的模式演变和其他类似关系的属性,例如 Kafka 注册表中的 Avro 和元存储目录中的 Parquet。但是这些有效载荷格式都无法处理具有 ACID 功能的数据库的丰富性和语义。
最终,开发人员需要将非 ACID 目标上的隔离性和一致性结合在一起,但 GoldenGate 元数据在很大程度上使这一过程变得更简单。如果您选择使用 GoldenGate 进行流分析,则默认情况下内置有支持 GoldenGate 元数据的模式(例如,部分/全部补充日志记录)。这些整体流处理和流分析用例对于动态和实时的现代数据平台变得越来越重要。
总结 -- Oracle GoldenGate 是 Oracle 数据库的最佳 CDC
毫不奇怪,Oracle 工程团队也最有能力为 Oracle 数据库提供最佳的整体 CDC 和复制解决方案。 GoldenGate 经常被客户和分析师认为是 Oracle 数据库以及数百个其他受支持数据平台功能最齐全、性能最高、最值得信赖和最可靠的数据集成解决方案。
在本文档中,我们解释了与 Oracle 数据库配合使用的第三方 CDC 技术的许多限制和注意事项。该表总结了这些 CDC 方法。

图 9:Oracle GoldenGate 与其他变更捕获 API 和方法的比较
没有任何其他第三方技术能够与 GoldenGate 相媲美。
我们希望此分析能够帮助您为您的业务用途选择正确的复制解决方案并满足您对变更数据捕获流的要求。