• 使用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等软件。
  • 相关阅读:
    我来说说博客评论的事
    SWFUpload+Javascript仿163邮件上传文件
    如何暂停和终止线程
    分享我的数据处理类库,欢迎拍砖
    求数列两两之差,再求和
    poj 1006 中国剩余定理
    Poj算法做题顺序
    poj 1328
    ZOJ 3279
    poj 2352 树状数组
  • 原文地址:https://www.cnblogs.com/margiex/p/8410865.html
Copyright © 2020-2023  润新知