• Goldengate进程的拆分与合并


    Goldengate的拆分与合并
    分类: ORACLE GoldenGate 2013-10-10 15:22 721人阅读 评论(0) 收藏 举报
    在使用Goldengate作为复制解决方案时,随着负载的增加,replicat组件常常是最先出现性能瓶颈的。为了适应不断增加的负载,就需要拆分replicat来实现并行复制,本文介绍Goldengate拆分的具体实施步骤。同时,作为拆分的逆向操作,介绍如何将拆分的多个replicat合并回一个replicat。

    拆分的方式一般分为两种:
    一种是用goldengate提供的@RANGE函数作表内的拆分,通过对表上主键列作hash算法将该表上发生的变更均分到多个replicat上来降低单个replicat组件的负载;
    另一种是将复制的表划分成几组,使用多个replicat组件来分别复制其中的一组表。
    前一种拆分和合并方式的具体步骤参考metalink文档:1320133.1和1512633.1。

    本文介绍后一种拆分方式的实现步骤。
    为了实现对表分组拆分,首先要考虑如何分组,通常我们可以按表的负载来划分。
    通过以下命令,生成近一段时间复制的统计report
    GGSCI>send rep01,report
    在report文件中可以看到各个表上在过去一段时间分别发生了多少变更,进而按负载将表均分到多个replicat组件中。
    接下来以将一路replicat拆分成两路的案例介绍具体实施步骤:

    replicat进程的拆分与合并
    拆分:
    1.停止replicat进程
    cd $GG_HOME
    ggsci
    GGSCI>stop rep01

    2.将两个新的replicat参数文件拷贝到$GG_HOME/dirprm目录中。
    这两个新的参数文件与原有的参数文件的主要区别是将其中的复制表按负载均分为了两部分,分别放在单独的参数文件中。

    3.创建新的replicat组件

    GGSCI> add checkpointtable chk_yl01a
    GGSCI> add checkpointtable chk_yl01b
    GGSCI> ADD REPLICAT rep01a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1 checkpointtable chk_yl01a
    GGSCI> ADD REPLICAT rep02a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1 checkpointtable chk_yl01b



    4.检查replicat进程的checkpoint信息
    GGSCI>info rep01,showch
    记录下其Current Checkpoint信息中的sequence和RBA值。
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752
    Timestamp: 2013-09-03 08:13:58.035316
    Extract Trail: /oracle/goldengate/ggs/dirdat/r1

    5.修改新建replicat进程的read checkpoint信息
    根据step 4中得到的Current checkpoint信息修改新建replicat进程的checkpoint信息,之后新建的replicat进程就会从旧replicat进程停止的位置开始抓取新的信息
    GGSCI> alter rep01a, extseqno <sequence>, extrba <RBA>
    GGSCI> alter rep02a, extseqno <sequence >, extrba <RBA>

    6.启动新建的replicat进程
    GGSCI>start rep01a
    GGSCI>start rep02a

    7.删除旧的replicat进程
    GGSCI>dblogin userid <gg user>,password ***
    GGSCI>delete rep01

    合并:
    1.停止extract进程
    cd $GG_HOME
    ggsci
    GGSCI>stop ext01

    2.检查extract进程的checkpoint信息
    GGSCI>info ext01,showch
    记录下其Write Checkpoint信息中的sequence和RBA值,比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 36277005

    3.检查pump进程的checkpoint信息
    GGSCI>info pump01,showch
    若pump进程的Current Checkpoint信息中的sequence和RBA值与step 2得到的值相等,则说明goldengate抓取的信息都已被传送到了target服务器上,可继续执行下一步骤。否则,等待并重复运行该命令。
    比如:
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 36277005

    同时,记录下其Write Checkpoint信息中的sequence和RBA值。
    比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2160
    RBA: 41659507

    4.检查replicat进程的checkpoint信息
    GGSCI>info rep01a,showch
    GGSCI>info rep02a,showch
    若replicat进程的Current Checkpoint信息中的sequence和RBA值与step 3中得到的Write Checkpoint信息相等,则说明goldengate抓取的信息都已被apply到target db,可继续执行下一步骤。否则,等待并重复运行该命令。
    比如:
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2160
    RBA: 41659507

    5.停止旧的replicat进程
    GGSCI>stop rep01a
    GGSCI>stop rep02a

    6.将合并后新的replicat参数文件拷贝到$GG_HOME/dirprm目录中。
    合并后新的参数文件是将原有的两个参数文件中的表合并到了一个文件中。

    7.创建新的replicat进程
    GGSCI> ADD REPLICAT rep01,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1

    8.修改新建replicat进程的read checkpoint信息
    根据step 4中得到的Current checkpoint信息修改新建replicat进程的checkpoint信息,之后新建的replicat进程就会从旧replicat进程停止的位置开始抓取新的信息
    GGSCI> alter rep01, extseqno <sequence>, extrba <RBA>

    9.启动新建的replicat进程
    GGSCI>start rep01

    10.启动extract进程
    GGSCI>start ext01

    11.删除旧的replicat进程
    GGSCI>dblogin userid <gg user>,password ***
    GGSCI>delete rep01a
    GGSCI>delete rep02a


    查询关于Goldengate的相关资料可发现,作为实现goldengate best practice的建议之一,oracle建议:"To avoid contention, Oracle recommends that when reading trail files, you pair each Replicat with its own trail file".也就是说,当考虑拆分replicat来实现并行复制时,oracle建议最好从pump组件开始拆分,以下步骤就针对前面的案例,进一步说明了如何从pump组件开始拆分goldengate.然后介绍如何对这种拆分作逆向合并。

    pump和replicat进程的拆分与合并
    拆分:
    1.停止extract进程
    cd $GG_HOME
    ggsci
    GGSCI>stop ext01

    2.检查extract进程的checkpoint信息
    GGSCI>info ext01,showch
    记录下其Write Checkpoint信息中的sequence和RBA值,比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2153
    RBA: 91925643

    3.检查pump进程的checkpoint信息
    GGSCI>info pump01,showch
    若pump进程的Current Checkpoint信息中的sequence和RBA值与step 2得到的值相等,则说明goldengate抓取的信息都已被传送到了target服务器上,可继续执行下一步骤。否则,等待并重复运行该命令。
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2153
    RBA: 91925643

    记录下其Write Checkpoint信息中的sequence和RBA值,比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 2332672

    4.停止旧的pump进程
    GGSCI>stop pump01

    5.检查replicat进程的checkpoint信息
    GGSCI>info rep01,showch
    若replicat进程的Current Checkpoint信息中的sequence和RBA值与step 3中得到的Write Checkpoint信息相等,则说明goldengate抓取的信息都已被apply到target db,可继续执行下一步骤。否则,等待并重复运行该命令。
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752

    6.停止旧的replicat进程
    GGSCI>stop rep01

    7.将两个新的pump参数文件拷贝到$GG_HOME/dirprm目录中。
    这两个新的参数文件与原有的参数文件的主要区别是将其中的复制表按负载均分为了两部分,分别放在单独的参数文件中。

    8.创建两个新的pump进程
    GGSCI>ADD EXTRACT pump01a, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
    GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r1, EXTRACT pump01a,MEGABYTES 100
    GGSCI>ADD EXTRACT pump02a, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
    GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r2, EXTRACT pump02a,MEGABYTES 100

    9.修改新建pump进程的read checkpoint信息
    根据step 3中得到的read checkpoint信息修改新建pump进程的checkpoint信息,让其从旧pump进程停止的位置开始抓取新的信息
    GGSCI> ALTER EXTRACT pump01a, EXTSEQNO <sequence>, EXTRBA <RBA>
    GGSCI> ALTER EXTRACT pump02a, EXTSEQNO <sequence>, EXTRBA <RBA>

    10.将两个新的replicat参数文件拷贝到$GG_HOME/dirprm目录中。
    与pump参数文件类似,这两个新的参数文件与原有的参数文件的主要区别是对表的拆分。

    11.创建两个新的replicat进程
    GGSCI>ADD REPLICAT rep01a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1
    GGSCI>ADD REPLICAT rep02a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r2

    12.删除traget服务器上/oracle/goldengate/ggs/dirdat/目录下原有的以r1开头的trail file文件

    13.启动新建的pump进程
    GGSCI>start pump01a
    GGSCI>start pump02a

    14.启动新建的replicat进程
    GGSCI>start rep01a
    GGSCI>start rep02a

    13.删除旧的pump进程
    GGSCI>delete pump01

    14.删除旧的replicat进程
    GGSCI>dblogin userid <gg user>,password ***
    GGSCI>delete rep01

    合并:
    1.停止extract进程
    cd $GG_HOME
    ggsci
    GGSCI>stop ext01

    2.检查extract进程的checkpoint信息
    GGSCI>info ext01,showch
    记录下其Write Checkpoint信息中的sequence和RBA值,比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2153
    RBA: 91925643

    3.检查pump进程的checkpoint信息
    GGSCI>info pump01a,showch
    GGSCI>info pump02a,showch
    若pump进程的Current Checkpoint信息中的sequence和RBA值与step 2得到的值相等,则说明goldengate抓取的信息都已被传送到了target服务器上,可继续执行下一步骤。否则,等待并重复运行该命令。
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2153
    RBA: 91925643

    记录下其Write Checkpoint信息中的sequence和RBA值,比如:
    Write Checkpoint #1
    GGS Log Trail
    Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 2332672

    4.停止旧的pump进程
    GGSCI>stop pump01a
    GGSCI>stop pump02a

    5.检查replicat进程的checkpoint信息
    GGSCI>info rep01a,showch
    GGSCI>info rep01a,showch
    若replicat进程的Current Checkpoint信息中的sequence和RBA值与step 3中得到的Write Checkpoint信息相等,则说明goldengate抓取的信息都已被apply到target db,可继续执行下一步骤。否则,等待并重复运行该命令。
    Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752

    6.停止旧的replicat进程
    GGSCI>stop rep01a
    GGSCI>stop rep02a

    7.将合并后新的pump参数文件拷贝到$GG_HOME/dirprm目录中。
    合并后新的参数文件是将原有的两个参数文件中的表合并到了一个文件中。

    8.创建新的pump进程
    GGSCI>ADD EXTRACT pump01, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
    GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r1, EXTRACT pump01,MEGABYTES 100

    9.修改新建pump进程的read checkpoint信息
    根据step 3中得到的read checkpoint信息修改新建pump进程的checkpoint信息,让其从旧pump进程停止的位置开始抓取新的信息
    GGSCI> ALTER EXTRACT pump01, EXTSEQNO <sequence>, EXTRBA <RBA>

    10.将合并后新的replicat参数文件拷贝到$GG_HOME/dirprm目录中。
    合并后新的参数文件是将原有的两个参数文件中的表合并到了一个文件中。

    11.创建新的replicat进程
    GGSCI>ADD REPLICAT rep01,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1

    12.删除traget服务器上/oracle/goldengate/ggs/dirdat/目录下原有的以r1开头的trail file文件

    13.启动新建的pump进程
    GGSCI>start pump01

    14.启动新建的replicat进程
    GGSCI>start rep01

    13.删除旧的pump进程
    GGSCI>delete pump01a
    GGSCI>delete pump02a

    14.删除旧的replicat进程
    GGSCI>dblogin userid <gg user>,password ***
    GGSCI>delete rep01a
    GGSCI>delete rep02a

  • 相关阅读:
    ORACLE 变量定义
    AcWing1082 数字游戏(数位dp)
    AcWing1081 度的数量(数位dp)
    UCF Local Programming Contest 2017 I题 Rotating Cards(贪心+树状数组)
    AcWing1048 鸡蛋的硬度(浅谈两种解法的思考方向)
    CF713C Sonya and Problem Wihtout a Legend (经典dp)
    CF269B Greenhouse Effect (dp LIS)
    CF463D Gargari and Permutations (LCS)
    AcWing987 最长公共子序列
    CF721C Journey (dp+拓扑)
  • 原文地址:https://www.cnblogs.com/jimeper/p/4299348.html
Copyright © 2020-2023  润新知