Oracle GoldenGate介绍

Oracle GoldenGate介绍

原网页:Introduction to Oracle GoldenGate

本章介绍了Oracle GoldenGate的功能、术语、处理逻辑及应用架构。

本章包含下面几节:

    • Oracle GoldenGate介绍
      • 1 Oracle GoldenGate 支持的处理方式和数据库
      • 2 Oracle GoldenGate 架构介绍
        • 21 抽取进程Extract
        • 22 传输进程Data Pumps
        • 23 复制进程Replicat
        • 24 数据文件Trails
          • 241 写入读取Trail的过程
          • 242 创建和维护Trail
          • 243 将现有的Trails转换成9位数字序列
        • 25 抓取文件Extract Files
        • 26 检查点Checkpoints
        • 27 控制器Manager
        • 28 收集器Collector
      • 3 处理类型Process Types
      • 4 组Groups
      • 5 提交序列号Commit Sequence Number CSN

1.1 Oracle GoldenGate 支持的处理方式和数据库

Oracle GoldenGate支持在多个异构的平台之间在事务层上交换与处理数据。 软件在保证事务完整而最小程度影响已有基础设施的情况下移动已提交的事务数据。软件的模块式架构能够在多种拓扑架构下对选择的数据记录、事物变化和DDL(data definition language数据定义语言)的变化实现灵活的抽取及复制。

利用Oracle GoldenGate的灵活性及其过滤、转换和定制特性,可以实现以下需求

  • 业务持续及高可用性
  • 数据库初始填充及迁移
  • 数据集成
  • 决策支持及数据仓库

Figure 1-1 Oracle GoldenGate 支持的拓扑结构

Oracle GoldenGate介绍_第1张图片

1.2 Oracle GoldenGate 架构介绍

Oracle GoldenGate可以配置实现下列目的:

  • 从数据库静态抽取数据记录并装载进另一个数据库。
  • 持续抽取和复制事务性DML(Data Manipulation Language数据操作语言)的操作和DDL的变化(需要数据库支持),保证源端和目标端数据一致。
  • 从数据库抽取数据并复制至外部文件中。

Oracle GoldenGate由下列组件组成

  • Extract
  • Data pump
  • Replicat
  • Trails or extract files
  • Checkpoints
  • Manager
  • Collector

Figure 1-2 描述Oracle GoldenGate的逻辑架构, 包括初始数据装载和DML、DDL操作的同步。这只是一个基础配置,建议根据业务需求进行调整。

Figure 1-2 Oracle GoldenGate逻辑架构

Oracle GoldenGate介绍_第2张图片

1.2.1 抽取进程:Extract

Extract进程是Oracle GoldenGate的抽取(捕获)途径。Extract运行在源系统或者下游数据库或者两者都有,这取决于数据库和实现需要。

可以根据以下方式配置Extract:

  • 初始装载:初始化数据装载是指,Extract直接从源对象上抓取一份当前的静态数据集。
  • 变化同步:为了使源数据与另一数据集同步,Extract在初始化同步完成后抓取DML和DDL操作。

Extract 从数据源中抓取以下内容:

  • 原表,如果运行的是初始装载。
  • 数据库恢复日志或者事务日志(比如Oracle redo logs或者SQL/MX审计文件)。实际日志抓取的方式要根据数据库类型确定。比如,Oracle GoldenGate for Oracle提供一个完整抓取模式, Extract直接与Oracle事务流的日志挖掘服务器交互。参考Oracle GoldenGate for Oracle Database 安装与配置中的”About Integrated Capture” 章节获取关于完整抓取模式的详细内容。
  • 第三方抓取模块。这种方式提供一个从外部API到Extract API的数据及元数据通讯层。数据库供应商或者第三方供应商提供抓取数据操作并传输到Extract的组件。

为数据同步做配置时,Extract抓取了在Extract配置上指定对象的DML和DDL操作。 Extract先保存这些操作直到其收到这些操作所在事务的提交指令或者回退指令。如果收到回退指令,Extract抛弃这个事务的操作。如果收到提交指令,Extract保存这个事务到磁盘文件里,文件会进入队列发送到目标系统中,这类文件称为trail 。所有事务操作都会有序组织成事务单元写进trail里。这种设计同时确保了同步速度与数据完整性。

