Oracle Golden Gate原理简介
Golden Gate简介
Oracle Golden Gate是一种基于日志的结构化数据复制备份软件,它通过解析Source Database在线日志或归档日志获得数据的增量变化,再将这些变化应用到Target Database,从而实现源数据库和目标数据库之间的同步。
Oracle Golden Gate可以实现在IT异构平台之间实现大量数据秒级的实时同步,由于其功能强大,所以用于很多应用系统,像在线报表系统、实时数据仓库供应、数据同步、数据移植、双业务中心等;同时,Oracle Golden Gate可以实现一对一、一对多、多对一、级联等多种拓扑结构。
Oracle官方也提供了Oracle Golden Gate软件下载和在线学习文档(11g R2)。
Oracle Golden Gate可以在以下的情况下被配置:
1. 从一个数据库静态提取数据,将这些数据加载到另外一个数据库
2. 为了使源库和目标库保持一致,连续性的提取和复制事务的DML操作和DDL改变
3. 从数据库中提取数据,复制到数据库外部的一个文件中
下图展示了一个用于初始化数据和同步DML/DDL操作的Oracle Golden Gate逻辑架构图,这种被建议的可变化模式依赖于业务需求。
此进程运行的Source System,它是Golden Gate的Extraction(capture提取)机制,其主要用于以下目的:
1. Initial Loads:初始化加载数据,从源对象直接捕获提取一个当前的、静态的数据集(这里是指用EXPDP/IMPDP工具把数据从源库导入到备库,对此工具还不了的的同学可以参考Oracle工具EXPDP详解& IMPDP详解)
2. Change Synchronization:改变同步,在初始化同步完成后Extract捕获DML & DDL操作,使Source Database与另一个数据集保持同步。
Extract可以通过以下方式捕获源数据库数据:
1. 如果是初始化加载,可以直接从Source Tables捕获
2. 从数据库的Recovery Logs或者Transaction Logs(像Oracle的Redo Log或者是Sql/MX的Audit Trails),实际中捕获数据的方法依赖于数据库类型
3. 第三方捕获模块,此方式提供了一个通讯蹭,将数据和源数据从外部的API传送到Extract API,由数据供应商或者第三方供应商提供该组件。
当Extract配置为Change Synchronization时,Extract会对其配置的对象上执行的DML & DDL进行捕获,Extract存储这些操作直到该操作的事务提交或者回滚;当收到的是事务回滚时,Extract会丢弃这个事务中的操作,当收到的是事务提交时,Extract会将这个事务持久化到磁盘上的一系列文件中,此类文件叫Trail,这些文件排队等待被传输到Target Database。事务中的所有操作以序列化被组织的事务单元写入到Trail中,这种设计即确保了速度也保证了数据的完整性。
可以同时配置多个Extract进程去操作不同的对象。例如,当数据变动量太大的时候,可以使用两个Extract进程并行提取和传送到两个Replicat进程以最小化目标等待时间,每个Extract需要分配一个Group。
此组件是Oracle Golden Gate配置在Source端的二级Extract Group,如果Data Pump没有被使用,那么Extract要负责将捕获的操作传送到Target端的Remote Trail。在使用Data Pump的典型配置中,Primary Extract进程只负责将捕获的操作写入到Source Database的Trail文件中,Data Pump负责读取这些Trail通过网络将其传送到Target Database的Remote Trail。Data Pump增加了存储的灵活性,并且实现了Primary Extract进程与TCP/IP的有效隔离。
通常情况下,Data Pump能够执行过滤、映射、转换等操作,或者也可以将其设置为Pass-through模式,这种模式下数据被动传输,这种模式增大了Data Pump的吞吐量,因为可以绕过查找对象定义的功能。
使用Data Pump有以下优点:
1.对于网络和目标失败的保护
对于一个基础配置的Golden Gate中,只有Target端有一个Trail,Extract连续在内存中抽取数据而不在Source端存放Trail,如果网络或者目标端变的不可用,那么Extract进程可能会因内存不足而abend异常终止。当网络或目标端恢复正常时,data pump会将从Source端的Trail中捕获的数据发送到Target端。
2.可以实现多个阶段的数据过滤
当需要复杂的数据过滤时,可以使用data pump在source端或者target端,甚至在intermediary system中间系统上执行第一次过滤,然后使用另一个data pump或者replicate执行第二次过滤。
3. 合并来自多个数据源的数据到一个目标
当需要同步来自多个源的数据库到目标系统的时候,可以在每个Source端配置Extract抽取进程,然后在每个Source端使用data pump将他们传送到target的trail中。这样可以分割source和target的存储负载
4. 单Source对多Target
当需要对多个Target进行同步时,可以在每个Target端设置一个data pump,这样任意一个Target出现问题,数据可以继续发送到其他的Target,保证数据的有效性。
此组件运行在Target端,它读取系统上的Trail文件,并重新架构DML和DDL操作,将它们应用到目标数据库。你可以配置Replicat进程用于以下目的之一:
1. Initial Loads:用于初始化数据加载,
2. Change Synchronization:当配置为Change Synchronization时,Replicat进程使用本地数据库接口或ODBC,依赖于数据类型,将从Source复制来的数据操作应用到Target;为了保证数据的完整性,Replicat按照源端提交的方式应用复制操作。
可以配置多个Replicat进程并发来提高吞吐量,为了保证数据的完整性,不同的Replicat进程处理不同的对象集,需要为每个Replicat进程分配一个Group。
可以延迟复制使它在应用复制的操作到目标之前等待一个你指定的时间。这个延迟是可以被设计的,比如预防错误的SQL传播、控制来自不同时区的数据的到达、或者给予另一个计划的事件发生的时间。这个延迟的长度由参数DEFERAPPLYINTERVAL控制
为了支持对数据库改变连续的提取和复制,Oracle Goldengate将捕获改变的记录临时的存储在磁盘上的一系列的文件中,这一系列文件叫做trail。Trail能够出现在source端、target端、intermediary端或者他们的组合,这依赖于你怎么配置Oracle Goldengate。在local system它被称为extract trail(local trail)。在remote system它被称作remote trail。
使用trail作为存储,Oracle Goldengate支持数据准确性和容错。使用trail也使提取和复制活动彼此独立的发生。由于这些进程的分离,对于数据的处理和交付你有了更多的选择。比如替代提取和复制连续的发生,你可以让提取连续发生,当target需要的时候再进行复制处理。
写Trail进程:
Source端的Extract和Data Pump进程负责写Trail,并且每个extract进程必须连接到一个Trail。
读Trail进程:
Data-pump Extrac:从连接到前一个Extract的Local Trail里提取DML和DDL操作
Replicat:读取Trail文件,并且把复制过来的DML和DDL应用到目标数据库
Trail的创建和维护:
Trail文件在处理期间会自己创建,但是你需要在使用ADD EXTTRAIL或ADD RMTTRAIL将它添加到Oracle Goldengate配置时给它指定一个两个字符的名字。默认情况下,trails存放在Oracle Goldengate安装目录下的dirdat子目录下。
完整的trail文件不需要内部维护会自动增长以支持连续处理。当每一个新的trail文件创建时,它会继承两个字符的名字并在后面追加一个唯一的6位序列数字,这个序列从000000到999999,例如:/home/ogg/dirdat/lt000001,当数字到达999999时,下一个序列将从000000开始。
你可以创建多个trail以分离不同的对象或应用。你可以通过在extract参数文件中的table和sequence参数前添加exttrail或rmttrail参数来指定与对象连接的trail。增长的trail可以通过Manager参数文件中的PURGEOLDEXTRACTS参数进行purge。
Extract files组件:
在一些配置中,Oracle Goldengate提取的数据存储在一个extract file中而不是一个trail,这个extract file可以是一个单独的文件,也可以是一个由于操作系统的文件大小限制被配置成多个滚动文件。在这个场景中,它类似于一个trail文件,只是它不记录checkpoint,文件在运行时自动创建。适用于trail的相同的版本功能也适用于extract file。
为了恢复的目的,Checkpoints进程存储当前写和读到磁盘。Checkpoints是为了确认需要同步而被标记的数据的改变是否被Extract所捕获,并且被Replicat所应用,并且预防数据冗余。它对由于网络、系统、Oracle Goldengate进程需要重启而要丢失数据提供了容错。对于复杂的同步配置,checkpoints能够使多个Extract或者Replicat进程读取同一个trail集,Checkpoints使用内部进程确认以防止消息在网络中丢失。
Extract为它在数据源和trail中的位置创建checkpoints。因为Extract只捕获提交了的事务,它必须保持对所有打开事务提交事件操作的跟踪。这要求Extract去记录一个检查点,这个点就是当前一个事务日志中正在读的位置,加上最老打开事务的起始位置,可以是当前日志或者前一个日志。
为了控制在断电后必须重新处理的事务日志的量,Extract在指定的间隔持久化处理当前状态和数据到磁盘,包括状态和长事务数据(如果有的话)。如果Extract在这些间隔中的一段停止,它可以从前一个间隔或最后一个checkpoint的位置进行恢复,而不是回到最老打开的长事务第一次出现的日志的位置恢复。
Replicat为了在trail中创建checkpoints,Replicat存储它的checkpoints在目标数据库上的一张checkpoint表上,为了使它提交的事务与它在trail中的位置所对应。Checkpoint表通过在一个数据库恢复中确保一个事务只会被应用一次而保证了一致性,即使replicat进程或者数据库进程失败。为了报告的目的,Replicat也会有一个checkpoint文件在磁盘上,存放在Oracle Goldengate安装目录下的dirchk子目录里。
对于非连续性的,如果需要可以从开始点重新运行的配置,比如初始化加载,Checkpoints是不需要的。
Manager是用来控制Oracle Goldengate的进程的。在Extract和Replicat能运行之前,Manager在每台系统上必须被运行,并且在那些进程运行期间Manager必须保持运行以执行管理功能。Manager执行以下的功能:
启动Oracle Golden Gate进程,启动动态进程,维护进程端口,执行Trail管理,创建event、error和threshold reports,一个Manager进程能控制多个Extarct或者Replicat进程。在windows系统上Manager能以一个服务运行。实例如下:
1
2
3
4
5
6
|
GGSCI (ogg2) 1> edit params .
/GLOBALS
MGRSERVNAME OracleGoldenGate
ggschema ogg
C:\>
cd
D:\goldengate
C:\>D:
D:\goldengate>
install
addservice addevents
|
#这样在windows系统服务里就能看到一个OracleGoldenGate的服务
当连续、在线的change synchronization活动时,Collector是一个运行在target端的后台进程。Collector做以下的事情:
1. 提交一个来自远程Extract的连接请求给Manager,扫描和绑定一个可用的端口并且发送这个端口给Manager用来分配给请求的Extract进程
2. 接受来自Extract发送过来的提取了的数据库的改变,并且将他们写到一个trail文件中。当有一个网络连接请求时,Manager自动启动Collector,Oracle Goldengate用户不需要与它进行交互。Collector只能从一个Extract进程接收信息,所以你用的每一个Extract都有一个对应的Collector
默认情况下,是由source端的Extract初始化TCP/IP连接到目标端的Collector,但是Oracle Goldengate也能被配置成由target端的Collector初始化连接。由目标端初始化连接可能是被要求的,比如目标端是在一个信任的网络区域内,而source端是在一个不被信任的网络区域内。