技术白皮书:Oracle GoldenGate 优势
本文为技术白皮书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 触发器,该触发器使用条件谓词来确定四个可能的触发语句中的哪一个触发了它:
CREATE OR REPLACE TRIGGER tBEFORE INSERT OR UPDATE OF salary, department_id OR DELETEON employees
BEGINCASEWHEN INSERTING THENDBMS_OUTPUT.PUT_LINE('Inserting');WHEN UPDATING('salary') THENDBMS_OUTPUT.PUT_LINE('Updating salary');WHEN UPDATING('department_id') THENDBMS_OUTPUT.PUT_LINE('Updating department ID');WHEN DELETING THENDBMS_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 相媲美。
我们希望此分析能够帮助您为您的业务用途选择正确的复制解决方案并满足您对变更数据捕获流的要求。
相关文章:
技术白皮书:Oracle GoldenGate 优势
本文为技术白皮书Oracle GoldenGate 优势的翻译及阅读笔记。以下注释中GoldenGate为OGG。 副标题为:Oracle 数据库的变更数据捕获 (CDC) 技术比较。版本为July, 2021, Version 2.1。 Oracle GoldenGate 被客户和分析师公认为功能最齐全、性能最高、最值得信赖的数…...
搜索引擎中的检索模型(布尔模型、向量空间模型、概率模型、语言模型)
搜索引擎中的检索模型 搜索引擎中的检索模型是决定查询与文档相关性的重要机制。以下是几种常见的检索模型,包括其原理、代码案例、使用方式和优缺点。 1. 布尔模型(Boolean Model) 原理 布尔模型基于布尔逻辑(AND, OR, NOT&…...
【SpringBoot】基于MybatisPlus的博客管理系统(1)
1.准备工作 1.1数据库 -- 建表SQL create database if not exists java_blog_spring charset utf8mb4;use java_blog_spring; -- 用户表 DROP TABLE IF EXISTS java_blog_spring.user_info; CREATE TABLE java_blog_spring.user_info(id INT NOT NULL AUTO_INCREMENT,user_na…...
聊聊Spring AI Alibaba的PlantUMLGenerator
序 本文主要研究一下Spring AI Alibaba的PlantUMLGenerator DiagramGenerator spring-ai-alibaba-graph/spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/DiagramGenerator.java public abstract class DiagramGenerator {public enum CallStyle {…...
借助Spring AI实现智能体代理模式:从理论到实践
借助Spring AI实现智能体代理模式:从理论到实践 前言 在人工智能领域,大语言模型(LLM)的应用愈发广泛,如何高效构建基于LLM的系统成为众多开发者关注的焦点。Anthropic的研究报告《构建高效代理》为我们提供了新的思…...
【图片识别成表格】批量图片识别成excel表格,批量识别图片区域文字保存到excel表格,基于WPF和腾讯OCR的识别方案
应用场景 该项目适用于需要从大量图片中提取文字信息的场景,例如: 发票识别:批量扫描发票并提取金额、日期、发票号等信息。证件识别:批量处理身份证、护照等证件,提取姓名、身份证号等信息。文档数字化:将纸质文档扫描成图片后,批量提取…...
使用Qt QAxObject解决Visual Fox Pro数据库乱码问题
文章目录 使用Qt QAxObject解决Visual Fox Pro数据库乱码问题一、问题背景:ODBC读取DBF文件的编码困境二、核心方案:通过QAxObject调用ADO操作DBF1. 技术选型:为什么选择ADO?2. 核心代码解析:QueryDataByAdodb函数3. 连…...
Manus AI多语言手写识别技术全解析:从模型架构到实战部署
简介 Manus AI作为当前多语言手写识别领域的领军技术,其核心创新在于融合三维卷积网络、动态特征融合引擎和混合解码系统,实现了对112种语言的98.7%识别准确率和8ms延迟的实时处理能力。本文将深入探讨Manus AI的架构设计、特征提取方法、数据预处理策略…...
MYSQL三大日志、隔离级别(MVCC+锁机制实现)
MySQL三大日志 Undo Log(回滚日志) 作用 事务回滚时恢复数据到修改前的状态。 支持 MVCC,为读操作提供历史版本数据。 存储 存放在 undo tablespace 中,通过回滚段管理。 格式 undo log 格式都有一个 roll_point…...
聚焦智能体未来,领驭科技在微软创想未来峰会大放异彩
2025年4月23日,微软创想未来峰会在北京中关村国际创新中心盛大举行。作为微软中国南区核心合作伙伴及HKCSP 1T首批授权云服务商,深圳领驭科技有限公司受邀参会,携瀚鹏工业AI应用解决方案亮相峰会,与全球AI领袖及行业精英共话智能体…...
043-代码味道-循环依赖
代码味道-循环依赖 代码异味之循环依赖:定义、特征与解决方案 一、循环依赖的定义与特征 循环依赖(Cyclic Dependencies)是指两个或多个软件模块之间形成相互依赖的闭环关系。这种代码味道会导致: 编译/构建困难:模…...
技术沙龙:Mybatis中resultMap使用案例分享
目录 一、联表查询和单表查询优劣分析 1.1 联表查询的优缺点 优点: 缺点: 1.2 单表查询的优缺点 优点: 缺点: 1.3 适用场景建议 联表查询更适合: 单表查询更适合: 1.4 优化建议 1.5 总结 …...
Linux基础篇、第一章_01_3安装虚拟机手动安装部署Ubuntu22.04服务器
题目安装部署Ubuntu22.04服务器 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.29 适用环境: Ubuntu22.04 文档说明 本文档聚焦 Ubuntu 22.04 服务器的安装部署,详细介绍了从虚拟机创建、系统安装、基础配置(如更新国内源、安装常用软件、修改静态 IP、…...
dma_request_slave_channel_compat 与 dma_request_channel 的区别
1.代码示例 dma_request_channel #define dma_request_channel(mask, x, y) \__dma_request_channel(&(mask), x, y, NULL)struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,dma_filter_fn fn, void *fn_param,struct device_node *np) {struct dma_d…...
【论文阅读】Partial Retraining Substitute Model for Query-Limited Black-Box Attacks
摘要 针对深度神经网络(DNN)分类器的黑盒攻击正受到越来越多的关注,因为它们在现实世界中比白盒攻击更实用。在黑盒环境中,对手对目标模型的了解有限。这使得难以估计用于制作对抗示例的梯度,从而无法将强大的白盒算法直接应用于黑盒攻击。因此,一种著名的黑盒攻击策略会…...
JAVA---集合ArrayList
集合 1. 自动扩容 ,集合长度可变 2. 只可以存引用数据类型,如果要存基本数据类型,需要将其转换成对应的包装类 ArrayList 定义在 java.util 下的,实现了 List 接口。ArrayList 内部以动态数组的形式存储元素,这意…...
快速了解Go+微服务(概念和一个例子)
更多个人笔记:(仅供参考,非盈利) gitee: https 文章目录 基本概念grpc和简单demo 基本概念 特点: 单一职责:一个服务用来解决一个业务问题面向服务:一个服务封装并对外提供服务&am…...
MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
接上文MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 探究sleep.c是如何’炼成’的? 老实讲,我不熟悉Makefile,最多写过简单的编译和辅助脚本,拿到Xv6的Makefile是一脸懵的,至今还是一脸懵,那么我们上篇中新加的…...
4月28号
初认web前端: web标准: HTML:...
React Native 太慢:kotlin-gradle-plugin-2.0.21-gradle76.jar 下载太慢
React Native 初次运行(已经连接手机USB调试)。 运行的命令:npx react-native run-android。 一直卡在jar包的下载部分,总是几十kb的速度。 > Evaluating settings > :gradle-plugin > Resolve files of :gradle-plug…...
面试篇 - Transformer前馈神经网络(FFN)使用什么激活函数?
1. FFN结构分解 原始Transformer的FFN层 FFN(x) max(0, xW₁ b₁)W₂ b₂ # 原始论文公式 输入:自注意力层的输出 x(维度 d_model512) 扩展层:xW₁ b₁(扩展为 d_ff2048) 激活函数:Re…...
Lua 第14部分 数据结构
14.1 数组 Lua 语言中的表并不是一种数据结构,它们是其他数据结构的基础。我们可以用 Lua 语言中的表来实现其他语言提供的数据结构,如数组、记录、列表、队列、集合等。而且,用Lua 语言中的表实现这些数据结构还很高效。 在像 C 和…...
杭州数据库恢复公司之Dell服务器RAID5阵列两块硬盘损坏报警离线
外地客户寄过来六块SAS服务器硬盘,说是组了RAID5磁盘阵列的戴尔DELL服务器突然崩溃了,更换阵列卡后开始可以进入系统,不过有一块盘亮黄灯报警,工程师打算把服务器放回机柜后更换新硬盘,但再重启就无法进系统了…...
linux 内核 debugfs 使用介绍
一:概述 debugfs 是 Linux 内核提供的一个特殊的虚拟文件系统,用于 暴露内核模块(如驱动)内部的调试信息或控制接口,供开发者、调试人员实时查看和排查问题。即 debugfs 就是一个“调试专用的 /proc 或 /sys”…...
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式 引言项目概述分析基本信息主要功能支持的文件格式技术架构 为什么选择 Markdown?核心功能详解1. 文档转换机制2. LLM 集成能力3. 多种转换选项4. 插件系统 安装和使用教程安装可选依赖…...
解锁未来工作方式:什么是 AI Agent?| Unlocking the Future of Work: What Are AI Agents?
🇨🇳 解锁未来工作方式:什么是 AI Agent?| 🇺🇸 Unlocking the Future of Work: What Are AI Agents? 关键词提示:本文将介绍 AI agents, knowledge graph, LangChain, Graphiti 等相关术语&am…...
8分钟快速掌握Markdiwn
文档说明:本文档适合有编程基础的专业人士快速学习Markdown语法,从而立即上手使用Markdown来记笔记,新手可移步至Markdown入门到精通实战教程:使用Typora快速构建编辑MD文档_md文件编辑器typora-CSDN博客 进行入门学习 Markdown文档的元素包括块级元素、内联元素、HTML元素…...
多维驱动:负载均衡何以成为现代系统架构的基石
负载均衡的引入是现代网络架构和分布式系统发展的必然需求,除了上述提到的原因,还涉及以下多个关键层面,共同推动其成为复杂系统不可或缺的组成部分: 一、提升服务质量(QoS) 响应时间优化:用户…...
本地知识库工具FASTGPT的安装与搭建
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,将智能对话与可视化编排完美结合,让 AI 应用开发变得简单自然。无论您是开发者还是业务人员,都能轻松打造专属的 AI 应用。 今天来试着搭建下,使用docker安装比较简单&#x…...
【嘉立创EDA】如何找到曲线和直线的交点,或找到弧线和直线的交点
文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.38 本文使用嘉立创EDA,描述如何快速找到曲线和直线交点的方法,这里的曲线包括了弧线等。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题…...
余额分账和代付有什么区别?
余额分账和代付有什么区别?余额分账是把钱存到一起,但代付是把钱分开。看似简单的一字之差,却有着本质的区别。 余额分账是一种财务管理手段,在一个账户或平台上,根据一定的规则将账户内的余额进行划分,形…...
【Stable Diffusion】文生图进阶指南:采样器、噪声调度与迭代步数的解析
在Stable Diffusion文生图(Text-to-Image)的创作过程中,采样器(Sampler)、噪声调度器(Schedule type)和采样迭代步数(Steps)是影响生成效果的核心参数。本文将从技术原理、参数优化到实践应用,深入剖析DPM++ 2M采样器、Automatic噪声调度器以及采样步数的设计逻辑与协…...
1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
探索 LLaMA-Factory:大模型微调的一站式解决方案 引言 在大模型的时代,微调技术是将预训练模型适配到特定任务的关键。LLaMA-Factory 作为一款强大的工具,为开发者提供了便捷且高效的大模型微调解决方案。本文将深入介绍 LLaMA-Factory 的基…...
嵌入式开发面试常见编程题解析:pthread_join 与 pthread_detach 详解
一、引言 在多线程编程中,线程的资源管理至关重要。pthread_join 和 pthread_detach 是用于线程资源管理的两个重要函数。正确使用它们可以确保线程资源的合理回收,避免出现资源泄漏等问题。本文将详细介绍这两个函数的区别、使用方法、常见易错点以及拓…...
C#里嵌入lua脚本的例子
由于lua脚本比较小,并且适用性很强,非常适合嵌入式系统里加入。 比如在GD32的MCU里运行lua脚本,又者在ESP32里运行它,都是比较方便的。 当脚本要发送给MCU运行之前,我们需要在PC的软件里对脚本进行编译, 以便发现脚本有什么问题,不能在MCU里去发现问题,否则那样会比…...
git配置SSH KEY
1. 生成SSH密钥 ssh-keygen一直按回车 2.查看密钥 去.ssh目录查看生成的密钥文件 .pub结尾的文件即是密钥文件 3.配置SSH KEY 到代码仓库如GitHub,gitlab等配置SSH KEY,将密钥复制上去添加即可...
js day9
js当中与滚动相关的属性 <div>haha</div> <script>let boxdocument.querySelector("div")box.addEventListener("scoll",function(e)){console.log(window.scrolltop) }//往上走了 </script> ,box.scrollHeight——获取元素内容…...
【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
启动临时 MongoDB 容器、挂载数据卷运行数据库服务,并通过备份文件恢复数据 1.命令分解与功能说明1.1.启动一个临时 MongoDB 容器,并进入交互式终端(1)执行命令(2)实现功能(3)…...
20_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3后格式合并
1. 什么是 GGUF GGUF 格式的全名为(GPT-Generated Unified Format),提到 GGUF 就不得不提到它的前身 GGML(GPT-Generated Model Language)。GGML 是专门为了机器学习设计的张量库,最早可 以追溯到 2022/10。其目的是为了有一个单文件共享的格式…...
LLamaFactory如何在Windows系统下部署安装训练(保姆级教程)
注意:以下教程编写和灵感来源均来自eogee开源作者(EOGEE_岳极技术_大模型与AI知识技术共享社区),大家有需要学习AI方面的知识可以关注他。 另我个人此次环境部署所用的显卡是5070ti16G显存,系统是Windows11。 如有问题…...
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记7
前言 在前面文章的介绍中,已经介绍了数据定义、数据更新、数据查询,关于SQL语句的标准语言已经基本上介绍完毕,本文接下来将介绍另外两种便于操作的操作模式——视图与索引。其大致的语句代码与前文其实并无大的区别,在了解基本语…...
【LeetCode】彩灯装饰记录 III
题目 题目链接 一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果: 第一层按照从左到右的顺序记录 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左…...
MongoDB的图形化工具robo3t,navicat
MongoDB 常用的两个图形化工具 —— Robo 3T 和 Navicat 的详细介绍、区别和基本使用方法: 🧰 一、Robo 3T(原 Robomongo) 📌 简介 Robo 3T 是一款专注于 MongoDB 的轻量级可视化客户端。由原 Robomongo 团队开发&am…...
python celery框架结合django的使用
学习目标: 通过文章了解celery的运行机制以及如何结合django去使用 熟悉celery的运行原理属性celery在django项目当中的配置如何启动运行celery框架 学习内容: 熟悉celery的运行原理,简单来说 Celery 是一个“任务排队机后台处理器”。帮你…...
Ansible 守护 Windows 安全(Ansible Safeguards Windows Security)
Ansible 守护 Windows 安全:自动化基线检查与加固 在当今网络威胁日益严峻的形势下,保障 Windows 系统安全至关重要。Ansible 作为一款强大的自动化运维工具,可通过自动化脚本实现 Windows 安全基线检查和加固,大幅提升运维效率并…...
【计算机架构】CISC(复杂指令集计算机)架构
一、引言 在计算机技术领域中,计算机架构是基石,决定着计算机系统的性能、功能和效率。CISC(复杂指令集计算机)架构作为一种经典的计算机架构,自诞生以来就在计算机发展历程中扮演着举足轻重的角色。从早期的大型计算机…...
【学习资源】知识图谱与大语言模型融合
知识图谱与大型语言模型结合参数知识和明确知识的可用性会带来一些机会和愿景。分享一些知识图谱和大语言模型融合的论文和文章、实践案例、关键技术和实用工具。 1 模型库获取 https://modelscope.cn/models 注 下载模型需运行 git lfs instal 2 论文和文章 2.1 大型语言模…...
探索微服务入口:Spring Cloud Gateway 实战指南
在微服务架构中,网关(Gateway)扮演着“请求入口”的角色。它不仅帮助我们统一入口、路由转发,还可以承担限流、安全认证、权限校验、熔断等功能。 本文将系统介绍 Spring Cloud Gateway 的基础概念、快速上手指南,以及…...
python的turtle库实现四叶草
实现代码: import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…...
医疗生态全域智能化:从技术革新到价值重塑的深度探析
引言 医疗人工智能正在经历从单一技术应用向全域生态系统演进的关键转折点。随着深度学习、自然语言处理和计算机视觉等技术的成熟,AI不再局限于辅助诊断等单一功能,而是逐渐渗透到医疗健康服务的全生命周期。从传统设备制造商向智慧医疗转型的东软医疗,正在构建"AI大…...