GoldenGate基于中间队列文件的初始化

适用场景:异构平台的初始化,如oracle到db2, db2到mysql,oracle到big data/kafka/hdfs等。
原理:通过OGG抽取源系统的数据,再投递加载到目标平台,从而避免人工数据导出、导入。
限制:OGG的初始化无法与增量抽取进程无缝集成,这块需要单独考虑。

方法一,抽取与传输分开

 

 

--源端配置抽取进程, einit.prm

sourceistable
userid ogg, password ogg
extfile ./dirdat/et, maxfiles 999999, megabytes 2000, append
reportcount every 60 seconds, rate
table scott.dept;


--传输进程, puinit.prm

extract puinit
rmthost 10.0.0.100, mgrport 7809
rmtfile ./dirdat/t2
reportcount every 60 seconds, rate
table scott.*;

 

GGSCI>add ext puinit, exttrailSource ./dirdat/et
GGSCI>add rmttrail ./dirdat/t2, ext puinit, megabytes 2000
GGSCI>start puinit

#启动初始化进程
$ nohup ./extract pf dirprm/einit.prm rf dirrpt/einit.rpt &
$ tail -f ./dirrpt/einit.rpt

抽取完成之后,einit会自动停止;同时,可以查看puinit的状态和目标端trail的情况。

以上做法要考虑本地空间是否够用,初始化时,会在本地保存初始表的所有数据,如果表非常大,则需要准备相应的磁盘空间,或根据puinit传输进程的读取点,手工删除已经传输完成的队列文件。

方法二,抽取与传输同一进程

如果确认网络没问题,也可以不考虑在本地保存trail,即OGG抽取之后直接传输到目标端,不在本地落盘。

 

 但此方法有两个缺点:

1. 实践中,此做法效率较低,因为OGG在本地抽取很快,如果网络传输慢,则整个初始化过程会延时。
2. 如果传输网络中断或其它问题造成抽取进程宕机,则需要重新开始初始化。(OGG初始化进程没有检查点机制)

以下是抽取与传输合并之后的进程参数,供参考:
--einit2.prm

sourceistable
userid ogg, password ogg
rmthost 10.0.0.100, mgrport 7809
rmtfile ./dirdat/t2, maxfiles 999999, megabytes 2000, append
reportcount every 60 seconds, rate
table scott.dept;

 

$ nohup ./extract pf dirprm/einit2.prm rf dirrpt/einit2.rpt &
$ tail -f ./dirrpt/einit2.rpt

抽取完成之后,einit2会自动停止;同时,可以查看目标端trail的情况了解数据量的大小。

 

--目标端进程, rinit.prm

specialrun
end runtime
replicat rinit
userid ogg, password ogg
extfile ./dirdat/t2
--handleCollisions
reportcount every 1 minutes, rate
map scott.dept,target scott.dept;

--rinit进程的启动,可以在目标端有trail即可开始,不用等待源端抽取完成。
$ nohup ./replicat pf dirprm/rinit.prm rf dirrpt/rinit.rpt &
$ tail -f ./dirrpt/rinit.rpt

rinit执行完成之后,会自动停止,可查看其对应的输出日志,也可以检查目标端的数据量。


官方参考:
https://docs.oracle.com/en/middleware/goldengate/core/19.1/admin/instantiating-oracle-goldengate-initial-load.html

posted @ 2021-04-09 10:59  margiex  阅读(54)  评论(0编辑  收藏  举报