注意:

Extract会忽略不在Extract配置里声明的对象的操作,就算这个事务包含了在Extract配置里声明的对象的操作。

多个Extract进程可以同时操作不同对象。比如,两个Extract进程同时抓取并传输(两个持续更新的trail文件)至Replicat进程,在数据库很大时可以减少延时。为了区分不同的Extract进程,可以为每个进程分配一个组名(参考Overview of Groups)。

1.2.2 传输进程:Data Pumps

data pump在Oracle GoldenGate 配置里属于第二组Extract。如果不使用data pump,Extract必须将抓取到的数据操作发送到目标端的远程trail文件。在使用data pump的经典配置里,第一组Extract写入源系统里的trail文件。data pump读取这个trail文件并将数据操作通过网络发送到目标端的远程trail文件。data pump使存储变得弹性,并将第一组Extract进程与TCP/IP活动进行隔离。

通常,data pump可以实现数据过滤,映射和转换,或者将其配置为pass-through mode,这样数据就可以不加处理地原样传输过去。Pass-through mode增加了data pump的吞吐率,因为所有需要查找对象定义的功能都被忽略了。

虽然data pump属于可选配置,Oracle大多数情况下还是建议配置上。一些需要用到data pump的原因包括:

  • 网络与目标端失败保护。在一个简单的Oracle GoldenGate配置里,只有目标端的trail文件, 源系统没有地方保存Extract持续不断抓取进内存的数据操作。如果网络或者目标端系统不可用,Extract会消耗光所有内存然后异常中止。但是,通过源系统上的trail文件和data pump进程,被抓取的数据能够移动到磁盘上,防止了第一组Extract的异常中止。当目标端访问恢复时, data pump会从源trail里抓取数据并发送到目标系统上。
  • 实现多种数据过滤和转换。在使用复杂的过滤或数据转换配置时,可以在源系统或者目标系统,甚至中间系统的data pump里配置第一次数据转换,然后使用另一个data pump或者Replicat组来配置第二次数据转换。
  • 将多个源数据汇总至一个目标端。在将多个源数据库同步汇总至一个中央目标端时,可以通过各个源系统的data pumps将各个源系统上抓取的数据发送至目标端的一个trail文件里。将源系统和目标端系统的存储负荷区分开可以减少目标端系统为了与多个源同步而使用的磁盘空间。
  • 一个源与多个目标端同步。在发送数据到多个目标端时,可以为每一个目标端配置一个源系统data pump。就算其中部分目标端连接失败,数据依然可以发送至其他目标端。

1.2.3 复制进程:Replicat

Replicat运行在目标端系统,读取系统上的trail文件,重新构造DML或DDL操作并应用到目标端数据库上。Replicat使用动态SQL来编译一次SQL语句,然后可以绑定不同变量执行多次。

可以根据以下方式配置Replicat:

  • 初始装载: 在初始装载时,Replicat可以将一份静态数据应用到目标端对象上,或者将数据传输到高速高容量设备上去。
  • 变化同步: 在同步数据变化时,Replicat将从源端的操作重复应用至目标端对象,可以通过原生数据库接口或者ODBC,这根据数据库类型而定。

可以让多个Replicat进程与一个或者多个Extract进程和data pumps同步工作以提供效率。为了保证数据完整,每一组进程控制一组不同的对象。为了区分不同的Replicat 进程,可以为每个进程分配一个组名(参考Overview of Groups)。

不用多个Replicat进程的情况下, 也可以配置一个Replicat实现coordinated或integrated模式。

  • Coordinated模式支持所有Oracle GoldenGate支持的数据库。在coordinated模式,Replicat被线程化了。一个coordinator线程产生和协调一个或多个执行同时复制SQL的线程。一个coordinated Replicat使用一个参数文件,并以一个独立单元被监控和管理。参考 Creating an Online Replicat Group
  • Integrated模式支持Oracle版本11.2.0.4及以上。在integrated模式,Replicat影响了Oracle数据库本身的应用处理功能。通过一个单独的Replicat配置, 很多入站的服务器子处理器,也叫apply servers在保证原始事务原子性的情况下同时应用事务操作。参考Installing and Configuring Oracle GoldenGate for Oracle Database

