Goldengate进程的拆分与合并

简介: Goldengate的拆分与合并分类: ORACLE GoldenGate 2013-10-10 15:22 721人阅读 评论(0) 收藏 举报在使用Goldengate作为复制解决方案时,随着负载的增加,replicat组件常常是最先出现性能瓶颈的。

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

目录
相关文章
|
SQL 运维 Oracle
【大数据开发运维解决方案】ogg(GoldenGate)三大进程常用参数
PORT 7809 管理进程的监听端口,默认使7809,当7809不可用时会从DYNAMICPORTLIST定义的列表中选择一个可用的端口,主要用于本地goldengate进程之间的通信 DYNAMICPORTLIST 7810-7860 动态端口,可以指定最大256个可用端口列表,用于主端和备端的进程通信,当目标端有防火墙设置时或者主端的投递进程传送数据要经过防火墙(就是主端有防火墙设置时)才能到达备端时,需要在网络上开通指定的端口。源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口,指定足够的端口去容纳进程数的扩张,这样就不需要停止和重启管理器进程
【大数据开发运维解决方案】ogg(GoldenGate)三大进程常用参数
|
SQL 缓存 运维
【大数据开发运维解决方案】GoldenGate replicat进程延迟分析步骤
GoldenGate几乎支持市面上流行的所有主流的操作系统平台和数据库。 博主所在单位目前使用Oracle GoldenGate将各个业务生产库汇聚到一起做数仓***实时ODS平台***, 我们采用异构同步,即源端同步过来的表在ODS新增了一个etltime字段,用来记录当前数据变更时间。 为了记录数据的事务变更历史记录,我们将数据的变更记录映射同步到一张tab_name_audit表中。为了防止源端业务库误删数据,我们将被删除的数据映射同步到一张tab_name_his表中。原表映射到ods后还是正常的映射同步dml操作。
【大数据开发运维解决方案】GoldenGate replicat进程延迟分析步骤
|
监控 Oracle 关系型数据库
用飞信监控GoldenGate进程
监控GoldenGate进程 1)         在goldengate安装目录下建立文件ogginfo $vim ogginfo  info all 2)         配置飞信报警                                      下载飞信安装包http://down.
954 0
|
关系型数据库 Oracle
GoldenGate 配置extract,replicat进程自启动
在GoldenGate中主进程是manager进程,使用start mgr启动。可以在mgr进程中添加一些参数用来在启动mgr进程的同时启动extract和replicat进程   GGSCI (gg01) 130> VIEW params mgr   --mgr主进程端口号   PORT...
893 0
|
SQL Oracle 关系型数据库
(转)goldengate 复制进程replicat出现ORA-01403 错误
最近,在goldengate的应用场景中,replicat进程经常出现append,start也启动不起来,查看日志,发现出现ora-01403错误,日志内容如下:   2012-09-27 19:06:39  INFO    OGG-00996  Oracle GoldenGate Delivery for Oracle, C_R_C6.
1193 0
|
17天前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
|
4天前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
39 1
|
10天前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作