Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

【GoldenGate】GoldenGate介绍

25 Oct 2019 » GoldenGate

1.Oracle GoldenGate 介绍

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

Oracle GoldenGate在多样和异构的基础IT平台中,可以在事务级别上进行数据交换和数据操作。在保证交易完整性和最小的开销的条件下,来迁移你已提交的业务,在目前现有的it架构中。它的模块化架构,可以让你更灵活地提取和复制你所选定的数据记录,交易的变化以及变化的DDL(数据定义语言)。

Note:  支持DDL,一定的拓扑结构,获取和传送不同的数据类型。详见Oracle GoldenGate installation and configuration documentation。 

这种灵活性的软件,Oracle Golden Gate支持过滤,传送,定制化处理的功能,可以支持你多种多样的业务需求。

  • 业务持续性和高可用性。
  • 数据初始化和数据库迁移。
  • 数据集成。
  • 决策支持和数据仓库。

图标1-1 Oracle GoldenGate 支持的拓扑结构

ogg01.jpg

1.2 Oracle GoldenGate 架构的概述

Oracle GoldenGate被用于如下用途:

  • 静态提取一个数据库的数据记录,用于加载到另一个数据库。
  • 持续性的提取DML和DDL的变化数据来保存源端和目标端数据库的一致性。

  • 提取一个数据库,复制到一个文件上。

Oracle GoldenGate由以下组件构成:

  • Extract (抽取进程)
  • Data pump (数据泵技术)
  • Replicat (复制)
  • Trails or extract files (跟踪文件和抽取文件)
  • Checkpoints (检查点)
  • Manager (管理进程)

  • Collector (收集进程)

图表 1-2 表述了GoldenGate的逻辑架构,用于数据初始化加载和DDL,DML语句操作的持续化同步。这是一个基本配置,可根据业务需求变化模型配置。

图标 1-2 Oracle GoldenGate 逻辑架构

ogg02.jpg

1.2.1 Extract的概述

Extract进程是Oracle GlodenGate的数据抽取机制。Extract运行在源端或者下游数据库上面,或者两者皆是。完全取决于业务所需的要求。 你可以通过以下其中一种方法配置Extract:
  • Initial loads (初始化加载):对于初始数据的加载,Extract进程可以直接从源端数据中抽取当前的,静态数据集

  • Change synchronization: (变化数据的同步):为了保持源数据与目标数据集的数据保持一致性,Extract进程可以捕获DML和DDL操作来保证同步性。

Extract进程通过下列的方法来捕获数据源:
  • Source tables (源数据表)

  • The database recovery logs or transaction logs (数据库恢复日志和事务日志)
  • A third-party capture module (第三方捕获模块)

​ 配置数据同步,Extract进程会捕获DML和DDl操作。Extract进程会一直存储这些操作直到收到包含这些操作的提交或者回滚事务的时候。当一个回滚事务接受后,Extract进程会丢弃掉这类操作日志。当一个提交事务接受后,Extract进程会保留这些操作在一堆名为trail的文件中,并将这些文件以队列的方式传送至target端。所有的事务操作都会有序地写入在trail文件中。这种设计保证了速度和数据的完整性。

Note:  extract进程会忽略掉不在Extract配置文件中的对象的操作。 

​ 多个提取过程可以同时在不同的对象上运行。例如:两个Extract进程可以并行地提取和传送到两个Replicat进程上(同时带着两个trail文件),用于保证最小化目标延迟。用于区分不用的Extract进程,你必须执行对每一个制定一个组名称(see Section 1.4, “Overview of Groups”).

1.2.2 Data Pumps的概述

Data Pump是在源端Oracle GoldenGate配置中第二类的抽取组。如果Data Pump技术不使用,Extract进程就必须发送那些已捕获的数据到远程跟踪(remote trail)文件中去。在运用Datapump的典型配置中。主要的抽取组会在源端写入到一个跟踪文件中。Data pump会读取这个跟踪文件,然后通过网络把数据传送至目标端的跟踪文件中去。Data pump技术增加了存储的灵活性,可以从TCP/IP活动中完全隔离出来。 一般来说,Data pump可以用于执行数据过滤,数据映射,数据转换,亦或者可以配置在pass-through模式中,这种模式可以让数据被动的转移且没有任何数据操作。pass-through模式提高了Data pump技术的吞吐量,因为所有查找对象定义的功能全部旁路化。 在绝大多数的商业案例中,你应该使用data pump技术。使用data pump技术的原因如下:
  • Protection against network and target failures(保护网络的传输失败和目标数据库失败)
  • You are implementing several phases of data filtering or transformation.(您正在执行数据过滤和数据转换的几个阶段)
  • Consolidating data from many sources to a central target. (来自多个数据源合并至一个集中数据库中)

  • Synchronizing one source with multiple targets.(一个数据源同步至多个目标数据库中)