可以推迟Replicat一段时间才应用复制的操作至目标数据库。推迟也有用,比如,防止错误的SQL传播,控制不同时区的数据到达时间,或者让其他安排好的计划先执行。推迟的长度可以通过DEFERAPPLYINTERVAL 参数值控制。

有很多参数可以控制Replicat如何进行源和目标事务转换。这些参数包括BATCHSQL, GROUPTRANSOPS, and MAXTRANSOPS。更多关于Replicat参数的信息,参考Reference for Oracle GoldenGate for Windows and UNIX

1.2.4 数据文件:Trails

为了支持对数据库变化的持续抽取及复制,Oracle GoldenGate临时保存抽取的变化记录到一系列磁盘文件上,这种文件称为trail。trail可以出现在源系统、中间系统、目标系统、或这些系统的任意组合,主要看如何配置Oracle GoldenGate而已。在本地系统上通常称之为extract trail (或者local trail)。在远程系统上通常称之为remote trail。

通过使用trail进行存储,Oracle GoldenGate支持数据准确性及容错(参考Overview of Checkpoints)。使用trail也可以让抽取与复制过程相互独立。这些进程分离时,就可以更自由地选择数据该如何处理和传输。比如,抽取变化后并不马上同步,持续抽取变化并保存至trail,等到目标应用需要用到时才同步过去。

  • Processes that Write to, and Read a Trail
  • Trail Creation and Maintenance
  • Converting Existing Trails to 9 Digit Sequence Numbers
1.2.4.1 写入、读取Trail的过程

第一组Extract和data-pump Extract写入trail。所有在线的Extract进程都必须通过trail连接起来。只有一个Extract进程可以写入一个指定的local trail。所有local trails必须有不同的名称。

大多数data pump Extract进程可以写入一组相同名称的trail,但是这些trails物理文件本身必须在不同的远程系统上,比如在一个数据分布系统上。比如,一个data pump名称为1pump而另一个data pump名称为2pump都运行在系统sys01上,都写入一个remote trail名称为aa。Data pump 1pump写入的trail aa在系统sys02上,而data pump 2pump写入的trail aa在系统sys03上。

读取trail文件的进程包括:

  • Data-pump Extract: 从之前一组Extract(通常为第一组Extract)写入的local trail抓取DML和DDL操作,可能进行一些处理,然后传输到一个trail文件,以便下一个Oracle GoldenGate进程(通常为Replicat,根据需要也可以是另一个data pump)读取。
  • Replicat: 读取trail然后应用DML和DDL操作到目标数据库。
1.2.4.2 创建和维护Trail

trail文件在处理过程中按需创建,但是可以为trail指定两个字符的名称, 在Oracle GoldenGate配置中使用 ADD RMTTRAIL 或 ADD EXTTRAIL 命令。默认情况下,trails文件保存在Oracle GoldenGate 文件夹的dirdat子目录下。可以通过TRAIL_SEQLEN_9D | TRAIL_SEQLEN_6D全局参数指定9位或6位数字序列;默认为TRAIL_SEQLEN_9D。

Trail自动递增,让处理过程可以不因文件维护而中断。每个新文件创建时,会使用两个字符的trail名称加上唯一的9位顺序码000000000 through 999999999 (比如 c:\ggs\dirdat\tr000000001)。当顺序码到达999999999时,数字重新从000000000开始,而先前的trail文件会被覆盖。Trail可以通过设置Manager 参数PURGEOLDEXTRACTS来达到例行删除的目的。默认是9位数字的trail文件。

可以创建一个以上的trail来分离不同对象或应用数据。为trail指定TABLE 或 SEQUENCE参数将对象连接起来,并在Extract配置文件中指定EXTTRAIL 或 RMTTRAIL 参数为该trail文件。

为最大化吞吐量,为减小系统IO负载,抽取数据以大数据块方式传输。事务顺序也会保留。

参考About the Oracle GoldenGate Trail

1.2.4.3 将现有的Trails转换成9位数字序列

为已经命名的extract组将其9位数字trail转换成6位数字checkpoint记录。使用convchk 原生命令可以转换至9位trail,先安全停止Extract,然后如下使用convchk 来升级:

convchk extract trail seqlen_9d

启动Extract。

也可以使用同样的convchk 命令来从9位数字降级到6位数字trail:

