博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)
阅读量:6916 次
发布时间:2019-06-27

本文共 1569 字,大约阅读时间需要 5 分钟。

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

 

先来看2个问题,

为什么需要协同交付?

什么是协同交付?

 

为什么需要协同交付?

 

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

REP1.PRM

MAP sales.acct1, TARGET sales.acct1;

REP2.PRM

MAP sales.acct2, TARGET sales.acct2;

REP3.PRM

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));

 

由于在多个投递进程之间没有协同,当投递数据中包含有DDLSQL exec的时候,可能会产生问题,如下示例:

假如replicat 1投递记录13replicat2投递记录24;如果有一个DDL操作,如下:

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

DDL

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

事件操作(Event Actions)

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));

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

单一的参数文件;

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

增强错误恢复的能力;

 

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

 

转载地址:http://psxcl.baihongyu.com/

你可能感兴趣的文章
DML、DDL、DCL区别
查看>>
freemarker集成shiro标签
查看>>
java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
查看>>
Spring Boot 2.x 启动全过程源码分析(上)入口类剖析
查看>>
Java应用性能管理工具 Pinpoint
查看>>
jQuery UI Accordion in ASP.NET MVC - feed with data from database
查看>>
Linux运维课之Mysql cluster随堂视频
查看>>
Android入门之创建一个AndroidStudio工程
查看>>
2012年下半年系统集成项目管理工程师真题(案例分析)(3)
查看>>
LAMP平台下用Drupal快速建站
查看>>
利用nginx的proxy_next_upstream实现线路容灾
查看>>
chrome 插件开发
查看>>
[LintCode] Serialize and Deserialize Binary Tree
查看>>
Android 矢量图
查看>>
linux awk命令详解
查看>>
MySQL的SET字段类型
查看>>
Quartz数据库表分析
查看>>
python 中的if __name__ == 'main':
查看>>
各网站平台API接口整理
查看>>
以修改字体为例谈Android的listView开发优化
查看>>