1.2.3 Replicat的概述

​ Replicat进程运行在目标端数据库上,通过读取跟踪文件。然后获取DML和DDL操作记录并应用目标端数据库中。Replicat进程使用动态SQL来编译一个SQL语句,之后通过多次使用绑定变量来执行它。

你可以通过下列方式来配置Replicat进程:

  • Initial loads(初始化加载):对于初始数据的加载,Replicat进程直接应用一个数据备份集来应用至目标数据库中,并使用高速批量加载工具来加载数据。
  • Change synchronization:(变化数据的同步):配置数据同步,Replicat进程直接应用已经复制过来的源数据操作。应用的方式是使用本地数据库接口或者是ODBC,具体依据数据库类型。

​ 你可以使用多个复制进程,这些Replicat进程可以带着一个或者多个Extract进程和Data pump进程以并行地方式来增加吞吐量。为了保证数据完整性,每一个进程集能处理不同的一个对象集合。为了区分不同的Relicat进程,你可以为每一个组去一个名字(see Section 1.4, “Overview of Groups”).

​ 与使用多个Replicat进程不同的是,你可以配置一个以coordinated 或者integrated 模式的Replicat进程。

  • Coordinated模式

支持所有的数据库(GoldenGate产品能支持的数据库),在Coordinated模式下,Replicat是线程化的,一个Coordinated线程可以生成和协调多个线程来并发地执行多个SQL操作。一个Coordinated Replicat要使用一个参数文件而且要被作为一个单元来管理和监控,参见14.7节,”Creating an Online Replicat Group”.

  • Integrated 模式

    支持11.2.0.4 Oracle数据库版本或者之后的版本,在Integrated模式,Replicat进程是利用Oracle数据库中可用的进程功能。通过一个单一的Replicat配置,通过多个服务子进程来并行执行事务,用于保证原始事务的原子性。See Installing and Configuring Oracle GoldenGate for Oracle Database

​ 你可以使用延迟复制,通过等待一段时间之后,才应用相关的操作至目标数据库中,延迟复制是可取的。例如,为了防止错误的SQL扩展语句。延迟的时间由DEFERAPPLYINTERVAL参数控制。

​ 相关的其他参数,例如: BATCHSQL,GROUPTRANSOPS,MAXTRANSOPS参数的详细信息,可参考 Reference for Oracle GoldenGate for Windows and UNIX.

1.2.4 Trails的概述

为了保证连续地抽取和数据库变化数据的同步,Oracle GoldenGate会把捕获到的变化的数据临时放置到一连串的文件中,这些文件取名为trail。一个trail文件可以存储在源端,可以存储在一个中介系统,也可以存储在一个目标端,取决你如何配置Oracle GoldenGate。 在本地源端,此文件叫做extract file(或者是 local trail)。在远程端,此文件叫做 remote trail。

​ 通过使用跟踪(trail)文件来进行存储,OracleGoldenGate支持数据的准确性和容错性。 (see Section 1.2.6, “Overview of Checkpoints”)。跟踪(trail)文件的使用可以允许抽取和复制这两种工作活动完全独立工作,随着这些进程的分离,你可以有更多的选择来如何处理和传输数。例如,取代连续抽取和复制的工作,你可以连续抽取数据,但可以把它们放置在trail文件中,当目标应用需要他们的时候,再把这些文件传递到目标端。

1.2.4.1 那些写入和读取trail文件的进程

​ 主Extract进程和data-pump Extract进程会把数据写入到一个trail文件。每一个在线的Extract进程都链接这一个trail文件。只有主Extract进程可以写入到一个指定的local trail文件中。所有的local trail文件必须有不同的名称。

​ 多个data-pump Extract进程每一个都可以写入到一个相同名称的trail文件中,但是这些trail文件的物理结构是在不同的远程端的,其意思是数据物理分布的拓扑结构。例如,一个data-pump进程命名为1pump和一个data-pump进程命名为2pump同时驻留在sys01源端上,并写入一个remote trail文件,命名为aa。其中1pump写入的aasys02远程端上,2pump写入的aasys03远程端上。

读取trail文件的线程是:

  • Data-pump Extract进程:是从local trail文件中抽取DML和DDl的操作记录。这个local trail文件链接着一个之前的Extract进程(一般是主Extract进程),如果需要下一步操作。就需把数据传送到一个trail文件中,这个trail文件将由下一个Oracle GoldenGate进程读取(一般是Relicat进程,但也可能是另外一个Data-pump进程)
  • Replicat进程:读取trail文件,并应用已经复制过来的DML和DDl操作到目标数据库中。