convchk extract trail seqlen_6d

1.2.5 抓取文件:Extract Files

在一些配置里,Oracle GoldenGate保存抓取数据到extract file 里而不是 trail。extract file 可以是一个单独文件,或者根据操作系统的文件大小限制需要配置为反复使用的多个文件。在这个意义上,它跟trail很相似,除了不记录checkpoints之外。文件在运行过程中自动创建。同样的版本特色可以应用于trails的也可以应用于extract files。

1.2.6 检查点:Checkpoints

Checkpoints 保存着当前进程的读和写的位置到磁盘上以便错误恢复。 Checkpoints保证了需要同步的数据确实被Extract抓取并且被Replicat写入至目标端,并保证没有错误的重复操作。Checkpoints提供了容错机制使得在系统、网络或者Oracle GoldenGate进程需要重启时防止数据丢失。在复杂的同步配置中,checkpoints保证了多个Extract 或Replicat 进程读取的是同一个trails集。

Checkpoints 通过进程级声明来防止因网络错误而丢失数据。这是Oracle GoldenGate 专利的数据送达技术。

Extract 为其到达的数据源和trail中的位置创建checkpoints因为Extract只是抓取已经提交的事务,它追踪了所有已经启动的事务下的操作,并关注哪些事务被提交了。 这时Extract 就需要一个 checkpoint 来记录它现在读取的事务日志的哪个位置,加上最先启动事务的开始位置,这个最先启动的事务可能在当前日志或在先前的日志里。

为了控制因Oracle数据库中断而必须重新处理的事务日志的数量,Extract 也会定期保存当前状态和处理中的数据到磁盘中,包括那些长时间运行的事务状态及数据。 如果Extract 在状态保存期之后停止,也可以在最后一个保存期或最后一个checkpoint恢复状态,而不用返回检查原始的事务日志。 参考 BR 参数, Reference for Oracle GoldenGate for Windows and UNIX

Replicat 为trail里的位置创建checkpointsReplicat 保存这些checkpoints在一个表里,称为 checkpoint table,保存在目标端数据库里,也会在磁盘上保存checkpoint文件。checkpoint table保存为一个用户指定的名称和位置。checkpoint 文件保存在Oracle GoldenGate 文件夹的dirchk 子目录下。

每个事务完成的时候,Replicat 往checkpoint table写入一行关于这个事务的信息,并使指定trail文件的唯一位置与这个事务相关联。Replicat在事务完成时也会将checkpoint写入checkpoint file。Replicat也会定期写入其当前读取位置至checkpoint文件。这些位置一般不在事务边界上,而是事务内部的某个位置。定期间隔的长短由CHECKPOINTSECS 参数控制。

因为checkpoint table是数据库的一部分,其利用了数据库恢复系统的优势,为Replicat提供了更有效率的恢复能力。checkpoint file中最后的checkpoint可能不是最近的事务边界。可能在Replicat还没来得及应用的事务的中间或者先前已经应用过的事务。checkpoint table保证Replicat从正确的事务边界开始,让每个事务只应用一次。checkpoint table的信息可以在一些情况下用于恢复,但是这些信息主要还是用于其他目的,例如GGSCI下的INFO命令。

常规Oracle GoldenGate环境的备份,包括trails,应该要符合数据库备份、恢复和保留策略。恢复数据库(里面包括checkpoint table)至一个早期版本会导致Replicat重新定位至较早的、当时使用的checkpoint。如果当时使用的trail文件已经过时失效,这些文件必须从备份恢复。为了明白trail是如何维护和过时的,参考”Overview of Trails”.

Checkpoints 在配置为不持续的类型中不是必要的,例如一次批装载或初始装载。这种情况下如果出错,进程可以从初始点重新启动。

更多关于checkpoint和checkpoint table,参考About Checkpoints

1.2.7 控制器:Manager

Manager 是Oracle GoldenGate的控制进程。Manager 在每个系统上必须通过Oracle GoldenGate 配置在 Extract 或 Replicat 启动前运行,并且其他进程运行时Manager 必须保持运行,才能使资源管理功能正常工作。Manager 具有下列功能:

  • 启动 Oracle GoldenGate 进程
  • 启动动态进程
  • 维持进程端口号
  • 进行trail 管理
  • 创建事件、错误、阈值报告

