GoldenGate安装部署及解决方案

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. --表名可以使用通配符

GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid) --无主键指定字段补全的示例

专业资料

也可以在数据库中打开:

SQL> alter table 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 指定提取的日志THREAD GGSCI> add extract extl,tranlog,begin now , THREADS

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 = \

--加两横杠在配置文件中进行注释;keycols指定唯一键;where筛选数

***/

开启复制进程: GGSCI>start repl

至此,一个最简单的同步配置完成,对于源数据库相应表的insert,update,delete和

专业资料

联系客服:779662525#qq.com(#替换为@)