GoldenGate安装部署及解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GoldenGate安装部署及解决方案
目录
GoldenGate安装部署及解决方案 (1)
1、GoldenGate 简介 (3)
2、文档约定和说明 (5)
3、GoldenGate软件安装 (6)
3.1 GoldenGate软件安装包下载 (6)
3.2 Windows下安装 (7)
3.3 Linux和Unix下安装 (8)
4、GoldenGate同步基本配置 (9)
4.1 oracle之间同步和GoldenGate基础 (9)
4.2 oracle与db2同步 (17)
4.3 oracle与sybase同步 (18)
5、GoldenGate同步方案 (19)
5.1 使用GoldenGate初始化加载 (19)
5.2 一对多数据同步(广播复制) (21)
5.3 多对一数据同步(集中复制) (22)
5.4 数据转换和过滤 (23)
5.5 关于目标端高数据安全性下的GoldenGate配置方案 (27)
5.6 GoldenGate双向复制(active-active) (30)
6、GoldenGate数据同步性能测试 (33)
6.1 测试中主要监测数据和监测方式 (33)
6.2 测试脚本和GoldenGate配置 (34)
6.3 测试步骤 (38)
6.4 性能测试结果 (40)
7、GoldenGate推荐配置 (42)
7.1 添加必要的环境参数 (42)
7.2 BATCHSQL参数 (42)
7.3 数据库用户密码加密 (43)
7.4 trail再压缩 (44)
8、GoldenGate Troubleshooting (45)
8.1 一些常用的进程信息和日志的查看方式 (45)
8.2 解析trail文件 (45)
附:GoldenGate新版本的一个特性 (46)
参考文档 (48)
文档控制
1、GoldenGate 简介
GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库实时同步(real-time data synchronize)、双活(active-active high availability)。
GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下:
如上图所示,GoldenGate的数据复制过程如下:
利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为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可以支持几乎所有常用操作系统如和数据库平台,如下表所示:
2、文档约定和说明
为统一表示命令和便于查看,对格式作如下约定:
GG_HOME>表示从操作系统命令行(cmd)进入GoldenGate安装路径下执行命令。
GGSCI>表示在GoldenGate命令环境中执行命令。
SQL>表示在数据库下执行SQL语句
/***
***/ 表示配置文件内容,/***不包含在内。
<>表示自定义参数,如自定义表名<tablename>
以下示例中若无特殊说明,GoldenGate使用的版本主要为11.1,部分使用10.4版本,除部分新特性,两者基本无差别;GoldenGate命令行中的操作均是在mgr主进程running时进行,当然,GoldenGate安装部分除外。
补充说明:
该文档主要介绍GoldenGate基本使用、GoldenGate的各类解决方案,以及以往本人在使用测试中总结的经验,文中的例子和执行的命令都是参照官方文档并亲自测试执行过。
但因个人能力所限,错漏之处再所难免,文档中也不可能覆盖GoldenGate的方方面面。
而且,因为GoldenGate本身提供了大量的参数,也不可能在这里一一列举,本文档中只举例了常用的一些参数命令,关于各个参数的具体使用语法和作用,还请参照官方文档《Oracle GoldeGate Reference Guide》。
3、GoldenGate软件安装
在不同的操作系统和平台上安装GoldenGate,需要在官网下载对应的版本。
32位系统和64位系统的安装介质虽然不同,但是在同一OS上安装方式是一样的。
GoldenGate需要解析数据库的日志文件,所以安装位置必须要能访问到日志文件(在线日志和归档文件),并具有相应的权限。
3.1 GoldenGate软件安装包下载
经常有人问我GoldenGate的下载地址,所以在这里专门说明一下。
GoldenGate软件的官方下载地址:/目前只有这个地址能下到对应32位操作系统的安装介质。
首页如下:
网页开头点击这个Continue进入下载。
首次进入需要登记一些个人信息,如名字、公司等,然后下方选择同意协议之类的,点Continue进入搜索。
搜索时如下选择:
点GO,然后选择对应版本的Oracle GoldenGate下载。
GoldenGate安装包一般只有几十兆的大小,下载还是很快的。
GoldenGate除了同步软件这块,还有其他相关的产品,比如Oracle GoldenGate Director,用于集中图形化管理和监控;Oracle GoldenGate Veridata,用于两端同步数据质量检验。
在本文档中暂不介绍。
3.2 Windows下安装
(1)安装MicrosoftVisual C ++ 2005 SP1
Windows操作系统需要首先下载安装MicrosoftVisual C ++ 2005 SP1发行包(注意该软件也分32位和64位)。
(2)绿色安装GoldenGate
下载对应平台版本的GoldenGate安装包,解压。
然后进入操作系统命令行(cmd),进入GoldenGate解压路径下,执行:
GG_HOME>ggsci --进入GoldenGate命令窗口模式
GGSCI> CREATE SUBDIRS--建立子目录
GGSCI>edit param mgr --配置GoldenGate主进程参数
由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数:
/***
PORT 7801--GoldenGate主进程端口号
DYNAMICPORTLIST 7802-7820--GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口
端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出
错。
***/
保存,生成的参数文件保存在GG_HOME\ dirprm下
然后可以启动GoldenGate主控制进程:
GGSCI>start mgr
GGSCI>info all --查看进程状态
如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。
至此软件安装完成。
(3)管理GoldenGate服务
在WINDOWS下还可以将GoldenGate主进程作为系统服务进行管理,如下配置:GGSCI>edit param ./globals --配置全局参数,注意前面的./ 表明与其他参数文件位置不同,该参数文件是直接位于GoldenGate安装路径下的
输入:
/***
MGRSERVNAME <name>--GoldenGate主进程端口号,<name>为自定义的系统服务名
***/
然后退出GGSCI命令行:GGSCI> exit
GG_HOME> install addservice addevents --创建服务,完成后可以直接进服务进行管理
WINDOWS删除GoldenGate服务:
GG_HOME>install deleteevents deleteservice--对应删除服务操作
或者在注册表删除:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可
3.3 Linux和Unix下安装
(1)检查必需的lib包
下载对应平台版本的GoldenGate,解压。
在解压路径下执行:
[root@GG_HOME]> # ldd ggsci
将列出所有需要的lib和当前缺少的。
GoldenGate在Linux和Unix下安装,需要安装ORACLE的lib环境以及$ORACLE_HOME/lib下的几个包,所以必须安装在Oracle之后,而且确保在环境变量中加入:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
(2)绿色安装GoldenGate
在解压路径下执行./ggsci进行接口命令行,
[root@GG_HOME]> # ./ggsci --进入GoldenGate命令窗口模式
GGSCI> CREATE SUBDIRS--建立子目录
GGSCI>edit param mgr --配置GoldenGate主进程参数
由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数:
/***
PORT 7801--GoldenGate主进程端口号
DYNAMICPORTLIST 7802-7820--GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口
端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出
错。
***/
保存,生成的参数文件保存在GG_HOME\ dirprm下
然后可以启动GoldenGate主控制进程:
GGSCI>start mgr
GGSCI>info all --查看进程状态
如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。
至此软件安装完成。
和Windows下安装的主要区别是需要确认必需的lib包,进入GGSCI接口命令行后的操作都是一致的。
4、GoldenGate同步基本配置
GoldenGate支持目前大部分主流数据库,这也是它的优势之一。
下面列举了Oracle、Db2、Sybase之间的同步。
同步测试的准备工作中,有一部分是共通的,如下:
(1)在源端和目标端建立相同结构的两个表,建立主键。
保证复制的对象在一开始是一致的。
(2)保证没有相关对象的触发器(会导致数据冲突的那些)或设置失效。
(3)数据库需要开启必须的日志模式。
不同数据库的配置差异主要在这一步。
(4)源端和目标端都需要安装相应版本的GoldenGate软件,并分配一个有DBA权限的数据库用户给GoldenGate用以连接数据库。
备注:分配给GoldenGate的用户一般情况下并不需要完全的DBA权限,在官方文档上有详细的权限需求说明,但是完全按照那个配置比较繁琐。
额外的,如果数据库使用ASM时,需要sysdba权限。
4.1 oracle之间同步和GoldenGate基础
4.1.1 Oracle数据库设置
首先安装好ORACLE,设置好ORACLE_SID,ORACLE_HOME等环境变量。
当然,推荐的做法是在每个进程配置文件里都加上指定的环境变量参数,在后面优化配置中进行说明。
Oracle数据库需要开启归档日志,并开启最小附加日志模式。
SQL> select supplemental_log_data_min from v$database;--查看是否开启了最小附加日志模式SQL>alter database add supplemental log data; --开启最小附加日志模式
实际生产应用中,最好同时打开ORACLE的强制日志模式,以防止源数据库因直接路径加载忽略redo生成而导致这部分数据无法同步:
SQL>select force_logging from v$database;
SQL> Alter database force logging;
光开启最小附加日志模式还不够,还需要打开表级的补全日志,可以在GoldenGate中使用add trandata命令强制重做日志记录主键值,以保证在目标端能成功复制:GGSCI>dblogin userid ddw,password ddw--GoldenGate中登录OARCLE数据库
GGSCI>add trandata ddw.<tablename>--表名可以使用通配符
GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid)
--无主键指定字段补全的示例
也可以在数据库中打开:
SQL>alter table <tablename>add supplemental log data (primary key) columns;
千万不要小看这步日志设置,其实在GoldenGate的配置中,这步是最容易出错的环节。
如果开启DDL复制做冗灾备份,最好直接在数据库级别打开补全日志:
SQL> alter database add supplemental log data (primary key,unique,foreign key) columns; 检查一下,全是YES就OK了(整个数据库级别补全)
SQL> select supplemental_log_data_min,
supplemental_log_data_pk,supplemental_log_data_ui
from v$database;
4.1.2关于Oracle补全日志补充说明
Oracle日志(redo log)一般用于实例恢复和介质恢复,但是如果需要靠日志还原完整的DML操作信息(比如Logmnr、Streams和这里的Goldengate),默认记录的日志量还不够。
比如一个UPDATE的操作,默认redo只记录了rowid以及被修改的字段信息,但这里GoldenGate还原这个事务,因为不是根据rowid而是SQL层面根据唯一键值来定位记录,所以还需要将主键或者其他字段的信息附加到日志中去。
要往日志中增加这些额外字段信息的操作,就是开启补全日志,即Add Supplemental Logging。
打开补全日志,会使数据库的日志量增加,所以只打开需要的级别和对象即可。
Oracle补全日志可以在数据库级别设置,也可以在表级别设置。
在数据库级别中,补全日志按补全的信息量,对应好几个级别:
(1)最小附加日志(Minimal supplemental logging):是开启logmnr的最低日志要求,提供了行链接(chained rows)和多种数据存储(比如聚簇表、索引组织表)的
信息。
在Oracle 9.2之后的版本中,默认都不开启。
(2)主键补全(Primary key supplemental logging):在日志中补全所有主键列。
如果表中无主键,则补全一个非空唯一索引列;如果非空唯一索引键也没,那么会
补全除了LOB和LONG类型字段以外的所有列,这时就和下面的所有补全一样
了。
(3)唯一键补全(Unique key supplemental logging):当唯一键列或位图索引列被修改时,在日志中补全所有唯一键列或位图索引列。
打开唯一键补全也会同时打
开主键补全。
注意这个级别是需要条件触发的。
(4)外键补全(Foreign Key supplemental logging):当外键列被修改时,将在日志中补全所有外键列。
这个级别也是需要条件触发的。
(5)所有补全(All supplemental logging):在日志中补全所有字段(排除LOB和LONG 类型)。
这里对于补全日志的详细操作语句不做一一说明。
数据库级别中的5个类型中,除了最小附加日志级别,都可以在表级进行设置。
除此之外,表级还可以明确指定需要补全的列。
Oracle表级补全日志需要在最小补全日志打开的情况下才起作用,即若一个数据库没有
开最小补全日志或之前drop supplemental log data操作则即便指定了表级补全日志,实际在重做日志输出的过程中描述的记录仍只记录rowid和相关列值。
而要关闭最小补全日志,也必须首先关闭数据库级别的其他补全级别后,才能关闭。
所以在GoldenGate中,对于Oracle数据库的日志补全要求,至少是打开最小附加日志和主键补全。
主键补全只要在需要同步的表上开启即可。
当然GoldenGate的add trandata 语法中也可以指定补全的列,这和Oracle表级补全日志的功能完全一致。
毕竟,日志还是由数据库生成的,GoldenGate并不能直接控制日志的生成方式和规则,只能根据所捕获的数据库的日志规则而来。
不同的数据库,日志补全的规则也会不同。
以上部分内容参考自《Oracle 10gR2 Utilities》Supplemental Logging部分
4.1.3 dml同步
4.1.3.1 一对一的实时同步简单配置
同步流程如图:
(1)源数据库端添加提取进程(extract process)
GGSCI>add extract extl,tranlog,begin now--新增抽取进程extl,基于日志方式,立即生效
需要注意的是,GoldenGate中的进程名最长只能8个字符。
注意,如果是在RAC环境下,需要再加上THREADS <n>指定提取的日志THREAD
GGSCI>add extract extl,tranlog,begin now , THREADS <n>
GGSCI>edit param extl --生成并编辑同名配置文件
/***
extract extl --抽取进程名
userid ddw@orcl,password ddw --连接本机DB的帐号密码
rmthost 192.168.0.44, mgrport 7801 --目标数据库服务器地址和GG服务端口号
rmttrail d:\tools\GG\gg10g\dirdat\rl--远程队列的位置(下一步建的东西)
dynamicresolution --优化参数,动态分析表结构
gettruncates --抓取truncate数据
table ddw.aatest; --需要抽取的表,可以使用通配符
***/
然后给这个提取进程创建远端队列,即图中的RMTTRAIL:
GGSCI>add rmttrail d:\tools\GG\gg10g\dirdat\rl extract extl
需要注意的是,这里最后的名称rl(可以自定义,字母或数字)是指以后生成的trail 文件都会以rl开头,如rl000001,这个文件头名称最长只能2个字符。
如果需要在文件级别区分队列,建议将队列创建于于不同的目录下。
开启这个提取进程:
GGSCI> start extl
GGSCI> info all --查看所有进程状态
此时extl进程running则表示已成功运行,这时开始会在前面指定的目标端队列位置生成trail 文件。
如果进程出错,可以使用view report extl 查看错误信息。
(2)目标数据库端添加复制应用进程(replicat process)
在目标端GoldenGate命令行中配置复制进程:
GGSCI>add replicat repl exttrail d:\tools\GG\gg10g\dirdat\rl,begin now,nodbcheckpoint–新增复制进程,使用对应的队列rl,即刻开始,使用文件检查点
GGSCI>edit param repl--配置复制进程参数
/***
replicat repl --复制进程名
userid ddw@orcl,password ddw --目标数据库的帐号密码assumetargetdefs--两台数据库数据结构一致则使用此参数
reperror default,discard --如果复制数据出错则忽略
discardfile D:\repsz.dsc,append,megabytes 100 --错误信息写入XXXX文件,追加模式,最大100m gettruncates --复制truncate操作
map ddw.aatest, target ddw.aatest_1; --映射关系,注意target前必须留一个空格
--map ddw.aatest, target ddw.aatest_1, keycols (name), where (TYPE1 = "1")
--加两横杠在配置文件中进行注释;keycols指定唯一键;where筛选数据***/
开启复制进程:
GGSCI>start repl
至此,一个最简单的同步配置完成,对于源数据库相应表的insert,update,delete和truncate操作都将通过日志捕获并同步到目标数据库。
4.1.3.2 使用datapump
加入datapump后的数据传输的流程:
这里的datapump与ORACLE 10g推出的数据泵不是一个概念。
在GoldenGate中,datapump相当于一个次级提取进程(secondary extract)。
在上面演示的同步流程中,提取进程直接将提取的redo信息经过处理后放置到了目标端服务器上,当两者之间的网络出现故障时,会因无法生成trail文件而导致提取进程崩溃,错误提示类似如下:
2010-11-12 10:01:21 GGS ERROR 150 TCP/IP error 10061 (由于目标机器积极拒绝,无法连接。
); retries exceeded.
2010-11-12 10:01:21 GGS ERROR 190 PROCESS ABENDING.
而加入datapump后,主提取进程(即第一个extract)首先将trail生成在本地,然后datapump读取本地trail再发送到目标服务器,即便网络故障,主提取进程仍然能随着事务生成trail文件,而datapump则会暂时停止传输,等待网络通畅后在将堆积的本地trail文件发送至目标服务器,从而实现了断点传输的功能。
在实际应用中,每一个同步流程都应该配置datapump以应对网络问题。
加入datapump的配置:
将前面extl参数文件中的
/***
rmthost 192.168.0.44, mgrport 7801
rmttrail d:\tools\GG\gg10g\dirdat\rl
***/
替换为
/***
exttrail d:\tools\GG\gg10g\dirdat\l1--本地队列文件生成位置
***/
配置datapump进程:
GGSCI>ADD EXTRACT pump1, EXTTRAILSOURCE <local_trail>, BEGIN <time>
--<local_trail>即是对应extl配置文件中定义的d:\tools\GG\gg10g\dirdat\l1
GGSCI> edit param pump1
/***
extract pump1
userid ddw, password ddw
rmthost 192.168.0.44, mgrport 7801
rmttrail d:\tools\GG\gg10g\dirdat\r1
PASSTHRU|NOPASSTHRU--直通模式或普通模式
gettruncates
table ddw.bbtest;
***/
直通模式用在两边表名、列名一致,可以直接映射的情况,不需要额外配置;普通模式可以配置表名列名自定义映射,可以加FILTER、transformation等,需要配置一个数据定义文件(data-definitions file)。
然后修改原先为提取进程配置远端队列位置:
GGSCI>delete rmttrail d:\tools\GG\gg10g\dirdat\rl extract extl
GGSCI>add rmttrail d:\tools\GG\gg10g\dirdat\rl extract pump1
然后启动extl和pump进程就OK了。
4.1.3.3 使用数据定义文件
GoldenGate数据定义文件(data-definitions file),主要用于不同数据源之间(比如下面的Oracle与DB2之间的同步),进行数据同步时用来转换数据格式。
数据定义文件主要包含表名、字段名、字段类型、字段长度和偏移量。
利用GoldenGate的defgen工具生成一个数据定义文件(data-definitions file),大致步骤如下:
(1)创建DEFGEN工具的参数文件
(2)运行DEFGEN工具生成数据定义文件
(3)配置GG进程识别定义文件
例子:
GGSCI>edit param defgen --创建DEFGEN工具的参数文件
/***
DEFSFILE <full_pathname>--指定由DEFGEN生成的数据定义文件的全路径和名称[{SOURCEDB | TARGETDB} <dsn>,] --oracle不需要配置这个参数
[USERID <user>[,PASSWORD <password>]] --DB2不需要配置PASSWORD
TABLE <owner>.<table>--分析指定表生成配置文件
***/
类似如下(ORACLE):
/***
DEFSFILE GG_HOME\dirdef\extdb.ref
USERID ddw,PASSWORD ddw
TABLE ddw.aatest;
***/
然后退出GGSCI,在GG安装路径下运行DEFGEN工具:
GG_HOME>defgen paramfile dirprm/defgen.prm
配置文件默认生成在GG_HOME\dirdef下,不要去手动修改。
如果对应表的表结构发生更改,需要重新生成这个配置文件。
然后将生成的配置文件拷贝至目标服务器的GG_HOME\dirdef下。
修改复制进程repl参数文件:
GGSCI>edit param repl
将原先的assumetargetdefs参数替换为sourcedefs GG_HOME\ dirdef\extdb.ref
GGSCI>stop repl
GGSCI>start repl
数据定义文件的配置完成。
4.1.3.4配置进程检查点(checkpoint)
检查点记录了进程读写的位置信息用以数据恢复,目的是为了防止进程因系统、网络崩溃而导致的数据丢失,对于GoldenGate保证数据同步过程中数据不丢失非常重要。
GoldenGate的检查点由一个内部进程自动控制,与数据库检查点的概念类似。
提取进程的检查点记录它在数据源中的读取位置和队列的写出位置,复制进程的检查点记录它读取队列的位置。
每条提取或复制进程都有自己对应的检查点信息。
当GoldenGate的进程重启时,由它所记录的检查点决定需要读取的队列位置。
GoldenGate的检查点信息有两种存放方式:
(1)默认存放在GGHOME\dirchk下的文件中,一个进程对应一个文件。
提取进程只能使用这种模式。
不需要特殊配置。
(2)存放在数据库指定的表中,需要进行如下配置:
首先在./globals参数文件中加入:
/***
CHECKPOINTTABLE [<owner>.<table>]--指定的检查点记录表
***/
然后运行:
GGSCI>DBLOGIN [SOURCEDB <dsn>][, USERID <db_user>[, PASSWORD <pw>]]
GGSCI>ADD CHECKPOINTTABLE [<owner>.<table>]--生成这个检查点记录表
在新增复制进程时可以在添加时指定checkpointtable [<owner>.<table>]替代nodbcheckpoint,使用数据库记录检查点信息。
和县招聘/post/job/
ORACLE官方文档中,比较推荐将复制进程的检查点信息存放到数据库表中进行管理,认为在某些情况下能促进数据恢复。
并指出检查点信息量非常小,而且是进行记录更新而非记录插入,一个进程只对应一条记录,在它特殊的检查点处理机制下不会对数据库造成影响。
个人猜想是当目标数据库崩溃还原后(特别是在不完全恢复的情况下),检查点信息能同数据库一起还原,在数据上能利用数据库事务性与数据库保持一致,从而在数据库正常打开后能继续进行数据同步。
但实际上并不必要,因为数据库故障的情况多种多样,就算检查点同
步恢复后,也不能保证直接就能启动GoldenGate进程。
4.1.3 ddl同步
GoldenGate的DDL同步只支持两边一致的数据库,限制条件较多(如不能进行字段映射、转换等),具体可以参考官方文档。
DDL的抓取不是通过日志抓取来捕获的,而是通过触发器来实现,所以对源数据库的性能影响要比单纯的数据抓取要大很多,可谓屏弃了GoldenGate的优势。
尽量不要使用GoldenGate的DDL复制功能,在大多数业务系统中,实际上不会有频繁的数据库结构变动,完全可以通过手工的方式进行维护。
确实有大量DDL 操作的环境,如果可以,还是推荐物理DG之类的替换方案;确实要使用GoldenGate的DDL 复制,那么请详细参考官方文档的限制和说明。
--以上主要为个人意见,有不同看法的请无视
开启DDL复制的基本配置步骤为:
(1)关闭ORACLE的回收站功能。
(2)选择一个数据库schema存放支持DDL的GoldenGate对象,运行相应创建脚本。
(3)编辑globals参数文件。
(4)修改extl和repl的配置文件
具体操作步骤:
(1)关闭数据库回收站:
SQL>alter system set recyclebin=off scope=both;
(2)编辑globals参数文件:
GGSCI>edit param ./globals
添加以下内容后保存:
GGSCHEMA ddw --标明支持DDL的GG对象存放在哪个schema下
(3)执行创建脚本:
首先需要命令行进入GG安装目录下,然后再运行sqlplus执行脚本,如果不进入目录下脚本执行会报错(应该是由于GG脚本中子脚本嵌套使用相对路径的问题所造成)。
SQL>@marker_setup.sql --提示输入目标schema
SQL>@ddl_setup.sql --提示输入目标schema,输入initialsetup最后输入yes
SQL>@role_setup.sql
SQL>grant GGS_GGSUSER_ROLE to ddw; --不进行该步赋权后面起进程会报错
SQL>@ddl_enable.sql --使触发器生效
(4)修改提取进程和复制进程的配置文件,分别加入ddl include all属性。
此时repl必须指定assumetargetdefs属性,这表明只有两边数据库结构一致的情况下才
可以启用DDL复制。
另外,开启DDL同步不能再只映射单表了,对整个模式下的对象都有效。
加入DDL复制之后,数据复制的lag明显增加了。
清除数据库中DDL复制的设置
在实际测试中,由于我在同一个数据库中进行映射,映射表结构不一致,导致进程报了一系列的错误。
这个时候需要把通过脚本创建的GG对象中的数据清空,安装目录下只提供了清除对象的脚本,可以如下操作:
首先要求把所有的GG进程停掉,包括mgr进程
SQL>@ddl_disable.sql --首先使DDL触发器失效
SQL>@ddl_remove.sql
SQL>@marker_remove.sql
role_setup.sql没有对应的清除脚本,但是这块不影响配置信息的清除
然后重新再创建脚本。
4.2 oracle与db2同步
设置DB2数据库参数:
db2 connect to <database> user <username> using <password>--DB2命令行工具登陆DB2
db2 get db cfg for <database name> --查看数据库参数配置
db2 update db cfg for <database name> using LOGRETAIN ON --设置LOGRETAIN参数
db2 update db cfg for <database name> using USEREXIT ON --设置USEREXIT参数
设置完后的参数配置相关显示如下:
Log retain for recovery status = RECOVERY
User exit for logging status = YES
重启数据库并进行全库备份:
db2 stop force
db2 start
db2 backup db <database>
指定归档路径:(OVERFLOWLOGPATH参数)
db2 connect to <database> user <username> using <password>
db2 update db cfg using overflowlogpath "<path>"。