使用GoldenGate初始化的兩種方式


在使用OGG開始增量數據的實時復制之前,一般需要對當前的存量數據進行初始化,如果是同構數據庫,則可以使用數據庫自帶的工具完成,比如Oracle DB中的rman, expdp/impdp等。

其實ogg自己也可以實現初始化,而且支持異構平台的初始化,即使用OGG同步不同DB之間的存量數據。主要有兩種配置方式,一種是抽取存量數據為OGG的隊列文件,然后在目標節點上再讀取此隊列文件后加載到目標庫上;一種是抽取進程讀取存量數據后直接調用目標端的replicat進程,數據不落地,直接寫入目標DB。另外,從抽取性能方面,OGG可以基於字段的取值,配置多個抽取進程,從而實現並行抽取以提升初始化的性能,一般以ID主鍵字段或枚舉值為拆分原則。

以下分別介紹初始化的兩種配置方式。

第一種,存量數據需要落地

此方法與傳統的抽取增量數據的方法類似,只是參數上配置略有不同。

以下示例假設的mysql的user.tb1表有100W條記錄,配置兩個抽取進程,分別以主鍵ID字段進行划分,數據在本地不落地,直接傳輸到目標oracle主機上。

extract exta
userid ggadmin, password Oracle1
rmthost oelmysql, mgrport 15600, tcpbufsize 288750, tcpflushbytes 288750
rmtfile ./dirdat/ea, maxfiles 999999, megabytes 1500, append
reportcount every 60 seconds, rate
table user.tb1, filter (id < 500000);

extract extb
userid ggadmin, password Oracle1
rmthost oelmysql, mgrport 15600, tcpbufsize 288750, tcpflushbytes 288750
rmtfile ./dirdat/eb, maxfiles 999999, megabytes 1500, append
reportcount every 60 seconds, rate
table user.tb1, filter (id > 500000);


GGSCI>add extract exta, SourceisTable
GGSCI>add extract extb, SourceisTable

分別啟動兩個進程,此時在目標端將會生成兩個隊列:ea, eb

GGSCI>start exta

GGSCI>start extb


在目標端的OGG上配置

replicat repa
userid gguser, password Oracle1
discardfile ./dirrpt/lmysql.dsc, purge
reportcount every 60 seconds, rate
map user1.tb1, target scott.tb1;

replicat repb
userid gguser, password Oracle1
discardfile ./dirrpt/lmysql.dsc, purge
reportcount every 60 seconds, rate
map user1.tb1, target scott.tb1;


GGSCI>add replicat repa, exttrail ./dirdat/ea
GGSCI>add replicat repb, exttrail ./dirdat/eb

GGSCI>start repa

GGSCI>start repb

如果源表數據量很大,也可以針對每個源端的抽取配置多個replicat進程,進一步實現並行投遞。
從以上可以看到,需要落地的存量數據初始化方式與傳統增量復制的配置基本一致,除了源端抽取進程添加略有不同之外。

第二種方法,數據不落地

image

仍然以前面的場景為准

extract exta
userid ggadmin, password Oracle1
rmthost oelmysql, mgrport 7809
RMTTASK REPLICAT, GROUP rinita
reportcount every 60 seconds, rate
table user.tb1, filter (id < 500000);            

extract extb
userid ggadmin, password Oracle1
rmthost oelmysql, mgrport 7809
RMTTASK REPLICAT, GROUP rinitb
reportcount every 60 seconds, rate
table user.tb1, filter (id > 500000);


GGSCI>add extract exta, SourceisTable
GGSCI>add extract extb, SourceisTable

現在還不能啟動抽取進程

在目標端的OGG上配置

replicat rinita
userid gguser, password Oracle1
discardfile ./dirrpt/lmysql.dsc, purge
reportcount every 60 seconds, rate
map user1.tb1, target scott.tb1;

replicat rinitb
userid gguser, password Oracle1
discardfile ./dirrpt/lmysql.dsc, purge
reportcount every 60 seconds, rate
map user1.tb1, target scott.tb1;               

GGSCI>add replicat repa, specialRun
GGSCI>add replicat repb, specialRun

此時,啟動源端的抽取進程
GGSCI>start ext*
然后在源端查看進程狀態
GGSCI>info ext*

再到目標端目標端查看進程狀態
GGSCI>info rinit*


會發現目標端進程已經被抽取進程自動拉起,不需要人工啟動。
如果源表的數據量很小,有可能在查看目標端進程時,數據已經初始化完成。

  • 以上兩種方式,在源庫可以停機的情況下,可以很方便的進行異構平台的數據初始化,同時,也可以使用增量復制過程中的多個命令,如view param, stats, view report等。
  • 如果在空間不足,且數據量不是太大的情況下,可以考慮第二種方式進行初始化。
  • 第二種方式一旦初始化過程中網絡中斷或進程aborted,則需要從頭開始初始化(先清除目標表的記錄);第一種方式如果抽取未完成,網絡中斷或進程宕機,也需要從頭開始初始化。
  • 不過不管哪種方式,都需要手工創建目標表。
  • 目標端也支持大數據平台的初始化,比如從oracle/mysql/db2投遞數據到hdfs/hive/hbase等,不需要使用sqoop等軟件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM