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時發生的問題和繼續同步也比較容易。

相關文章
相關標籤/搜索