GoldenGate架构
OGG可以作为以下用途使用:
- 从一个数据库中静态提取数据记录,并将这些记录加载到另一个数据库中。
- 对DML(事务数据操作语言)和DDL(数据定义语言)更改的持续提取和复制,保证源和目标数据的一致性。
- 将数据库提取为一个文件。
GoldenGate由以下组件组成
- Extract
- Data pump
- Replicat
- Trails or extract files
- Checkpoints
- Manager
- Collector
下图说明了Oracle GoldenGate用于初始数据加载和DML和DDL操作同步的逻辑架构。这是基本配置。建议根据业务需求更改此模型。
image.png
一.Extract
Extract的作用是实现提取(捕获)机制。Extract运行在源系统或下游数据库上,或者两者都运行,这取决于数据库和实现需求。可以使用以下两种方式配置Extract:
- initial loads:使用初始数据加载,Extract直接从源对象中提取(捕获)当前的静态数据集。
- Change synchromization:为了使源数据与另一组数据保持同步,Extract在初始同步之后捕获DML和DDL操作。
可以从以下数据源提取数据:
- 源表(如果使用初始加载)
- 数据库恢复日志或事务日志(如Oracle redo日志)。
- 第三方捕获模块。此方法提供一个通信层,将数据和元数据从外部API传递到提取API。
当配置为同步变化时,Extract捕获对Extract配置中的对象执行的DML和DDL操作。Extract存储这些操作,直到收到包含这些操作的事务的commit记录或rollback。收到rollback时,Extract会丢弃该事务的操作。收到commit时,Extract会将该事务的操作写入磁盘上的一系列文件,称为trail,它们在哪里排队,等待传递给目标系统。每个事务中的所有操作都被作为一个按顺序组织的事务单元写入trail。这种设计确保了速度和数据完整性。
多个提取进程可以同时操作不同的对象。例如,当数据库很大时,两个Extract可以并行地将数据提取和传输给两个Replicat(使用两个trail文件),最小化目标延迟。要区分不同的提取过程,需要为每个提取过程分配一个组名。
二.Data Pumps
Data Pump是源Oracle GoldenGate配置中的一个辅助提取工具。如果不使用Data Pump,Extract必须将捕获的数据操作发送到目标上的远程trail文件。在一个data pump的典型配置中,主要的Extract将数据写入源系统上的trail文件。data pump读取这个trail文件并将数据操作通过网络发送给远程目标端的trail文件。data pump增加了存储灵活性,还可以将Extract与TCP/IP活动隔离。
通常,data pump可以执行数据过滤、映射和转换,或者可以配置为直通模式,在这种模式下,数据按原样被动传输,无需操作。直通模式增加了data pump的吞吐量,因为查找对象定义的所有功能都被绕过了。
在大多数业务情况下,应该使用数据泵。使用数据泵的一些原因包括:
- 防止网络和目标故障:在基本的Oracle GoldenGate配置中,目标系统上只有一个trail文件,源系统上没有任何地方可以存储不断提取到内存中的数据操作。如果网络或目标系统不可用,Extract可能会耗尽内存并异常终止。但是,通过源系统上的trail和data pump,可以将捕获的数据移动到磁盘,从而防止Extract的终止。恢复连接后,data pump从源跟踪捕获数据并将其发送到目标系统。
- 实现数据清洗或转换的几个阶段:当要实现复杂的过滤或数据转换配置时,可以配置一个data pump来执行第一个转换,要么在源系统上,要么在目标系统上,甚至在中间系统上,然后使用另一个data pump或Replicat组来执行第二个转换。
- 将来自多个源的数据合并到一个中心目标位置。当将多个源数据库与中心目标数据库同步时,可以在每个源系统上存储提取的数据操作,并在每个源系统上使用data pump将数据发送到目标系统上的trail。在源系统和目标系统之间划分存储负载可以减少目标系统上容纳来自多个源的数据所需的大量空间。
- 同步一个数据源到多个目标端:在向多个目标系统发送数据时,可以在源系统上为每个目标配置data pump。如果到任何目标的网络连接失败,仍然可以将数据发送到其他目标。
三.Replicat
Replicat进程在目标系统上运行,读取该系统上的trail,然后重构出DML或DDL操作,并将它们应用于目标数据库。Replicat使用动态SQL编译一条SQL语句,然后使用不同的绑定变量多次执行它。
您可以通过以下方式之一配置Replicat:
- Initial loads:对于初始数据加载,Replicat可以将静态数据复制应用于目标对象,或将其路由到高速批量加载应用程序。
- Change synchronization:当配置为更改同步时,Replicat使用本机数据库接口或ODBC将复制的源操作应用于目标对象,具体取决于数据库类型。
可以使用多个Replicat,同时使用一个或多个Extract和Data Pump来增加吞吐量。为了保持数据完整性,每组进程处理一组不同的对象。要在多个Replicat之间进行区分,需要为每个进程分配一个组名。
可以以coordinated或integrated模式配置一个Replicat,而不是使用多个Replicat进程。
- Oracle GoldenGate支持的所有数据库都支持coordinated模式。在协调模式下,Replicat是线程化的。一个协调器线程生成并协调一个或多个并行执行复制SQL操作的线程。协调的副本使用一个参数文件,并作为一个单元进行监视和管理。
- Oracle版本11.2.0.4或更高版本支持集成模式。在集成模式下,Replicat利用了Oracle数据库中可用的应用程序处理功能。在单个Replicat配置中,称为apply servers的多个入站服务器子进程并行应用事务,同时保留原始事务原子性。
您可以延迟Replicat,以便它在将复制操作应用到目标数据库之前等待特定的时间。延迟可能是可取的,例如,为了防止错误SQL的传播,为了控制跨不同时区的数据到达,或者为了允许其他计划的事件有时间发生。延迟的长度由DEFERAPPLYINTERVAL参数控制。
四.Trails
为了支持数据库更改的持续提取和复制,Oracle GoldenGate将捕捉到的更改记录临时存储在磁盘上的一系列文件中,称为trail。在本地系统中,它被称为extract trail(或local trail)。在远程系统上,它被称为remode trail。
通过使用trails,Oracle GoldenGate支持数据准确性和容错性。trails的使用还允许提取和复制活动彼此独立地进行。将这些流程分离后,就有更多的选择来处理和交付数据。例如,可以不连续地提取和复制更改,而是连续地提取更改,但是将它们存储在trails中,以便稍后在目标端需要它们时复制到目标。
1.写入和读取trails的进程
Extract和Data Pump提取写入到trail。每个在线Extract过程都必须链接到一个trail。只有一个Extract可以写入给定的local trails。所有local trails必须有不同的名字。
多个data pump Extract可以各自写入具有相同名称的tails,但是物理trails本身必须主流在不同的远程系统上,例如分布式架构中。例如,一个名为1pump的data pump和一个名为2pump的data pump都可以驻留在sys01上,并写入一个名为aa的remote trail。data pump1可以在sys02上写入trail aa,data pump2可以在sys03上写入trail aa。
读取trail的进程如下:
- Data-pump Extract
- Replicat
2.Trail创建和维护
trail文件本身是在处理过程中根据需要创建的,但是在使用add RMTTRAIL或add EXTTRAIL命令将trail添加到ogg配置时,要为其制定一个双字符名称。默认情况下,trail存储在Oracle GoldenGate目录的dirdat子目录中。
五.Checkpoints
Checkpoints将进程的当前读和写位置存储到磁盘,以便进行恢复。Checkpoints确保标记为同步的数据更改实际上被Extract捕获,并被Replicat应用于目标,它们防止了冗余处理。它提供了容错功能,防止在重新启动系统、网络或OGG进程时丢失数据。对于复杂的同步配置,Checkpoints允许多个Extract或Replicat进程从同一组tails中读取。
六.Manager
Manager是OGG的控制进程。在启动Extract或Replicat之前,Manager必须运行在Oracle GoldenGate配置中的每个系统上,并且在这些进程运行时,Manager必须保持运行,以便执行资源管理功能。Manager执行以下功能:
- 启动Oracle GoldenGate进程
- 启动动态进程
- 维护进程的端口号
- 执行trail管理
- 创建事件、错误和阈值报告
一个Manager进程可以控制多个Extract或Replicat进程。
七.Collector
Collector是一个在目标系统的后台运行的进程,当连续的在线更改同步处于活动状态时。Collector做以下工作:
- 当从远程提取到Manager的连接请求发出时,扫描并绑定到可用端口,然后将端口号发送给Manager,以便分配给请求提取过程。
- 接收Extract发送的已提取的数据库更改,并将其写入trail文件。Manager在需要网络连接时自动启动Collector,因此Oracle GoldenGate用户不会与之交互。Collector只能从一个Extract进程接收信息,因此对于您使用的每个Extract,都有一个Collector。当连接的Extract进程终止时,Collector终止。