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
千万不要小看这步日志设置,其实在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
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和
专业资料