在使用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进程,进一步实现并行投递。

从以上可以看到,需要落地的存量数据初始化方式与传统增量复制的配置基本一致,除了源端抽取进程添加略有不同之外。

第二种方法,数据不落地

仍然以前面的场景为准

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等软件。

使用GoldenGate初始化的两种方式的更多相关文章

  1. easyUI 初始化的两种方式

    easyUI 初始化的两种方式: class方式和js方式: <!DOCTYPE html> <html lang="en"> <head> & ...

  2. WebApplicationContext初始化的两种方式和获取的三种方式

    原博客地址:http://blog.csdn.net/lmb55/article/details/50510547 接下来以ContextLoaderListener为例,分析它到底做了什么? app ...

  3. java中String初始化的两种方式

    转自:http://www.diybl.com/course/3_program/java/javajs/2007104/75886.html       字符串可能是任何程序语言中都会出现的对象,j ...

  4. c++构造函数成员初始化中赋值和初始化列表两种方式的区别

    先总结下: 由于类成员初始化总在构造函数执行之前 1)从必要性: a. 成员是类或结构,且构造函数带参数:成员初始化时无法调用缺省(无参)构造函数 b. 成员是常量或引用:成员无法赋值,只能被初始化 ...

  5. 1. easyui tree 初始化的两种方式

    /** * 查询角色分类 */function queryRoleCategoryTree(selectId) { var url = basePath + 'rest/roleCategoryCon ...

  6. 两种方式,花五分钟就能构建一个 Spring Boot 应用

    前言 Spring Boot 的好处自然不必多说,对于想要从事 Java 工作的朋友们来说,可谓是必学的技能. 在我看来,它的优势就是多快好省. 功能多,很多常用的能力都有集成: 接入快,简单的几行代 ...

  7. JavaWeb应用中初始化Log4j的两种方式

    本文主要介绍了普通JavaWeb应用(基于Tomcat)中初始化Log4j的两种方式: 1.通过增加 InitServlet ,设置令其自启动来初始化 Log4j . 2.通过监听器 ServletC ...

  8. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  9. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

随机推荐

  1. 【leetcode】部分思路整理

    题目: 求一个树的最小深度. 思路: 思路一:递归     若为空树返回0:     若左子树为空,则返回右子树的最小深度+1:(加1是因为要加上根这一层,下同)     若右子树为空,则返回左子树的 ...

  2. WeChat-结构

  3. abap函数返回结构体类型

    1: 定义一个结构体 T-CODE   se11 2: 选择 structure 3:输入相应的字段 4:激活 5:创建一个function module zfm_return_table,返回类型为 ...

  4. GENIL_BOL_BROWSER, GENIL_MODEL_BROWSER,BSP_WD_CMPWB 使用方法

    一:GENIL_BOL_BROWSER 使用方法 1: 进入x3c系统.输入T-CODE  GENIL_BOL_BROWSER 2: 输入一个component set  名称 3: 选择一个对象,双 ...

  5. Py中re.sub学习【转载】

    转自:https://www.crifan.com/python_re_sub_detailed_introduction/ //这个网址讲的不错. 1.re.sub的功能 re是regular ex ...

  6. 【LeetCode每天一题】Palindrome Number( 回文数字)

    Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...

  7. 2019.04.09 电商24 订单模快 ORM

    前面三个模块已近结束,现在看是订单模块的.想一下淘宝上的订单,在购物车中选中,提交,跳转到订单界面. 获取传过来的信息,那也要建立一个订单表,当我支付的时候,也要获取一些数据,将这些数据放到这个表中 ...

  8. keras 分类回归 损失函数与评价指标

    1.目标函数 (1)mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()(2)mean_absolute_error ...

  9. Amber learning note A8: Loop Dynamics of the HIV-1 Integrase Core Domain

    1. Prepare Input File $ tleap >source leaprc.protein.ff14SB ----- Source: /home/wangq/Programs/am ...

  10. 分析api时去除全局异常

    invoke-static {p0}, Ljava/lang/Thread;->setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$Unca ...