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
Goldengate进程的拆分与合并的更多相关文章
- Goldengate进程的合并与拆分规范
Goldengate抽取进程的合并与拆分原则 1. 文档综述 1.1. 文档说明 本文档描述了对GoldenGate的抽取进程进行拆分和合并的基本原则和详细步骤. 1.2. 读者范围 本文 ...
- pdf拆分与合并
1.引用iTextSharp,用于拆分和合并pdf文件 using iTextSharp.text; using iTextSharp.text.pdf; 2.合并pdf //outMergeFile ...
- fasta文件拆分与合并
Linux中fasta文件的拆分与合并 FASTA文件的拆分: (1)如果从一个文件a提取第11至20个序列存到另一个文件b: awk -v RS='>' 'NR>1{i++}i>= ...
- 用飞信监控GoldenGate进程
监控GoldenGate进程 1) 在goldengate安装目录下建立文件ogginfo $vim ogginfo info all 2) 配置飞信报警 ...
- C#文件的拆分与合并操作示例
C#文件的拆分与合并操作示例代码. 全局变量定义 ;//文件大小 //拆分.合并的文件数 int count; FileInfo splitFile; string splitFliePath; Fi ...
- (Sql Server)数据的拆分和合并
(Sql Server)数据的拆分和合并 背景: 今天遇到了数据合并和拆分的问题,尝试了几种写法.但大致可分为两类:一.原始写法.二.Sql Server 2005之后支持的写法.第一种写法复杂而且效 ...
- GoldenGate 进程
GoldenGate进程 Manager进程 Manager进程是GoldenGate的控制进程,运行在源端和目标端上.它主要作用有以下几个方面:启动.监控.重启Goldengate的其他进程,报告错 ...
- NDK学习笔记-文件的拆分与合并
文件的拆分与合并在开发中经常会用到,上传或是下载的时候都有这样的运用 文件拆分的思路 将文件大小拆分为n个文件 那么,每个文件的大小就是等大小的 如果文件大小被n除不尽,那么就使用n+1个文件来拆分 ...
- spss-数据抽取-拆分与合并
spss-数据抽取-拆分与合并 数据抽取也成为数据拆分,是指保留.抽取原数据表中某些字段.记录的部分信息,形成一个新字段.新纪录.分为:字段拆分和随机抽样两种方法. 一:字段拆分 如何提取" ...
随机推荐
- Maven + 最新SSM整合
. 1. 开发环境搭建 参考博文:Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建 2. Maven Web项目创建 2.1. 2.2. 2. ...
- windows小技巧 从文件夹直接打开命令行位置
windows下从命令行打开某个目录下的东东时,会一直cd ~~~~,更简单的是: 直接用鼠标找到该文件夹或者文件,按住Shift键然后点击鼠标右键,选择"在此处打开命令行"即可 ...
- oracle 锁表查询及解决、表字段查询
在进行批量对DML操作时程序竟然中断了,不再往下执行.查询一下某张表被锁住了,因此不再往下执行了 如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信息 ...
- 从0开始学Swift笔记整理(一)
Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采用安全的编程模式,增加了现代 ...
- Android 5.x特性概览一
2014年,Google 携 Android 5.X 重装回归.迄今为止已有已有两年有余,全新设计的 UI风格和更加强悍的性能,再一次奠定了Android 的霸主地位.本文将就 UI 方面 Googl ...
- Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮
上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
- 大熊君说说JS与设计模式之------策略模式Strategy
一,总体概要 1,笔者浅谈 策略模式,又叫算法簇模式,就是定义了不同的算法,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 策略模式和工厂模式有一定的类似,策略模式相对简单容易理解,并 ...
- Eclipse的常用快捷键、旁门左道、系统错误小贴士
转自:http://usenrong.iteye.com/blog/1113700 eclipse是一个开源产品,目前比较流行和普遍的JAVA IDE(集成开发环境)它使用工程化方式管理.虽然ecli ...
- JS编程常识
一.UI层的松耦合 松耦合就是要求各层遵循“最少知识原则”,或者说是各层各司其职,不要越权: HTML:结构层 CSS:表现层 JS:行为层 对于各层的职能,有一句比较贴切的解释:HTML是名词(n) ...