浅谈Oracle GoldenGate

1.简介

GoldenGate公司是一家创建于1995年的美国公司,开发总部设在旧金山,在北美,欧洲和亚洲(包括新加坡、印度、澳大利亚)设有支持中心。GoldenGate公司专注于数据同步领域,是实现数据同步技术的领导者。2009年被Oracle公司收购。

GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志(Online Redo Log)(默认)或归档日志(Archive Log)获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制。

2.用途

  • 数据库容灾/应急。
  • 系统迁移/升级/维护。
  • 双活/多主数据中心。
  • 数据集中/分发/同步
  • 从一个数据库中静态提取数据记录,并将这些记录加载到另一个数据库中。
  • 对DML(事务数据操作语言)和DDL(数据定义语言)更改的持续提取和复制,保证源和目标数据的一致性。
  • 将数据库提取为一个文件。

3.常用拓扑

在这里插入图片描述

4.架构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.1.工作流程

  1. 源端利用Extract(Capture)抽取模块在源端数据库中读取在线日志(Online Redo Log)(默认)或归档日志(Archive Log),然后进行解析,只提取其中数据的变化信息,比如DML操作-增、删、改操作,将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(Trail文件)中。
  2. 源端利用Extract(Data Pump)推送模块将队列文件(Trail文件)通过TCP/IP传送到目标端。
  3. 目标端利用Collector收集模块接收从源端传输过来的数据变化信息,把信息缓存到GoldenGate 队列文件(远程Trail文件)中。
  4. 目标端利用Replicat复制模块从队列文件(远程Trail文件)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

4.2.Manager管理模块

Manager进程运行在源端和目标端。每个源端或者目标端有且只能存在一个Manager进程。在其他进程启动之前,Manager进程必须先要在源端和目标端启动。

作用:

  • 启动、监控、重启其他进程。
  • 报告错误及事件。
  • 分配数据存储空间。
  • 发布阈值报告。
  • 管理Trail文件的生成、删除。
  • 整体监控、报表。
  • 执行用户命令。
  • 维护各进程端口号。

通信:

  • UI与Manager:TCP/IP。
  • Extract/Replicat与本地Manager:共享内存。
  • Extract(Data Pump)与远端Manager:TCP/IP。

4.3.Extract(Capture)抽取模块

Extract进程运行在源端。

装载过程:

  • 初始数据装载阶段(Initial Loads):直接从源端的数据表中抽取所有数据。
  • 增量同步(Change Synchromization):负责捕获源端数据的变化(DML和DDL)。

Extract利用其内在的Checkpoint机制,周期性地检查并记录其读写的位置,通常是写入到一个本地的Trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,重新启动Extract进程后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。

抽取时机,满足任一:

  • 缓冲区(内存)写满。
  • 设置间隔时间(FLUSHSECS/FLUSHCSECS参数):默认1秒,最小10毫秒。

当配置为同步变化时,Extract捕获对Extract配置中的对象执行的DML和DDL操作。Extract存储这些操作,直到收到包含这些操作的事务的commit记录或rollback。收到rollback时,Extract会丢弃该事务的操作。收到commit时,Extract会将该事务的操作写入磁盘上的一系列文件,称为Trail文件,它们在那里排队,等待传递给目标系统。每个事务中的所有操作都被作为一个按顺序组织的事务单元写入Trail文件。这种设计确保了速度和数据完整性。

多个Extract可以同时操作不同的对象。例如,当数据库很大时,两个Extract可以并行地将数据提取和传输给两个Replicat(使用两个Trail文件),最小化目标延迟。要区分不同的抽取过程,需要为每个抽取过程分配一个组名。

4.3.1.抽取和故障恢复原理

当Extract在Redo Log中遇到某个事务的起点(在Oracle中通常为第一个可执行的SQL语句)时,便会将从该事务中捕获到的所有数据缓存到内存中,即使开始该事务不包含任何数据,Extract也必须将事务缓存到内存中,因为该事务中后面的操作可能包含要捕获的数据。

当Extract遇到事务的commit记录时,便会将缓存在内存中的整个事务写入Trail文件,并将其从内存中清除。

当Extract遇到事务的rollback记录时,便会丢弃缓存中缓存的整个事务。

在Extract处理commit或rollback记录之前,都会视事务为open状态(未提交或回滚的),并持续不断地收集该事务的信息。

如果Extract在遇到事务的commit或rollback记录之前停止,则在Extract重启后,必须对所有缓存在内存中的信息进行恢复。此操作适用于Extract进程停止时所有处于open状态的事务。

为了控制Extract发生中断后必须重新处理的事务日志量,Extract会以特定的时间间隔将正在处理的事务(包括长时间运行的事务的状态和数据)的当前状态及数据写入磁盘。

长时间未commit或rollback事务的故障恢复,采用Bounded Recovery(BR)(例:4小时)+BR检查点(BR Checkpoint)+磁盘持久化(Discard文件?)机制。

