Apress Expert Oracle GoldenGate - Architecture

第一篇 Architecture

文章出处来自Expert Oracle GoldenGate。本人英语水平有限,按照自己对OGG的理解和书面表达的含义写下了这篇博客,为自己的学习之路做个纪念。
该篇为Architecture体系结构,让我们从概念开始一步一步学习OGG。


Architecture 体系结构

典型的OGG流程图

GoldenGate组件

图中的各个组件是最常用到的部分,每个组件都有着自己独特的作用。

Source Database 
源端数据库、生产库

OGG获取数据的源头并不是一个组件,通常是一个数据库。在企业级应用中多数情况都是生产库来担当此角色,习惯上称之为源端。

Capture (Local Extract) Process 
捕获进程

Capture是从源端抽取插入、更改、删除等DML操作的进程。在OGG中被称为Extract(抽取)。该进程为源端服务,更确切的命名是Local Extract(本地抽取或者主要抽取)。之所以这么命名是为了区分另一个抽取进程Data Pump。该进程负责将Local Extract的结果发送到目标数据库,也就是Target Database。
    
Extract是运行在源端的服务器进程,从事务日志(transaction logs)中获取变化。也就是从联机日志或者归档日志中获取变化,然后写入到Trail文件中。获取事务变化时只选择已经提交的事务(commit),并且过滤掉回滚的事务(rollback)。OGG还可以捕获DDL语句,比如创建一个新的表空间、为表空间添加新的数据文件,还可以捕获序列(sequences),比如用序列自动生产表中的ID列。如果数据库比较小的情况下Extract可以将源端数据库复制到目标端,但通常不建议这样做,还是使用Oracle的复制工具比较好,如RMAN或者exp/imp。
    
Extract使用起来非常灵活,可以根据需要只获取源端的部分内容。使用通配符*可以获取某个用户下的所有表,HR.*,或者摸个表中的指定列,例如获取customer表中的name字段等于“Jones”的数据变化。

遇到捕获失败的时候可以将错误信息写入descard file中并且自动生成报表,每隔一段时间自动进行统计。

Source Trail
源端事务跟踪文件

抽取进程源源不断的将已经提交的事物写入到source trail中。为了更好的性能数据被写入了较大的数据块中。source trail文件中的数据按照序列被发送到目标数据库或者其它的进程,如data pump。 为了保障安全,数据在写入trail文件时可以选择加密方式来进行处理。
      
我们可以为trail文件设置大小,当文件达到了预设的大小会自动生成新的文件。比如将trail文件大小设置为200MB,Extract进程将已经提交的事物变化写满了当前的trail文件后会自动创建一个新的trail文件。为了节约磁盘空间,配置一个trail文件的有效期显得格外重要,OGG按照配置,自动删除已经过期的trail文件,保证磁盘空间一直可用。
     
 trail文件中的数据格式默认情况下与平台无关,OGG有着自己的数据格式。另外每个trail文件都包含一个文件头,每条记录也包含自己的头信息。OGG使用checkpoints来保存每个进程的位置,并采用CommitSequenceNumber来跟踪每一个事物的进程,从而保证数据的完整性。注意名称中的Commit,再一次强调其关注点是已经提交的事物。这个CommitSequenceNumber在Oracle中与之相对应的就是SCN。有一点需要注意的时OGG中的checkpoints与Oracle中的checkpoint功能有区别。前者是记录进程的位置(进度),后者是检查点。
     
如果需要,我们可以使用GoldenGate Logdump工具来检测trail文件中的细节,在处理故障的时候这个功能非常有用。

Data Pump
投递进程

data pump是另一种类型的抽取进程。data pump读取由Local Extract写入source trail中的记录通过TCP/IP网络发送到目标端,并且在目标端创建一个remote trail。虽然data pump进程也可以像Local Extract一样对数据进行过滤和转换,但是在大多数案例中还是仅用于传递数据而已。这种用法在OGG中叫做passthru 模式。如果数据需要过滤或者转换,使用data pump可以有效的节省网络带宽。