1.2.4.2 Trail文件的生成和维护
Trail文件本身会在进程中自动生成,但是你需要为trail文件制定一个以两个字符命名的名字。当你配置Oracle GoldenGate的时候,可以通过ADD RMTTRAIL ADD EXTTRAIL命令进行配置。默认情况下,trail文件存储在Oracle GlodenGate目录下的dirdat子目录中。你可以制定一个6位还是9位的序列号,通过配置全局参数TRAIL_SEQLEN_9D | TRAIL_SEQLEN_6D。 默认是TRAIL_SEQLEN_9D全局参数。 Trail文件会自动老化,并且允许进程可以在不打断的情况下维护这些Trail文件。每一个新文件的生成,它会继承一个以两个字符+6位或者9位的独一的一个序列号。(例如c:\ggs\dirdat\tr000001)。当序列号达到999999的时候,它又会从000000编号开始。Trail文件可以通过PURGEOLDEXTRACTS这个管理参数进行清除。

​ 你可以创建一个以上的trail文件,用于分离来自于不同的对象或者不用的应用的数据。你连接的对象可以通过配置TABLE 或者SEQUENCE 参数来制定,对应的trail文件可以通过EXTTRAIL RMTTRAIL参数来制定。

​ 为了最大限度地提高吞吐量,并最大限度地减少系统上的I / O负载。提取的数据被发送到一个trail文件可以使用大块操作。交易的顺序会被保留。

见附录C,Appendix C, “About the Oracle GoldenGate Trail”

1.2.4.3 Trail文件升级到9位序列号

你可以升级现在的trail文件从6位序列号到9位序列号。使用convchk本地命令可以升级到一个9位的trail文件。通过停止Extract进程然后使用如下命令:

convchk extract trail seqlen_9d 

启动Etract进程

你也可以降级从9位到6位序列号,用如下命令:

convchk extract trail seqlen_6d 

1.2.5 Extract文件的概述

1.2.6 Checkpoints的概述

Checkpoints会存储当前进程的读写位置,用于保证恢复。CheckPoints会标记变化的数据,用于确保从Extract进程捕获的数据并通过Replicat进程应用到目标端的数据同步,防止冗余处理。他们提供容错机制,防止由于系统,网络,以及Oracle GlodenGate进程重启以前的数据丢失。对于复制的同步配置,CheckPoints确保多个Extract进程和Replicat进程从同一类trail文件集中读取数据。 Checkpoints的工作机制是通过进程间确认信息,防止信息在网络中丢失。Oracle GlodenGate有一个专有的保证信息传递的技术。 Extract进程会创建一个Checkpoints,用于存储数据源和trail文件的位置。因为Extract进程只捕获已提交的事务,因此它要保留所有打开事务的跟踪操作记录,他们提交的任何事件。 这就需要Extract进程去记录一个checkpoint,这个检查点会在当前读取事务日志,和加上最开始打开事务的起始位置,这个位置可以在任何先前的日志中。 在一个数据库中断之后,为了控制一定数量的事务日志可以被重新处理。Extract进程会在一定的时间间隔中保留当前的状态和把数据处理到硬盘中,包括长运行事务的状态和数据。 如果Extract进程在这些时间间隔中的一个间隔停止了,它可以从上一个检查点对应的时间间隔的位置恢复起来。而不是从最早的那个长运行事务最开始的那个日志位置运行。See the BR parameter in Reference for Oracle GoldenGate for Windows and UNIX for more information.
Relicat进程会为trail文件的位置创建一个checkpoint。Replicat进程会保存这些checkpoint在一个表中,名字为checkpoint表,存储在目标数据库中,同样也存储在一个checkpoint文件中。这个checkpoint表会存储用户定义的名字和位置。Checkpoint文件会存储在dirchk子目录中。 每次事务完成后,Replicat进程会被那个事务的信息写到checkpoint表中的一行记录中。结合一个特定trail文件的独一位置。当一个事务完成以后,Replicat进程也会写一个检查点到checkpoint文件中。每隔一段时间,Replicat进程会把它当前读取的位置写入至checkpoint文件中。这些位置通常不是事务的边界,但会是事务的某一个点。间隔时间的长度由CHECKPOINTSECS参数决定。 因为checkpoint表是数据库的一部分,可以获得数据库恢复机制的益处,它为replicat进程提供了一个更有效的恢复点机制。在checkpoint文件中最后一个checkpoint可能不是事务的边界。它可能是事务的中部,并且没有别Replicat进程或者一个更早的事务应用。checkpoint表可以确保事务的边界,并且每个事务只执行一次。Checkpoint表的信息在某些情况下可以用于恢复,但它的主要用途,例如GGSCI的info命令。 定期备份Oracle GlodenGate环境, 包括trail文件。应该与你的数据库备份,恢复和保留策略相匹配。恢复数据库(有checkpoint表的情况下)到一个较早的时间段会引起Replicat进程回去读取匹配当时时间的checkpoint的对应位置。如果这个时间段的跟踪文件已经老化,他们必须从备份中进行恢复。要了解trail文件如何维护和老化的,可查看 “Overview of Trails”.