4.4.Extract(Data Pump)推送模块

Data Pump进程运行在源端。

Data Pump是一个可选组件,如果不配置Data Pump,那么由Extract主进程将数据发送到目标端的Remote Trail文件中;如果配置了Data Pump,会由Data Pump将Extract主进程写好的本地Trail文件通过网络发送到目标端的 Remote Trail文件中。Data Pump可以执行数据过滤、映射和转换。Data Pump推送时数据可压缩。

在这里插入图片描述

在这里插入图片描述

使用Data Pump的好处:

  • 如果目标端或者网络失败,源端的Extract进程不会意外终止。
  • 需要在不同的阶段实现数据的过滤或者转换。
  • 多个源数据库复制到数据中心。
  • 数据需要复制到多个目标数据库。

推送时机,满足任一:

  • 缓存写满(RMHOST参数的TCPBUFSIZE选项):默认30000字节。
  • 设置间隔时间(FLUSHSECS/FLUSHCSECS参数):默认1秒,最小10毫秒。

4.5.Collector收集模块

Collector进程运行在目标端。

Collector把Extract(Capture/Data Pump)投递过来的数据块重新组装成Trail文件,即远程Trail文件。

4.6.Replicat复制模块

Replicat进程运行在目标端。

Replicat读取Extract提取到的数据(变更的事务或DDL变化)并应用到目标数据库。Replicat使用动态SQL编译一条SQL语句,然后使用不同的绑定变量多次执行它。

装载过程:

  • 初始数据装载阶段(Initial Loads):应用数据到目标对象或者路由它们到一个高速的Bulk-load工具上。
  • 增量同步(Change Synchromization):将Extract捕获到的提交了的事务应用到目标数据库中。

Replicat有同Extract一样的Checkpoint机制。

执行方式:

  • 以变更行为单位生成SQL语句并执行。
  • 基于主键(或唯一键)和变更前的值(可选)更新。

4.6.1.BatchSQL

Use the BATCHSQL parameter to increase the performance of Replicat. BATCHSQL causes Replicat to organize similar SQL statements into arrays and apply them at an accelerated rate. In its normal mode, Replicat applies one SQL statement at a time.
使用BATCHSQL参数来提高Replicat的性能。BATCHSQL导致Replicat将类似的SQL语句组织成数组,并以更快的速度应用它们。在正常模式下,Replicat一次应用一条SQL语句。

In BATCHSQL mode, Replicat organizes similar SQL statements into batches within a memory queue, and then it applies each batch in one database operation. A batch contains SQL statements that affect the same table, operation type (insert, update, or delete), and column list. For example, each of the following is a batch:
在BATCHSQL模式下,Replicat在内存队列中将类似的SQL语句组织成批,然后在一个数据库操作中应用每个批。批处理包含影响相同表、操作类型(插入、更新或删除)和列列表的SQL语句。例如,以下每一个都是一个批:

  • Inserts to table A
  • Inserts to table B
  • Updates to table A
  • Updates to table B
  • Deletes from table A
  • Deletes from table B

Oracle GoldenGate analyzes foreign-key referential dependencies in the batches before executing them. If dependencies exist among statements that are in different batches, more than one SQL statement per batch might be required to maintain the referential integrity.
在执行批处理之前,Oracle GoldenGate会分析它们的外键引用依赖关系。如果不同批处理中的语句之间存在依赖关系,则可能需要每个批处理多个SQL语句来维护引用完整性。

以下SQL语句不能使用BATCHSQL,包括:

  • Statements that contain LOB or LONG data.
    包含LOB或LONG数据的语句。
  • Statements that contain rows longer than 25k in length.
    包含长度超过25k的行的语句。
  • Statements where the target table has one or more unique keys besides the primary key. Such statements cannot be processed in batches because BATCHSQL does not guarantee the correct ordering for non-primary keys if their values could change.
    除了主键外,目标表还有一个或多个唯一键的语句。这些语句不能成批处理,因为如果非主键的值可能改变,BATCHSQL不能保证正确的顺序。
  • (SQL Server) Statements where the target table has a trigger.
    (SQL Server)目标表具有触发器的语句。
  • Statements that cause errors.
    导致错误的语句。

4.6.2.Parallel Replicat并行复制模式

Parallel Replicat provides all the benefits of Integrated Replicat by performing the dependency computation and parallelism outside of the database.
通过在数据库外部执行依赖项计算和并行性,Parallel Replicat提供了Integrated Replicat的所有优点。

Parallel Replicat ensures that all the transactions are ordered based on the key dependencies (primary key (PK), foreign key (FK) and unique key (UK)). This is a huge difference from Integrated Replicat, where the dependency and writing are done within the database.
Parallel Replicat确保所有事务都基于key依赖项(主键(PK)、外键(FK)和唯一键(UK))排序。这与Integrated Replicat有很大的不同,后者的依赖项和写入都是在数据库中完成的。