虽然从严格的意义上讲data pump并不是必须配置的,但是配置一个data pump还是有些好处的。它在Local Extract向目标端发送的过程中增加了一个保护层,隔绝了网络中断的问题。举例来说,如果源端到目标端的网络出现异常会导致抽取(Local Extract)进程失败。拥有data pump进程的话抽取进程可以继续工作,受影响的只是data pump。当网络恢复后,data pump能重新启动并且迅速的处理已经由Local Extract抽取成功并写入source trail文件中的队列。

Network
网络

OGG使用Local Extract或者data pump通过TCP/IP网络将source trail发送到远端主机并写入remote trail文件中。目标端和源端相连接的进程叫做Collector。 每个源端的抽取进程(Local Extract)都需要目标端Collector自动开启一个网络通道来对应。Collector同过OGG预先配置号的端口号进行监听。从源端到目标端的传输过程中,可以开启数据压缩来节约网络带宽。另外我们还可以调整TCP/IP socket buffer大小并且配置连接超时参数来提供更好的网络性能。为了数据的安全可以将要传输的数据进行加密,在传输结束后由接收端也就是目标端自动进行解密。

Collector
收集进程

Collector进程由管理进程(Manager)自动启动。它运行在目标端系统的后台,负责将记录写入remote trail。写入的记录是源端通过Local Extract或者data pump通过网络发送过来的。

Remote Trail
远端事务跟踪文件

remote trail和source trail很相像,被data pump创建在远端服务器(remote server)或者中间服务器上。这两种不同的trail默认的保存位置是文件系统的dirdat目录。它们的名字有着相同的结构.前2位是字母,后面6位是数字,比如rx000000。从源端发送到目标端的trail文件大小相同,可以采用源端管理Local trail的方式为其制定保留策略,定期删除过期的文件节省磁盘空间。

和源端trail文件一样remote trail有着自己的数据格式。每个trail文件都包含一个文件头,每条记录也包含自己的头信息。OGG进程将remote trail中的位置记录在checkpoints,或则记录在数据库表中。

如果需要,我们可以使用GoldenGate Logdump工具来检测trail文件中的细节,在处理故障的时候这个功能非常有用。

Delivery (Replicat)
复制进程

Delivery是源端的数据变化应用到到目标数据库的过程。在GoldenGate中应用本地数据库SQL完成数据复制的功能叫做Replicat。Replicat应用trail文件中数据变化同源端Extract抽取已经提交的事物顺序相同,从而保证数据的完整性。

通过正确的配置我们不仅可以复制数据的的DML操作,也可以复制DDL操作和序列(sequences)。连初始化数据也可以使用特殊的Replicat来完成,但是通常建议使用Oracle数据库的工具来完成,比如数据泵。

和抽取进程(Extract)一样,我们可以配置一个或多个复制进程(Replicat)并行执行来提高效率。各个复制进程之间是独立的,每个复制进程可以在不同的表中工作。既可以使用一个复制进程来应用一个模式(schema也可以理解成用户)的所有表,也可以使用多个进程分别对应一个模式下的多个表。这样的配置非常灵活,可以根据需要自行配制。

Replicat可以使用通配符来复制整个模式下的所有数据,一个单独的表,一张表的部分行或者部分列。我们可以配置源端和目标端数据的对应关系,转换、过滤那些只符合条件的部分数据。比如复制进程可以通过过滤,只挑选customer数据中姓名为Jones的那些记录。

我们可以将任何一个Replicat处理不了的数据写入discard文件中。显示Repicat配置的报表可以按照用户的配置自动生成,并且根据设定的时间周期来获取最新的数据统计。

Target Database
目标数据库、灾备数据库

和源端数据库一样,目标数据库也不是OGG的一个组件。它是接收并应用源端数据变换的数据库。

Manager
管理进程

GoldenGate的Manager进程用来管理GoldenGate的所有进程和资源。在所有进程中它被第一个启动,然后由Manager开启或者关闭其他OGG进程,管理trail文件,生成日志和报表


第一章 完

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。