2022年8月26日 星期五

5. Replicate

OGG Replicate 主要的功能就是將 Trail File 的內容 Apply 到 Target 資料庫,目前 Replicate 總共有四種模式, Classic Replicate 、 Coordinated Replicate 、 Integrated Replicate 以及 Parallel Replicate 。


  • Classic Replicate

Classic Replicate 為 OGG 軟體最源生的同步模式,由 OGG 軟體本身啟動 Replicate Process 來讀取 Trail File 的內容以及將異動更新到 Target 資料庫,同樣的需先設定 Replicate 參數,例如建立一個名為 rep1 的 Replicate Group :

$ ./ggsci

GGSCI> edit param rep1


REPLICAT REP1

SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

SETENV (ORACLE_SID="ORCL")

SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")

USERID ogg, PASSWORD ogg

ASSUMETARGETDEFS 

APPLYNOOPUPDATES

DISCARDFILE ./dirrpt/REP1.dsc, MEGABYTES 10, PURGE

DDL INCLUDE MAPPED

DDLOPTIONS REPORT

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS 


MAP HR.*, TARGET HR.*;


ASSUMETARGETDEFS : 表示 Target Table 的表格定義與 Source Table 相同。

APPLYNOOPUPDATES : 表示當 Update 的 Before Value 與 After Value 相同時,仍然執行 Update 的操作。

DDL INCLUDE MAPPED : 只有下列 Mapping 的物件才執行 DDL 的操作。

DBOPTIONS DEFERREFCONST : 資料同步時忽略 Constraint 的限制。

DBOPTIONS SUPPRESSTRIGGERS : 資料同步時不觸發 Trigger 。

MAP HR.*, TARGET HR.* : 同步 HR 底下所有物件。


設定完參數就可以新增 Replicate Group ,指定 rep1 這個 Replicate 同步 R1 開頭的 Trail 內容 :

GGSCI> add replicat rep1, exttrail ./dirdat/R1


基於 Source 端 export 的 SCN Number ,新增完 Replicate Group 之後就可以由這個 SCN Number 之後開始同步,例如 :

GGSCI> start replicat rep1, aftercsn 34821758


  • Coordinated Replicate

Classic Replicate 除非是使用 Range 函數將資料切分,否則只能使用單線程進行同步, Coordinated Replicate 是 OGG 12c 的新功能,可以使用多線程進行同步,同一組 Replicate 可以產生出多個 Replicate Thread ,並且前端由一個 Coordinated Replicate 進行整合,並且每一個 Process 都有各自的 Checkpoint File :


使用 Coordinated Replicate 需要在參數中新增 USEDEDICATEDCOORDINATIONTHREAD 參數,同步的物件可以指定或不指定 Thread :

REPLICAT REP1

SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

SETENV (ORACLE_SID="ORCL")

SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")

USERID ogg, PASSWORD ogg

ASSUMETARGETDEFS 

APPLYNOOPUPDATES

DISCARDFILE ./dirrpt/REP1.dsc, MEGABYTES 10, PURGE

DDL INCLUDE MAPPED

DDLOPTIONS REPORT

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS 

USEDEDICATEDCOORDINATIONTHREAD  


MAP HR.*, TARGET HR.*;

MAP SCOTT.*, TARGET SCOTT.*, THREADRANGE(1-3);

MAP JOHN.*, TARGET JOHN.*, THREAD(4);


以上參數同步 HR 不指定 Thread 、 同步 SCOTT 指定使用第 1 ~ 第 3 個 Thread 進行同步 , 同步 JOHN 指定只使用第 4 個 Thread 進行同步 。


參數編輯完就可以新增 Coordinated Replicate Group ,使用 maxthreads 來定義最多可以產生幾個 Threads :

GGSCI> add replicat rep1, coordinated, exttrail ./dirdat/R1, maxthreads 10

GGSCI> start replicat rep1, aftercsn 34821758


  • Integrated Replicate

Integrated Replicate 為 OGG 12c 的新功能,主要是針對 Oracle 資料庫,於資料庫內部產生 Apply Process 來進行同步,藉由 Oracle 原本擁有的 Stream 功能於資料庫內建立一個 Inbound Server ,其中包含了 Receiver 、 Preparer 、 Coordinator 以及 Applier 這四種 Process :


Receiver : 用來將 OGG Trail File 的格式轉換為資料庫可以讀取的 LCRs 格式 (Logical Change Records) 。

Preparer : 可以稱做是 Reader Process ,用來讀取 LCRs 的內容。

Coordinator 與 Applier : 將 LCRs 的內容同步到資料庫中。


使用 Integrated Replicate 需在參數中加入 INTEGRATEDPARAMS 相關設定 :