1.2.7 Manager的概述

Manager进程是Oracle GlodenGate的控制进程。Manager进程必须运行在各个Oracle GoldenGate环境中在Extract进程和Replicat进程开始之前,这些进程同时运行才能保证资源管理功能可以正常运行。 Manager进程执行如下动作: 启动Oracle GoldenGate的进程
  • 启动动态进程

  • 维护进程的端口号

  • 执行跟踪管理

  • 创建事件、错误和阈值报告

一个Manager进程可以控制多个Extract进程或者Replicat过程。See Chapter 3, “Configuring Manager and Network Communications” for more information about the Manager process and configuring TCP/IP connections.

1.2.8 Collector的概述

​ Collector进程是一个运行在目标端的后台进程,当数据同步是在线活动的情况下,Collector进程是运行着的,它会做以下操作:

  • 从远端的Extract进程中获取一个连接Manager进程的连接请求。扫描并绑定一个端口号,并把这个端口号发送给Manager进程,让它分配一个任务用于请求Extracat进程。

  • 通过Extract进程获取到的变化地数据记录,写入至一个trail文件中。Manager进程会自动开启Collector进程,这个操作用户不用干预。Collector进程只接受一个Extract进程,所以Collect进程是为Extract进程而生的,当Extract进程终止后,Collect进程也会终止。

​ 默认情况下,Extract进程会在源端建立一个TCP/IP连接来桥接目标端的Collector进程,但是Oracle GoldenGate 配置后也可以让Collector进程发起TCP/IP连接。如果需要的话,初始化连接可以从目标端发起,例如:目标端是一个受信的网络区域,但源端不是一个受信的网络区域。

1.3 处理类型的概述

根据需求,Oracle GoldenGate配置处理如下:

一个在线的Extract进程或者Replicat进程直到用户干预停止。在线进程会在trail文件中维护检查点,所以中断后可以及时恢复。你使用在线进程可以不间断地抽取数据并且复制DML和DDL操作来保持源端和目标端的数据同步。EXTRACT和REPLICAT参数可以应用此处理类型。

一个source-is-table(也可以被称为初始化加载抽取)extract进程可以从源数据库中的一组静态对象数据直接加载到另一个数据库中。这个过程不需要检查点,SOURCEISTABLE参数应用此处理类型。

一个special-run Replicat进程,会在已知开始位置和终点位置的情况下应用数据。你可以使用special Replicat进程来初始化加载数据,也可以通过批处理trail文件也加载数据,例如只执行一天的跟踪数据而不是持续进行。这个过程不需要维护检查点,因为运行的时间点都是已知的。可以通过SPECIALRUN参数来配置。

Extract进程直接通过TCP/IP与Replicat进程通信是远程工作的一种特殊类型。既不是一种Collector进程也不是把临时数据存储在trail文件中。这个远程任务可以通过RMTTASK参数来定义。

1.4 Groups的概述

​ 为了在一个环境中区分多个Extract进程和Replicat进程。你需要定义进程组。例如,为了可以并行的方式复制不同的数据集,你需要创建两个Replicat进程组。

​ 一个进程组有一个进程(或者是Extract进程亦或者是Replicat进程),对应的参数文件,对应的checkpoint文件,以及与进程相关的其他文件。对于Replicat进程,一个组还需包含checkpoint表。你可以通过ADD EXTRACT ADD REPLICAT 命令定义组。

​ 所有的文件和checkpoints都可以在组本身中共享,任何时候你可以通过命令来控制和查看处理,通过你提供的组名或者对应的多组的一个通配符。

1.5 提交序列号(CSN)的概述

当在使用Oracle GoldenGate的时候,你需要参考提交的序列号,CSN是Oracle GoldenGate构建中一个保证事务一致性和数据完整性的标识符。它是代表一个事务提交到数据库中的唯一时间点。 CSN可以要求Extrcat进程在事务日志中哪个位置提取数据,和重新定位Replicat进程中的trail位置,或做其他用途。 See Appendix D, “About the Commit Sequence Number” for more information about the CSN and a list of CSN values per database.