Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)

 OGG 12c中,并行交付有2种模式:集成交付、协同交付。不过集成交付只能针对目标端是oracle数据库(有版本要求)使用,而协同交付则能够在非oracle数据库上使用。数据库

 

先来看2个问题,oracle

l 为何须要协同交付?性能

l 什么是协同交付?线程

 

为何须要协同交付?

 

在OGG12.1.2以前,若是在目标端碰上性能问题,延迟厉害 ,通常的作法是将交付进程拆分为几个。拆分的方式有2种,一是将一个复制进程中的多张表拆分出来,造成多个复制进程;另外一种是将一张大表,按某个字段(通常是主键字段)的值进行拆分,造成多个投递进程。下面是针对同一个复制进程REP1中,多张表的拆分示例:进程

REP1.PRM事件

MAP sales.acct1, TARGET sales.acct1;同步

REP2.PRMio

MAP sales.acct2, TARGET sales.acct2;并行

REP3.PRMim

MAP sales.acct3, TARGET sales.acct3;

在这种拆分中,要注意有主外键约束的表应该在同一个进程中。

 

下面是使用RANGE参数针对一张大表进行拆分的示例:

REP1.PRM

MAP sales.acct, TARGET sales.acct,

FILTER (@RANGE (1, 3, ID));

 

REP2.PRM

MAP sales.acct, TARGET sales.acct,

FILTER (@RANGE (2, 3, ID));

 

REP3.PRM

MAP sales.acct, TARGET sales.acct,

FILTER (@RANGE (3, 3, ID));

 

因为在多个投递进程之间没有协同,当投递数据中包含有DDL、SQL exec的时候,可能会产生问题,以下示例:

 

 

 

假如replicat 1投递记录1,3,replicat2投递记录2,4;若是有一个DDL操做,以下:

 

 

 

若是缺少正确的协调机制,假如DDL操做在记录4插入以前执行,则记录4的插入就会报错。在协同投递中,下面这些操做都叫堡垒操做(barrier operations):

l DDL

l 使用range参数拆分时进行PK更新;

l 事件操做(Event Actions)

l SQLExec

 

什么是协同交付?

协同交付是OGG 12c中提供的新功能,支持全部数据库,如 MySQL, SQL Server, Sybase等。

 

 

 

 

 

使用协同交付,仍然须要在复制参数指定如何拆分,可是方式比之前更为简单。针对多张表的拆分示例以下:

REP.PRM

MAP sales.acct1, TARGET sales.acct1, THREAD(1);

MAP sales.acct2, TARGET sales.acct2, THREAD(2);

MAP sales.acct,3 TARGET sales.acct3, THREAD(3);

 

针对大表的拆分示例以下:

REP.PRM

MAP sales.acct, TARGET sales.acct, THREADRANGE(1-3, ID));

能够看到,协同交付的参数比之前的要简单明了,更容易维护。使用协同投递的好处:

l 单一的参数文件;

l 自动控制复制投递的顺序,确保各拆分进程之间交易的完整性;

l 加强错误恢复的能力;

 

协同交付的一个关键概念就是统一的barrier协同及同步,统一的barrier协赞成味着全部须要按顺序执行的操做都是barrier操做,即barrier操做必须等待前序的操做执行完成以后才能执行,全部线程必需要等待barrier线程结束后才能继续。使用协同交付,交付进程当掉以后,各线程之间的投递进度不会差别太大,要解决abended时发生的问题和继续同步也比较容易。

相关文章
相关标签/搜索