REPLICAT REP1

SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

SETENV (ORACLE_SID="ORCL")

SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")

USERID ogg, PASSWORD ogg

ASSUMETARGETDEFS 

APPLYNOOPUPDATES

DISCARDFILE ./dirrpt/REP1.dsc, MEGABYTES 10, PURGE

DDL INCLUDE MAPPED

DDLOPTIONS REPORT

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS 

DBOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 2048, MAX_PARALLELISM 4)  


MAP HR.*, TARGET HR.*;


MAX_SGA_SIZE 2048 : 使用資料庫的 Stream Pools 上限為 2G 。

MAX_PARALLELISM 4 : 最多產生四個 Applier Threads 。


參數編輯完就可以新增 Integrated Replicate Group :

GGSCI> dblogin userid ogg, password ogg

GGSCI> add replicat rep1, integrated, exttrail ./dirdat/R1

GGSCI> start replicat rep1, aftercsn 34821758


Integrated Replicated 等於是利用 Oracle Stream 的特性將 OGG 與 Oracle 資料庫做一個整合,由於使用的是 Stream ,所以 Oracle 資料庫必須要設定足夠大的 Stream Pool Size ,否則有可能產生效能或是記憶體不足等問題。 Integrated Replicated 要求 Oracle 資料庫必須為 11.2.0.4 以上的版本才可以使用。


  • Parallel Replicate

Parallel Replicate 為 OGG 12.3 版本的新功能,由 OGG 軟體本身使用多個 Threads 來進行 Apply ,功能上與 Coordinated Replicate 相同,但整體架構是不同的,等於是針對 Coordinated Replicate 做一個加強與改進。 Parallel Replicate 主要會產生一個 Master Process ,其中包含了兩大 Process , Collater 與 Scheduler , Collater 用來管理 Mapper Process , Mapper 主要是用來讀取 Trail File 的內容所用,可以設定一個或多個 Mapper 來增加讀取速度; Scheduler 用來管理 Applier Process , Applier 主要是將變更同步到資料庫中所用 :


由此可知與 Coordinator 最大的不同是, Parallel Replicate 添加了 Mapper Process ,可以多線程讀取 Trail File 來增加速度。使用 Parallel Replicate 於需添加相關參數 :

REPLICAT REP1

SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

SETENV (ORACLE_SID="ORCL")

SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")

USERID ogg, PASSWORD ogg

ASSUMETARGETDEFS 

APPLYNOOPUPDATES

DISCARDFILE ./dirrpt/REP1.dsc, MEGABYTES 10, PURGE

DDL INCLUDE MAPPED

DDLOPTIONS REPORT

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS 

MAP_PARALLELISM 2

APPLY_PARALLELISM 4

MIN_APPLY_PARALLELISM 2

MAX_APPLY_PARALLELISM 4

SPLIT_TRANS_RECS 100  


MAP HR.*, TARGET HR.*;


MAP_PARALLELISM : 設定 Mapper Process 數量。

APPLY_PARALLELISM : 設定 Applier Process 數量。

MIN 、 MAX_APPLY_PARALLELISM : 設定 Applier 最大最小數量。

SPLIT_TRANS_RECS : 將 Large Transaction 拆分為每個 Transaction 為多少數量來進行同步。


參數設定完之後就可以來新增 Parallel Replicate Group ,這邊比較特殊的是, Parallel Replicate 可以基於 Classic Replicate 或者是 Integrated Replicate 來使用,一般來說基於 Classic Replicate 來使用還是比較多的,畢竟 Classic Replicate 原本是不具有多線程的功能,有了 Parallel Replicate 加強之後, Classic Replicate 可以運用的場合又更多了 :

GGSCI> add replicat rep1, parallel, exttrail ./dirdat/R1

GGSCI> start replicat rep1, aftercsn 34821758


如果是要添加基於 Integrated 的 Parallel Replicate ,只要加上 Integrated 關鍵字就可以了:

GGSCI> dblogin userid ogg, password ogg

GGSCI> add replicat rep1, integrated, parallel, exttrail ./dirdat/R1

GGSCI> start replicat rep1, aftercsn 34821758


最後值得一提的是, Parallel Replicate 必須是 OGG Trail File Format 為 12.1 以上才可以使用,因此對於 Oracle 資料庫也必須要求是 12c 以上的版本才可以使用。


雖然 OGG Replicate 有這麼多種模式可以使用,不過與 Extract 的搭配上並沒有所限制,例如 Source 端可以使用 Classic Extract ,而 Target 端可以使用 Integrated Replicate ,不過到了 OGG 21c 的版本之後,將不再支援 Classic Replicate / Extract ,因此熟悉其它新功能還是必須的。



沒有留言:

張貼留言