原网页:Introduction to Oracle GoldenGate
本章介绍了Oracle GoldenGate的功能、术语、处理逻辑及应用架构。
本章包含下面几节:
Oracle GoldenGate支持在多个异构的平台之间在事务层上交换与处理数据。 软件在保证事务完整而最小程度影响已有基础设施的情况下移动已提交的事务数据。软件的模块式架构能够在多种拓扑架构下对选择的数据记录、事物变化和DDL(data definition language数据定义语言)的变化实现灵活的抽取及复制。
利用Oracle GoldenGate的灵活性及其过滤、转换和定制特性,可以实现以下需求
Figure 1-1 Oracle GoldenGate 支持的拓扑结构
Oracle GoldenGate可以配置实现下列目的:
Oracle GoldenGate由下列组件组成
Figure 1-2 描述Oracle GoldenGate的逻辑架构, 包括初始数据装载和DML、DDL操作的同步。这只是一个基础配置,建议根据业务需求进行调整。
Figure 1-2 Oracle GoldenGate逻辑架构
Extract进程是Oracle GoldenGate的抽取(捕获)途径。Extract运行在源系统或者下游数据库或者两者都有,这取决于数据库和实现需要。
可以根据以下方式配置Extract:
Extract 从数据源中抓取以下内容:
为数据同步做配置时,Extract抓取了在Extract配置上指定对象的DML和DDL操作。 Extract先保存这些操作直到其收到这些操作所在事务的提交指令或者回退指令。如果收到回退指令,Extract抛弃这个事务的操作。如果收到提交指令,Extract保存这个事务到磁盘文件里,文件会进入队列发送到目标系统中,这类文件称为trail 。所有事务操作都会有序组织成事务单元写进trail里。这种设计同时确保了同步速度与数据完整性。
注意:
Extract会忽略不在Extract配置里声明的对象的操作,就算这个事务包含了在Extract配置里声明的对象的操作。
多个Extract进程可以同时操作不同对象。比如,两个Extract进程同时抓取并传输(两个持续更新的trail文件)至Replicat进程,在数据库很大时可以减少延时。为了区分不同的Extract进程,可以为每个进程分配一个组名(参考Overview of Groups)。
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的原因包括:
Replicat运行在目标端系统,读取系统上的trail文件,重新构造DML或DDL操作并应用到目标端数据库上。Replicat使用动态SQL来编译一次SQL语句,然后可以绑定不同变量执行多次。
可以根据以下方式配置Replicat:
可以让多个Replicat进程与一个或者多个Extract进程和data pumps同步工作以提供效率。为了保证数据完整,每一组进程控制一组不同的对象。为了区分不同的Replicat 进程,可以为每个进程分配一个组名(参考Overview of Groups)。
不用多个Replicat进程的情况下, 也可以配置一个Replicat实现coordinated或integrated模式。
可以推迟Replicat一段时间才应用复制的操作至目标数据库。推迟也有用,比如,防止错误的SQL传播,控制不同时区的数据到达时间,或者让其他安排好的计划先执行。推迟的长度可以通过DEFERAPPLYINTERVAL 参数值控制。
有很多参数可以控制Replicat如何进行源和目标事务转换。这些参数包括BATCHSQL, GROUPTRANSOPS, and MAXTRANSOPS。更多关于Replicat参数的信息,参考Reference for Oracle GoldenGate for Windows and UNIX
为了支持对数据库变化的持续抽取及复制,Oracle GoldenGate临时保存抽取的变化记录到一系列磁盘文件上,这种文件称为trail。trail可以出现在源系统、中间系统、目标系统、或这些系统的任意组合,主要看如何配置Oracle GoldenGate而已。在本地系统上通常称之为extract trail (或者local trail)。在远程系统上通常称之为remote trail。
通过使用trail进行存储,Oracle GoldenGate支持数据准确性及容错(参考Overview of Checkpoints)。使用trail也可以让抽取与复制过程相互独立。这些进程分离时,就可以更自由地选择数据该如何处理和传输。比如,抽取变化后并不马上同步,持续抽取变化并保存至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文件的进程包括:
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
为已经命名的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
在一些配置里,Oracle GoldenGate保存抓取数据到extract file 里而不是 trail。extract file 可以是一个单独文件,或者根据操作系统的文件大小限制需要配置为反复使用的多个文件。在这个意义上,它跟trail很相似,除了不记录checkpoints之外。文件在运行过程中自动创建。同样的版本特色可以应用于trails的也可以应用于extract files。
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
Manager 是Oracle GoldenGate的控制进程。Manager 在每个系统上必须通过Oracle GoldenGate 配置在 Extract 或 Replicat 启动前运行,并且其他进程运行时Manager 必须保持运行,才能使资源管理功能正常工作。Manager 具有下列功能:
一个Manager 可以控制很多个Extract 或Replicat 进程。在Windows系统下,Manager 可以以服务形式运行。更多关于Manager进程和TCP/IP连接配置,参考Configuring Manager and Network Communications
Collector 是一个当持续、在线的同步正在发生时在目标端系统的后台运行的进程。 Collector 做了下列工作:
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从目标端启动连接。从目标端启动连接可能在某些情况下有用,比如,目标端在一个可信网络域里,而源端在一个不可信网络域里。
根据需要,Oracle GoldenGate可以配置为下列处理类型。
为了区别系统上不同的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 名称的通配符。
使用Oracle GoldenGate时,需要留意到Commit Sequence Number, 或者CSN。CSN 是Oracle GoldenGate 为了维护事务一致性和完整性而构造来标识一个事务的标识符。它标识了事务何时提交至数据库的时间点。
CSN 用于 Extract 定位事务日志,用于Replicat重新定位trail,或其他目的。它可以由一些转换函数返回,也包含在报告和GGSCI精确输出里。
更多关于CSN和每个数据库的一系列CSN值,参考About the Commit Sequence Number