分类: 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)