一、上一篇配置了DML单向传输
上一篇介绍了OGG的安装步骤,接下来是OGG DML双向复制和DDL双向复制。
二、DML双向复制
双向复制就是再配置一组,将ogg2上的操作传递到ogg1上
1、在目的端配置补充日志、强制记录日志、表的补充日志。
这里在之前已经配置完成,如果没有配置,请执行如下命令:
alter database add supplemental log data;
GGSCI(source)>add trandata scott.emp1
GGSCI(source)>add trandata scott.dept1
GGSCI(source)>info trandata scott.*
2、目的端配置日志抽取进程:
①置日志抽取配置文件:
GGSCI(target)>edit params eora_2
extract eora_2
userid ogg,password ogg
tranlogoptions excludeuser ogg
exttrail ./dirdat/bb
table scott.dept1;
table scott.emp1;
为方式循环复制,加入了"tranlogoptions excludeuser ogg"表示,由用户ogg提交的事务日志不被抽取
②增加抽取组:
GGSCI(target)>add extract eora_2,tranlog,begin now
定义本地trail文件:
GGSCI(target)>add exttrail ./dirdat/bb,extract eora_2,megabytes 10
③启动抽取进程:
GGSCI(target)>start extract eora_2
④使用info命令查看抽取进程是否工作正常,可以加detail参数查看详细信息:
GGSCI(source)>info extract eora_2[,detail]
日志在dirrpt目录下。
操作系统下,查看bb000000文件已产生。
cd /u01/app/ogg/dirdat
ls -l
3、目的端配置pump进程
①配置pump配置文件:
GGSCI(source)>edit params pora_2
extract pora_2
passthru
rmthost ogg1,mgrport 7809
rmttrail ./dirdat/pb
table scott.dept1;
table scott.emp1;
②增加pump进程组:
GGSCI(source)>add extract pora_2,exttrailsource ./dirdat/bb
增加远程trail文件
GGSCI(source)>add rmttrail ./dirdat/pb,extract pora_2,megabytes 10
③启动传输进程
GGSCI(source)>start extract pora_2
④使用info命令查看传输进程是否工作正常,可以加detail参数查看详细信息:
GGSCI(source)>info extract pora_2[,detail]
其中的status应是RUNNING才对
日志在dirrpt目录下。
操作系统下,查看目的库,pb000000文件已产生。(源端查看)
cd /u01/app/ogg/dirdat
ls -l
4、修改源端的原来的日志抽取组配置文件,添加屏蔽ogg用户的任何事务日志
①停止日志抽取:
GGSCI(source)>stop extract eora_1
②修改配置文件:
GGSCI(source)>edit params eora_1
增加:
tranlogoptions excludeuser ogg
③重新启动:
GGSCI(source)>start extract eora_1
存盘退出后,使用info和view report名令查看
5、在源的端增加检查点表
①配置文件,名字必须为GLOBAL,内容可以只有一行:
GGSCI(source)>edit params ./GLOBALS
checkpointtable ogg.ggschkpt
②连接数据库,建立检查点表:
GGSCI(source)>dblogin userid ogg,password ogg
GGSCI(source>add checkpointtable
6、启用目的端的复制
①配置复制配置文件:
GGSCI(source)>edit params rora_2
replicat rora_2
assumetargetdefs
handlecollisions 表示自动处理冲突的情况
userid ogg,password ogg
discardfile ./dirrpt/Riniaa.dsc,purge
map scott.dept1,target scott.dept1;
map scott.emp1,target scott.emp1;
存盘退出。
②增加复制组:
GGSCI(source)>add replicat rora_2,exttrail ./dirdat/pb
③启动复制:
GGSCI(source)>start replicat rora_2
④使用info命令和view report命令检查
现在DML双向复制配置完成,可以对表emp1和dept1操作验证配置结果!
三、DDL双向复制:
DDL复制是基于触发器的捕获模式(这也是oracle11.2.0.4之前版本下唯一的方式),因此,需要先在模式下建立触发器及触发器所用的数据库对象。GG提供了一系列sql脚本来创建这些触发器及相关的数据库对象。
注意:DDL语句的数据量不能超过2MB。
GGS_MARKER // DDL marker表,用于存储DDL信息。 表中将只存有insert语句。
GGS_DDL_SEQ // marker表中用作序列。
GGS_DDL_HIST // DDL历史记录表,用于保存对象的原数据的历史数据。该表接受inserts, updates, 和deletes.
GGS_DDL_HIST_ALT // 保存配置对象ID的表
GGS_DDL_TRIGGER_BEFORE // DDL触发器触发DDL操作。操作信息写到maker表和历史表。
DDL Schema // 包含DDL同步的对象。必须在安装时定义,存在于GLOBALS文件中。
GGS_GGSUSER_ROLE // 运行DDL操作所需的角色。
ddl_pin // 用于在内存共享池中保持DDL tracing, DDL package, 和DDL trigger。主要是为了提高性能。
ddl_cleartrace.sql // 删除DDL trace文件的脚本
ddl_status.sql // 校验脚本,用于校验DDL对象是是否安装好了。
marker_status.sql // 校验脚本,校验GGS_MAKER表是否安装好了。
ddl_tracelevel.sql // 设置DDL追踪级别的脚本。
使能DDL复制,要选择一个模式来包含上述的DDL对象。我们选择ogg。授予ogg执行utl_file包的权限:
sql>grant execute on utl_file to ogg;
1、配置GLOBALS文件,将ogg加入其中(两端)
GGSCI>edit params ./GLOBALS
GGSCHEMA ogg
2、两端执行下列步骤,为ogg创建触发器及其相关的数据库对象
进入goldengate软件安装目录,以SYSDBA身份登录oracle执行以下脚本,执行脚本过程中,需要输入的用户全部是ogg,安装模式为INITIALSETUP,如果数据字典或者某些内部的包有错误,则需要运行catalog.sql和catproc.sql脚本。
如果某项脚本执行错误,需要重新执行时,先要执行清除的脚本:ddl_remove.sql和marker_remove.sql
SQL>grant create table,create sequence to ogg;(SQL>@ddl_disable.sql)
SQL>@marker_setup 会要求输入GG的schema名字,选择ogg
注意:10g及之前的版本,要求实例参数recyclebin置为off。
SQL>@ddl_setup 说明: ogg用户的缺省表空间若何其它用户共享,会报错。另外,11.1.1.2需要手动输入 ogg,INITIALSETUP,yes。
SQL>@role_setup 根据提示,执行授权名令:
SQL>grant GGS_GGSUSER_ROLE to ogg;
SQL>@ddl_enable
SQL> @marker_status.sql
3、配置抽取进程组,缺省下,源端不支持DDL操作,而复制端(即目的端)支持DDL
①修改配置文件eora_1.prm,增加下一行:
ddl include all //all表示包括三个范围:mapped(对抓取的表进行操作),nomapped(对其他表进行操作,比如create dept2)和other(create tablespace等等)
②目的端复制时报错处理
ERROR OGG-00519 Oracle GoldenGate Delivery for Oracle, rora_1.prm: Fatal error executing DDL replication: error [Error code [1921], ORA-01921: 角色名 'GGS_GGSUSER_ROLE' 与另一个用户名或角色名发生冲突 SQL /* GOLDENGATE_DDL_REPLICATION */ CREATE ROLE GGS_GGSUSER_ROLE /* GOLDENGATE_DDL_REPLICATION */], no error handler present.
解决办法是,复制组rora_1组的配置文件加入:
ddlerror default ignore retryop
4、双向DDL复制时,也要解决循环复制问题。OGG的抽取组设置中缺省忽略复制产生的DDL语句,因此,缺省不会产生循环复制。
①修改目的端的抽取组配置文件,加入
edit params eora_2
ddl include all
②所有的组随管理程序一起启动:
修改mgr配置文件,加入:
autostar er *ora* 所有包含ora字符的组随管理程序启动。
执行DDL语句,验证配置的正确性!
③源端登陆oracle通过scott
create table emp2 as select * from emp;
目标端查看emp2是否建立
④在目标端删除表emp2,在源端查看表是删除