一个Manager 可以控制很多个Extract 或Replicat 进程。在Windows系统下,Manager 可以以服务形式运行。更多关于Manager进程和TCP/IP连接配置,参考Configuring Manager and Network Communications

1.2.8 收集器:Collector

Collector 是一个当持续、在线的同步正在发生时在目标端系统的后台运行的进程。 Collector 做了下列工作:

  • 当一个远程Extract连接请求发送至Manger时,扫描并绑定一个有效的端口,然后发送端口号给Manager分配至Extract 进程。
  • 收到Extract发送的数据库变化抽取内容并写入trail文件。Manager 在需要一个网络连接时自动启动Collector ,所以Oracle GoldenGate 用户并不需要与之交互。 Collector只能从一个Extract 进程处收取信息,所以每个Extract都有一个对应的 Collector。Collector在与之关联的Extract终止时终止。
Note:
Collector 在有需要情况下可以手工运行,称之为static Collector(相反情况下就是正常的dynamic Collector)。几个Extract 进程可以共享一个static Collector;但是,一个对一个还是最好的。一个static Collector可以保证进程运行在指定端口上。更多关于static Collector参考 Reference for Oracle GoldenGate for Windows and UNIX 。更多关于Manager如果分配端口,参考Configuring Manager and Network Communications 

默认情况下,Extract 从源系统向目标端的Collector启动 TCP/IP 连接,但是Oracle GoldenGate 可以配置为Collector从目标端启动连接。从目标端启动连接可能在某些情况下有用,比如,目标端在一个可信网络域里,而源端在一个不可信网络域里。

1.3 处理类型:Process Types

根据需要,Oracle GoldenGate可以配置为下列处理类型。

  • online Extract 或 Replicat 进程保持运行直至用户停止。 Online 进程维护着trail里的恢复 checkpoints所以处理过程可以在中断后恢复。使用online进程来持续抓取和复制DML 和DDL 操作使得源与目标端对象同步。这种处理类型由参数EXTRACT 和REPLICAT 配置。
  • source-is-table (也称为初始载入Extract)Extract 进程直接从源对象抓取当前静态数据以便为另一数据库进行初始装载。这种处理类型不使用checkpoints-。这种处理类型由参数SOURCEISTABLE 配置。
  • special-run Replicat 进程应用已知的开始与结束节点。可以用special Replicat 执行一次初始载入,也可以用于online Extract 来实现trail变更数据批应用,应用于一次一日的数据而不是持续的。这种处理类型不维护checkpoints,因为可以重复执行同一个开始及结束节点。这种处理类型由参数SPECIALRUN 配置。
  • remote task 是一个特殊的,由 Extract 直接通过TCP/IP与 Replicat 通讯的初始装载过程。 Collector 进程或 trail 或 file 都不会使用到。这个 task 是由 Extract 参数文件里的参数 RMTTASK 定义的。

1.4 组:Groups

为了区别系统上不同的Extract 或Replicat 进程,可以定义processing groups(处理组)。比如,为了同时复制两组不同的数据,可以创建两个Replicat groups。

processing group 由一个进程(Extract 或 Replicat,进程的配置文件,进程的checkpoint 文件,和其他与这个进程关联的文件构成。对Replicat来说,一个group 可能包括相关联的checkpoint table。使用Oracle GoldenGate命令接口(GGSCI)里的 ADD EXTRACT 和ADD REPLICAT 命令来定义一个group。

一个group内所有文件和checkpoints 共享这个group本身的名称。任何时候通过命令控制或者查看处理过程时,可以使用一个 group 名称或者多个group 名称的通配符。

1.5 提交序列号:Commit Sequence Number (CSN)

使用Oracle GoldenGate时,需要留意到Commit Sequence Number, 或者CSN。CSN 是Oracle GoldenGate 为了维护事务一致性和完整性而构造来标识一个事务的标识符。它标识了事务何时提交至数据库的时间点。

CSN 用于 Extract 定位事务日志,用于Replicat重新定位trail,或其他目的。它可以由一些转换函数返回,也包含在报告和GGSCI精确输出里。

更多关于CSN和每个数据库的一系列CSN值,参考About the Commit Sequence Number

你可能感兴趣的:(oracle)