Oracle golden gate 技术详解

时间:2022-06-14 23:13:02

一、系统概述

Oracle Golden Gate (简称OGG)是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志(redo log)或归档日志(archive log)获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源端数据库与目标端数据库同步。OGG可以实现不通平台(包括不通操作系统,数据库)实现大量数据亚秒一级的实时复制,从而可以在业务连续性保障、在线报表、数据仓库、交易跟踪、数据同步、集中/分发、容灾备份、数据库升级和移植、异地或同城双活业务中心等多个场景下应用。同时,OGG可以实现一对一、广播(一对多)、聚合(多对一)、双向、点对点、级联等多种灵活的拓扑结构。

二、系统逻辑架构

OGG通过源数据库上的extract进程捕获redo log或者archive log,在本地或者目标端生产trail文件来存储捕获到的数据变化,将捕获的数据通过TCP/IP网络传输到目标。通过日志应用进程(replicat)将数据应用到目标端数据库。

Golden gate 主要包括5个关键组件,分别是:

1.manager

2.extract

3.pump data

4.trail

5.server collector

5. Replicat

三、进程作用

1.manager进程 (MGR)

Manager进程是GoldenGate的控制进程,运行在源端和目标端上,在目标端和源端有且只有一个manager进程.它主要作用有以下几个方面:

 启动、监控、重启Goldengate的其他进程,报告错误及事件,配置数据存储空间,发布阀值报告等.在整个系统的运行过程主备端manager进程都必须启动到running状态。

2.extract进程(EXT)

Extract运行在数据库源端,负责从源端数据表或者日志中捕获数据。Extract的作用可以按照时间来划分:

1)、数据初始化阶段:

在数据初始化阶段,Extract进程直接从源端的数据表中抽取数据。

2)、实时增量捕获阶段:

数据初始化阶段完成以后,Extract进程负责捕获源端数据库的实时增量变化(DMLDDL)

备注:OGG并不是对所有的数据库都支持ddl操作。

Extract进程会捕获所有已配置的需要同步的对象变化,但只会将已提交的事务发送到远程的trail文件用于同步。当事务提交时,所有和该事务相关的日志记录被以事务为单元顺序的记录到trail文件中。Extract进程利用其内在的checkpoint机制,周期性的记录其读写的位置,实现断点同步。通过上面的两个机制,就可以保证数据完整性.

多个Extract 进程可以同时对不同对象进行同步操作。例如,可以在一个extract进程抽取并向目标端发生事务数据的同时,利用另一个extract进程抽取的数据做报表。或者,两个extract进程可以利用两个trail文件,同时抽取并并行传输给两个replicat进程以提高同步性能。

Extract进程的状态:Stopped(正常停止),Starting(正在启动),Running(正在运行),Abended(Abnomal End缩写,标示异常结束)

一个 OGG 实例最多支持 300 个并发 extract replicat 进程,每个进程需要 25-55M 内存。

3.Pump进程

pump进程运行在数据库源端,pump进程本质是extract进程的一种特殊形式,如果不配置pump进程,extract进程将不会在数据库源端生成trail文件,extract进程在抽取完数据以后,直接投递到目标端,生成远程trail文件。如果配置了pump进程,pump进程将在数据库源端生成trail文件,然后把源端产生的本地trail(交易)文件以数据块的形式通过TCP/IP 协议发送到目标端,这也是Oracle官方推荐的方式。

Pump进程对应的叫Server Collector进程,这个进程不需要引起我们的关注,因为在实际操作过程中,无需我们对其进行任何配置,所以对我们来说它是透明的。它运行在目标端,其任务就是把Extract/Pump投递过来的数据重新组装成远程trail文件。

pump进程可以在线或者批量配置,他可以进行数据过滤,映射和转换,同时他还可以配置为“直通模式”,这样数据被传输到目标端时就可以直接生成所需的格式,无需另外操作。 直通模式提高了data pump的效率,因为生成后的对象不需要继续进行检索。

在大多数情况下,oracle都建议采用data pump,原因如下:

1)为目标端或网络问题提供保障:

如果只在目标端配置trail文件,由于源端会将extract进程抽取的内容不断的保存在内存中,并及时的发送到目标端。当网络或者目标端出现故障时,由于extract进程无法及时的将数据发送到目标,extract进程将耗尽内存然后异常终止。 如果在源端配置了data pump进程,捕获的数据会被先转移到本地磁盘上的trail文件内,防止了OGG异常终止的情况。当故障修复,源端和目标端恢复连通性时,data pump进程发送源端的trail文件到目标端。

2)可以支持复杂的数据过滤或者转换:

当使用数据过滤或者转换时,可以先配置一个data pump进程在目标端或者源端进行第一步的转换,利用另一个data pump进程或者 Replicat组进行第二部的转换。

3)有效的规划存储资源:

当从多个数据源同步到一个数据中心时,采用data pump的方式,可以在源端保存抽取的数据,目标端保存trail文件,从而节约存储空间。

4)解决单数据源向多个目标端传输数据的单点故障:

当从一个数据源发送数据到多个目标端时,可以为每个目标端分别配置不同的data pump进程。这样如果某个目标端失效或者网络故障时,其他的目标端不会受到影响可以继续同步数据。

4.Replicat进程

Replicat进程,称之为复制应用进程。运行在目标端,是数据传递的最后一站,负责读取目标端trail文件中的内容,并将其解析为DML DDL语句,然后应用到目标数据库中和Extract进程一样,Replicat也有其内部的checkpoint机制,保证重启后可以从上次记录的位置开始恢复而无数据丢失的风险。

Replicat 进程的状态包括Stopped(正常停止),Starting(正在启动)Running(正在运行)Abended(Abnomal End的缩写,标示异常结束)

5.Trail文件

为了持续地提取与复制数据库变化,GoldenGate将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就称为Trail文件,Trail文件主要用来存储事务变化信息(DDLDML事务操作记录),根据系统的不同配置和安全要求,Trail文件可以保存在源数据库上也可以保存在目标端数据库上,也可以在中间系统上保存。

源端数据库上的trail文件是可选的,如果在源端数据库上面设置了data pump进程,那么就会在源端数据库上创建trail文件,PUMP进程会利用TCP/IP协议将源端数据库上的trail文件以块级别传输给网络上的目标端数据库。

无论是否配置data pump进程,备库上的trail文件都是必须存在的(因为Replicat进程需要读取该文件中的DDLDML SQL用来应用),在数据库源端上的叫做 Local Trail 或者 Extract Trail;在目标端的叫做 Remote Trail

Trail文件的大小默认为10MB,以两个字符开始加上000000~999999的数字作为文件名。如:tmpdirectory01tr000001。默认情况下存储在GoldenGatedirdat子目录里。可以为不同应用或者对象创建不同的trail文件。同一时刻,只会有一个extract进程处理一个trail(交易)文件。

10.0版本以后的GoldenGate,会在trail文件头部存储包含trail文件信息的记录,而10.0之前的版本不会存储该信息。每个trail文件中的数据记录包含了数据头区域和数据区域。在数据头区域中包含事务信息,数据区域包含实际抽取的数据。

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

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

6.server Collector文件

Collector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里。Collector由分为动态和静态:

   动态 collector:由管理进程自动启动的 collector 叫做动态 collector,用户不能与动态 collector 交互;

   静态 collector:可以配置成手工运行 collector,这个 collector 就称之为静态 collector