The components of Parallel Replicat are:
Parallel Replicat的组成部分为:

  • Mappers operate in parallel to read the trail, map trail records, convert the mapped records to the Integrated Replicat LCR format, and send the LCRs to the Merger for further processing. While one Mapper maps one set of transactions, the next Mapper maps the next set of transactions. The trail information is split and the trail file is untouched because it orders trail information in order.
    Mapper可以并行地读取Trail、映射Trail记录、将映射记录转换为Integrated Replicat LCR格式,并将LCR发送到Merger进行进一步处理。一个Mapper映射一组事务,下一个Mapper映射下一组事务。Trail信息是分割的,而Trail文件是不变的,因为它按顺序排列Trail信息。
  • Master processes have two threads, Collater and Scheduler. The Collater receives mapped transactions from the Mappers and puts them back into trail order for dependency calculation. The Scheduler calculates dependencies between transactions, groups transactions into independent batches, and sends the batches to the Appliers to be applied to the target database.
    主进程有两个线程,Collater和Scheduler。Collater从Mapper接收映射的事务,并将它们放回Trail Order中进行相关性计算。Scheduler计算事务之间的依赖关系,将事务分组为独立的batch,并将batch发送给Applier以应用于目标数据库。
  • Appliers reorder records within a batch for array execution. It applies the batch to the target database and performs error handling. It also tracks applied transactions in checkpoint tables.
    Applier在batch中重新排序记录以执行数组。它将batch应用到目标数据库并执行错误处理。它还跟踪Checkpoint表中应用的事务。

在这里插入图片描述

Additionally, Parallel Replicat can be configured to run in one of the following modes:
此外,可以配置并行副本运行在以下模式之一:

  • Integrated mode: This is similar to the prior version’s Integrated Replicat except that the readers and writers are not external to the database with the integrated mode of Parallel Replicat. This mode still uses the internals of the database to manage the processes.
    集成模式:这类似于以前版本的Integrated Replicat,只是Parallel Replicat的Integrated模式的读取器和写入器不在数据库外部。此模式仍然使用数据库的内部机制来管理流程。
  • Non-integrated mode: In this mode, the Replicat still runs in parallel. However, now it is completely outside of the database.
    非集成模式:在这种模式下,Replicat仍然并行运行。然而,现在它完全在数据库之外。

4.7.Trail文件

为了持续地提取与复制数据库变化,GoldenGate将捕获到的数据变化临时存放在磁盘上的一系列专有格式的文件中,这些文件就叫做Trail文件。

Trail文件可以在源DB上,也可以在目标DB上,也可以在中间系统上。在源端的叫做Local Trail/Extract Trail,在目标端的叫做Remote Trail。

Trail文件可将事务信息持久化,使用Checkpoint机制记录读写位置,防止单点故障。

每个在线Extract过程都必须链接到一个Trail文件,同一时刻只有一个Extract可以写入给定的Local Trail文件,所有Local Trail文件必须有不同的名字。

无论源端是否使用Data Pump,在目标端都会生成Trail文件。

4.7.1.存储方式、内容

Trail文件位于dirdat目录下,默认为10MB,通过alter命令调整megabytes参数可控制大小。

Trail文件命名格式:两个字符+六个数字,其中两个字符可以自己设定,六个数字是系统自动从000000到999999的序列数,当序列数超过了999999的时候,又从000000开始。

头+记录信息:10.0版本以后的GoldenGate,会在Trail文件头部存储包含Trail文件信息的记录,而10.0之前的版本不会存储该信息。每个Trail文件中的数据记录包含了数据头区域和数据区域,数据头区域中包含事务信息,数据区域包含实际抽取的数据。CSN作为事务开始的标识存储在事务日志中和Trail文件中。

为了减小系统的I/O负载,抽取的数据通过大字节块的方式存储到Trail文件中。同时为了提高兼容性,存储在Trail文件中的数据以通用数据模式(一种可以在异构数据库之间进行快速而准确转换的模式)存储。当然,根据不同应用的需求,数据也可以存储为不同的模式。

默认情况下,Extract以追加的方式写入Trail文件。当Extract异常终止时,Trail文件会被标记为需要恢复。当Extract重新启动时会追加Checkpoint之后的数据到该Trail文件中。在GoldenGate 10.0之前的版本, Extract采用的是覆盖模式,即当Extract异常终止,则会将至上次完整写入的事务数据之后的数据覆盖现有Trail文件中的内容。

Trail文件会自动老化,并且允许进程可以在不打断的情况下维护这些Trail文件,设置PURGEOLDEXTRACTS参数可使GoldenGate自动删除(过期时间(优先)/文件数)Trail文件。

在这里插入图片描述

参考资料

作者:李卓奇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值