GoldenGate安装部署及解决方案.docx
《GoldenGate安装部署及解决方案.docx》由会员分享,可在线阅读,更多相关《GoldenGate安装部署及解决方案.docx(64页珍藏版)》请在冰豆网上搜索。
GoldenGate安装部署及解决方案
GoldenGate安装部署及解决方案
文档控制
日期
作者
版本
说明
2011-5-19
周炯
1.0
初稿
1、GoldenGate简介
GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库实时同步(real-timedatasynchronize)、双活(active-activehighavailability)。
GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下:
如上图所示,GoldenGate的数据复制过程如下:
利用捕捉进程(CaptureProcess)在源系统端读取OnlineRedoLog或ArchiveLog,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate自定义的中间格式存放在队列文件(trail)中。
再利用传送进程将队列文件通过TCP/IP传送到目标系统。
捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点(checkpoint),记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制;
目标系统接受数据变化并缓存到GoldenGate队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据;
GoldenGate投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。
由此可见,GoldenGate是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。
GoldenGate将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:
1的压缩率对数据进行压缩,可以大大降低带宽需求。
在目标端,GoldenGate可以通过交易重组、分批加载等技术手段大大加快数据投递的速度和效率,降低目标系统的资源占用,可以在亚秒级实现大量数据的复制,并且目标端数据库是活动的
GoldenGate提供了灵活的应用方案,基于其先进、灵活的技术架构可以根据用户需求组成各种拓扑结构,如图所示:
GoldenGate可以提供可靠的数据复制,主要体现在下面三点:
(1)保证事务一致性
GoldenGate在灾备数据库应用复制数据库交易的顺序与在生产中心数据库上的顺序相同,并且按照相同的事务环境提交,确保在目标系统上数据的完整性和读一致性,为实时查询和事务处理创造了条件。
(2)检查点机制保障数据无丢失
GoldenGate的抽取和复制进程使用检查点机制记录完成复制的位置。
对于抽取进程,其检查点记录当前已经抽取日志的位置和写队列文件的位置;对于投递进程,其检查点记录当前读取队列文件的位置。
检查点机制可以保证在系统、网络或GoldenGate进程故障重启后数据无丢失。
(3)可靠的数据传输机制
GoldenGate用应答机制传输交易数据,只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据,从而保证了抽取出的所有数据都能发送到备份端。
数据传输过程中支持128位加密和数据压缩功能。
Oracle公司的GoldenGate产品,可以在异构的IT基础结构之间实现大量数据的秒一级的数据捕捉、转换和投递。
目前最新版本为V11.1.1.1.0。
GoldenGate可以支持几乎所有常用操作系统如和数据库平台,如下表所示:
操作系统
数据库
MSNT,2000,XP,Linux,SunSolaris,HP-UX,IBMAIX,HPNonStop,TRU64,IBMz/OS,OS/390
Oracle,DB2,MSSQLServer,MySQL,Enscribe,SQL/MP,SQL/MX,Sybase,Teradata,其他ODBC兼容数据库
2、文档约定和说明
为统一表示命令和便于查看,对格式作如下约定:
GG_HOME>表示从操作系统命令行(cmd)进入GoldenGate安装路径下执行命令。
GGSCI>表示在GoldenGate命令环境中执行命令。
SQL>表示在数据库下执行SQL语句
/***
***/表示配置文件内容,/***不包含在内。
<>表示自定义参数,如自定义表名
以下示例中若无特殊说明,GoldenGate使用的版本主要为11.1,部分使用10.4版本,除部分新特性,两者基本无差别;GoldenGate命令行中的操作均是在mgr主进程running时进行,当然,GoldenGate安装部分除外。
补充说明:
该文档主要介绍GoldenGate基本使用、GoldenGate的各类解决方案,以及以往本人在使用测试中总结的经验,文中的例子和执行的命令都是参照官方文档并亲自测试执行过。
但因个人能力所限,错漏之处再所难免,文档中也不可能覆盖GoldenGate的方方面面。
而且,因为GoldenGate本身提供了大量的参数,也不可能在这里一一列举,本文档中只举例了常用的一些参数命令,关于各个参数的具体使用语法和作用,还请参照官方文档《OracleGoldeGateReferenceGuide》。
3、GoldenGate软件安装
在不同的操作系统和平台上安装GoldenGate,需要在官网下载对应的版本。
32位系统和64位系统的安装介质虽然不同,但是在同一OS上安装方式是一样的。
GoldenGate需要解析数据库的日志文件,所以安装位置必须要能访问到日志文件(在线日志和归档文件),并具有相应的权限。
3.1GoldenGate软件安装包下载
经常有人问我GoldenGate的下载地址,所以在这里专门说明一下。
GoldenGate软件的官方下载地址:
首页如下:
网页开头点击这个Continue进入下载。
首次进入需要登记一些个人信息,如名字、公司等,然后下方选择同意协议之类的,点Continue进入搜索。
搜索时如下选择:
点GO,然后选择对应版本的OracleGoldenGate下载。
GoldenGate安装包一般只有几十兆的大小,下载还是很快的。
GoldenGate除了同步软件这块,还有其他相关的产品,比如OracleGoldenGateDirector,用于集中图形化管理和监控;OracleGoldenGateVeridata,用于两端同步数据质量检验。
在本文档中暂不介绍。
3.2Windows下安装
(1)安装MicrosoftVisualC++2005SP1
Windows操作系统需要首先下载安装MicrosoftVisualC++2005SP1发行包(注意该软件也分32位和64位)。
(2)绿色安装GoldenGate
下载对应平台版本的GoldenGate安装包,解压。
然后进入操作系统命令行(cmd),进入GoldenGate解压路径下,执行:
GG_HOME>ggsci--进入GoldenGate命令窗口模式
GGSCI>CREATESUBDIRS--建立子目录
GGSCI>editparammgr--配置GoldenGate主进程参数
由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数:
/***
PORT7801--GoldenGate主进程端口号
DYNAMICPORTLIST7802-7820--GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。
***/
保存,生成的参数文件保存在GG_HOME\dirprm下
然后可以启动GoldenGate主控制进程:
GGSCI>startmgr
GGSCI>infoall--查看进程状态
如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。
至此软件安装完成。
(3)管理GoldenGate服务
在WINDOWS下还可以将GoldenGate主进程作为系统服务进行管理,如下配置:
GGSCI>editparam./globals--配置全局参数,注意前面的./表明与其他参数文件位置不同,该参数文件是直接位于GoldenGate安装路径下的
输入:
/***
MGRSERVNAME--GoldenGate主进程端口号,为自定义的系统服务名
***/
然后退出GGSCI命令行:
GGSCI>exit
GG_HOME>installaddserviceaddevents--创建服务,完成后可以直接进服务进行管理
WINDOWS删除GoldenGate服务:
GG_HOME>installdeleteeventsdeleteservice--对应删除服务操作
或者在注册表删除:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可
3.3Linux和Unix下安装
(1)检查必需的lib包
下载对应平台版本的GoldenGate,解压。
在解压路径下执行:
[root@GG_HOME]>#lddggsci
将列出所有需要的lib和当前缺少的。
GoldenGate在Linux和Unix下安装,需要安装ORACLE的lib环境以及$ORACLE_HOME/lib下的几个包,所以必须安装在Oracle之后,而且确保在环境变量中加入:
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib
(2)绿色安装GoldenGate
在解压路径下执行./ggsci进行接口命令行,
[root@GG_HOME]>#./ggsci--进入GoldenGate命令窗口模式
GGSCI>CREATESUBDIRS--建立子目录
GGSCI>editparammgr--配置GoldenGate主进程参数
由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数:
/***
PORT7801--GoldenGate主进程端口号
DYNAMICPORTLIST7802-7820--GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。
***/
保存,生成的参数文件保存在GG_HOME\dirprm下
然后可以启动GoldenGate主控制进程:
GGSCI>startmgr
GGSCI>infoall--查看进程状态
如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。
至此软件安装完成。
和Windows下安装的主要区别是需要确认必需的lib包,进入GGSCI接口命令行后的操作都是一致的。
4、GoldenGate同步基本配置
GoldenGate支持目前大部分主流数据库,这也是它的优势之一。
下面列举了Oracle、Db2、Sybase之间的同步。
同步测试的准备工作中,有一部分是共通的,如下:
(1)在源端和目标端建立相同结构的两个表,建立主键。
保证复制的对象在一开始是一致的。
(2)保证没有相关对象的触发器(会导致数据冲突的那些)或设置失效。
(3)数据库需要开启必须的日志模式。
不同数据库的配置差异主要在这一步。
(4)源端和目标端都需要安装相应版本的GoldenGate软件,并分配一个有DBA权限的数据库用户给GoldenGate用以连接数据库。
备注:
分配给GoldenGate的用户一般情况下并不需要完全的DBA权限,在官方文档上有详细的权限需求说明,但是完全按照那个配置比较繁琐。
额外的,如果数据库使用ASM时,需要sysdba权限。
4.1oracle之间同步和GoldenGate基础
4.1.1Oracle数据库设置
首先安装好ORACLE,设置好ORACLE_SID,ORACLE_HOME等环境变量。
当然,推荐的做法是在每个进程配置文件里都加上指定的环境变量参数,在后面优化配置中进行说明。
Oracle数据库需要开启归档日志,并开启最小附加日志模式。
SQL>selectsupplemental_log_data_minfromv$database;--查看是否开启了最小附加日志模式
SQL>alterdatabaseaddsupplementallogdata;--开启最小附加日志模式
实际生产应用中,最好同时打开ORACLE的强制日志模式,以防止源数据库因直接路径加载忽略redo生成而导致这部分数据无法同步:
SQL>selectforce_loggingfromv$database;
SQL>Alterdatabaseforcelogging;
光开启最小附加日志模式还不够,还需要打开表级的补全日志,可以在GoldenGate中使用addtrandata命令强制重做日志记录主键值,以保证在目标端能成功复制:
GGSCI>dbloginuseridddw,passwordddw--GoldenGate中登录OARCLE数据库
GGSCI>addtrandataddw.--表名可以使用通配符
GGSCI>addtrandatacoss3.per_test,nokey,cols(sampletime,objectid)
--无主键指定字段补全的示例
也可以在数据库中打开:
SQL>altertableaddsupplementallogdata(primarykey)columns;
千万不要小看这步日志设置,其实在GoldenGate的配置中,这步是最容易出错的环节。
如果开启DDL复制做冗灾备份,最好直接在数据库级别打开补全日志:
SQL>alterdatabaseaddsupplementallogdata(primarykey,unique,foreignkey)columns;
检查一下,全是YES就OK了(整个数据库级别补全)
SQL>selectsupplemental_log_data_min,
supplemental_log_data_pk,supplemental_log_data_ui
fromv$database;
4.1.2关于Oracle补全日志补充说明
Oracle日志(redolog)一般用于实例恢复和介质恢复,但是如果需要靠日志还原完整的DML操作信息(比如Logmnr、Streams和这里的Goldengate),默认记录的日志量还不够。
比如一个UPDATE的操作,默认redo只记录了rowid以及被修改的字段信息,但这里GoldenGate还原这个事务,因为不是根据rowid而是SQL层面根据唯一键值来定位记录,所以还需要将主键或者其他字段的信息附加到日志中去。
要往日志中增加这些额外字段信息的操作,就是开启补全日志,即AddSupplementalLogging。
打开补全日志,会使数据库的日志量增加,所以只打开需要的级别和对象即可。
Oracle补全日志可以在数据库级别设置,也可以在表级别设置。
在数据库级别中,补全日志按补全的信息量,对应好几个级别:
(1)最小附加日志(Minimalsupplementallogging):
是开启logmnr的最低日志要求,提供了行链接(chainedrows)和多种数据存储(比如聚簇表、索引组织表)的信息。
在Oracle9.2之后的版本中,默认都不开启。
(2)主键补全(Primarykeysupplementallogging):
在日志中补全所有主键列。
如果表中无主键,则补全一个非空唯一索引列;如果非空唯一索引键也没,那么会补全除了LOB和LONG类型字段以外的所有列,这时就和下面的所有补全一样了。
(3)唯一键补全(Uniquekeysupplementallogging):
当唯一键列或位图索引列被修改时,在日志中补全所有唯一键列或位图索引列。
打开唯一键补全也会同时打开主键补全。
注意这个级别是需要条件触发的。
(4)外键补全(ForeignKeysupplementallogging):
当外键列被修改时,将在日志中补全所有外键列。
这个级别也是需要条件触发的。
(5)所有补全(Allsupplementallogging):
在日志中补全所有字段(排除LOB和LONG类型)。
这里对于补全日志的详细操作语句不做一一说明。
数据库级别中的5个类型中,除了最小附加日志级别,都可以在表级进行设置。
除此之外,表级还可以明确指定需要补全的列。
Oracle表级补全日志需要在最小补全日志打开的情况下才起作用,即若一个数据库没有开最小补全日志或之前dropsupplementallogdata操作则即便指定了表级补全日志,实际在重做日志输出的过程中描述的记录仍只记录rowid和相关列值。
而要关闭最小补全日志,也必须首先关闭数据库级别的其他补全级别后,才能关闭。
所以在GoldenGate中,对于Oracle数据库的日志补全要求,至少是打开最小附加日志和主键补全。
主键补全只要在需要同步的表上开启即可。
当然GoldenGate的addtrandata语法中也可以指定补全的列,这和Oracle表级补全日志的功能完全一致。
毕竟,日志还是由数据库生成的,GoldenGate并不能直接控制日志的生成方式和规则,只能根据所捕获的数据库的日志规则而来。
不同的数据库,日志补全的规则也会不同。
以上部分内容参考自《Oracle10gR2Utilities》SupplementalLogging部分
4.1.3dml同步
4.1.3.1一对一的实时同步简单配置
同步流程如图:
(1)源数据库端添加提取进程(extractprocess)
GGSCI>addextractextl,tranlog,beginnow--新增抽取进程extl,基于日志方式,立即生效
需要注意的是,GoldenGate中的进程名最长只能8个字符。
注意,如果是在RAC环境下,需要再加上THREADS指定提取的日志THREAD
GGSCI>addextractextl,tranlog,beginnow,THREADS
GGSCI>editparamextl--生成并编辑同名配置文件
/***
extractextl--抽取进程名
useridddw@orcl,passwordddw--连接本机DB的帐号密码
rmthost192.168.0.44,mgrport7801--目标数据库服务器地址和GG服务端口号
rmttraild:
\tools\GG\gg10g\dirdat\rl--远程队列的位置(下一步建的东西)
dynamicresolution--优化参数,动态分析表结构
gettruncates--抓取truncate数据
tableddw.aatest;--需要抽取的表,可以使用通配符
***/
然后给这个提取进程创建远端队列,即图中的RMTTRAIL:
GGSCI>addrmttraild:
\tools\GG\gg10g\dirdat\rlextractextl
需要注意的是,这里最后的名称rl(可以自定义,字母或数字)是指以后生成的trail文件都会以rl开头,如rl000001,这个文件头名称最长只能2个字符。
如果需要在文件级别区分队列,建议将队列创建于于不同的目录下。
开启这个提取进程:
GGSCI>startextl
GGSCI>infoall--查看所有进程状态
此时extl进程running则表示已成功运行,这时开始会在前面指定的目标端队列位置生成trail文件。
如果进程出错,可以使用viewreportextl查看错误信息。
(2)目标数据库端添加复制应用进程(replicatprocess)
在目标端GoldenGate命令行中配置复制进程:
GGSCI>addreplicatreplexttraild:
\tools\GG\gg10g\dirdat\rl,beginnow,nodbcheckpoint–新增复制进程,使用对应的队列rl,即刻开始,使用文件检查点
GGSCI>editparamrepl--配置复制进程参数
/***
replicatrepl--复制进程名
useridddw@orcl,passwordddw--目标数据库的帐号密码
assumetargetdefs--两台数据库数据结构一致则使用此参数
reperrordefault,discard--如果复制数据出错则忽略
discardfileD:
\repsz.dsc,append,megabytes100--错误信息写入XXXX文件,追加模式,最大100m
gettruncates--复制truncate操作
mapddw.aatest,targetddw.aatest_1;--映射关系,注意target前必须留一个空格
--mapddw.aatest,targetddw.aatest_1,keycols(name),where(TYPE1="1")
--加两横杠在配置文件中进行注释;keycols指定唯一键;where筛选数据
***/
开启复制进程:
GGSCI>startrepl
至此,一个最简单的同步配置完成,对于源数据库相应表的insert,update,delete和truncate操作都将通过日志捕获并同步到目标数据库。
4.1.3.2使用datapump
加入datapump后的数据传输的流程:
这里的datapump与ORACLE10g推出的数据泵不是一个概念。
在GoldenGate中,datapump相当于一个次级提取进程(secondaryextract)。
在上面演示的同步流程中,提取进程直接将提取的redo信息经过处理后放置到了目标端服务器上,当两者之间的网络出现故障时,会因无法生成trail文件而导致提取进程崩溃,错误提示类似如下:
2010-11-1210:
01:
21GGSERROR150TCP/IPerror10061(由于目标机器积极拒绝,无法连接。
);retriesexceeded.
2010-11-1210:
01:
21GGSERROR190PROCESSABENDING.
而加入datapump后,主提取进程(即第一个extract)首先