Oracle Goldengate双向复制配置



一、双向复制节点2配置:

1)添加附加的redolog信息

DBLOGIN USERID ogg, PASSWORD ogg


ADD TRANDATA scott.*


2)配置extract

GGSCI (cuug97) 11> EDIT PARAMS EORA_1


EXTRACT EORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD ogg

TRANLOGOPTIONS EXCLUDEUSER ogg (双向复制的配置关键)

EXTTRAIL ./dirdat/aa

TABLE scott.*;



GGSCI (cuug97) 11> ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW

EXTRACT added.


GGSCI (cuug97) 12> ADD EXTTRAIL ./dirdat/aa, EXTRACT EORA_1, MEGABYTES 5

EXTTRAIL added.


GGSCI (cuug97) 13> START EXTRACT EORA_1


3)配置pump进程

GGSCI (cuug97) 15> EDIT PARAMS PORA_1


EXTRACT PORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

PASSTHRU

RMTHOST cuug95, MGRPORT 7809

RMTTRAIL ./dirdat/pa

TABLE scott.*;



GGSCI (cuug97) 16> ADD EXTRACT PORA_1, EXTTRAILSOURCE ./dirdat/aa

EXTRACT added.


GGSCI (cuug97) 17> ADD RMTTRAIL ./dirdat/pa, EXTRACT PORA_1, MEGABYTES 5

RMTTRAIL added.



GGSCI (cuug97) 18> START EXTRACT PORA_1



4、第一节点(原来的源数据库)

1、配置checkpoint


GGSCI (cuug95) 1> EDIT PARAMS ./GLOBALS

CHECKPOINTTABLE ogg.ggschkpt


GGSCI (cuug95) 1> exit


GGSCI (cuug95) 1> DBLOGIN USERID ogg, PASSWORD ogg

Successfully logged into database.


GGSCI (cuug95) 2> ADD CHECKPOINTTABLE


2、配置replicate

GGSCI (cuug95) 4> EDIT PARAM RORA_1


REPLICAT RORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD Ogg

HANDLECOLLISIONS

ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/RORA_aa.DSC, PURGE

MAP scott.*, TARGET scott.*;


GGSCI (cuug95) 4> ADD REPLICAT RORA_1, EXTTRAIL ./dirdat/pa


GGSCI (cuug95) 6> START REPLICAT RORA_1


二、支持DDL复制配置


1、在第两个节点执行执行DDL同步脚本命令:


先进入goldengate软件安装目录,以SYSDBA身份登录oracle执行以下脚本,执行脚本过程中,需要输入的用户全部是ogg,安装模式为INITIALSETUP,如果数据字典或者某些内部的包有错误,则需要运行catalog.sql和catproc.sql脚本。


SQL>@marker_setup

SQL>@ddl_setup

SQL>@role_setup

SQL>grant GGS_GGSUSER_ROLE to ogg;

SQL>@ddl_enable


如果某项脚本执行错误,需要重新执行时,先要执行清除的脚本:ddl_remove.sql和marker_remove.sql


2、配置两个节点的extract,在eora_1配置文件中添加以下一行:


DDL INCLUDE OBJNAME "scott.*"


最终的内容如下:

EXTRACT EORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD Ogg

TRANLOGOPTIONS EXCLUDEUSER ogg

EXTTRAIL ./dirdat/aa

DDL INCLUDE OBJNAME "scott.*"

TABLE scott.*;


注意:先关闭eora_1进程,再添加,然后重新启动。


3、配置两个节点的replicat

3.1、GGSCI (cuug95) 6> DBLOGIN USERID ogg, PASSWORD Ogg


GGSCI (cuug95) 7> add checkpointtable ogg.checkpoint


如果之前已经添加过,则无需操作。


4、配置REPLICAT进程参数文件,添加以下几行到rora_1配置文件中:


DDL INCLUDE ALL

DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

DDLERROR DEFAULT DISCARD

DDLERROR DEFAULT IGNORE RETRYOP


最终的内容如下:

REPLICAT RORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD Ogg

HANDLECOLLISIONS

ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/RORA_aa.DSC, PURGE

DDL INCLUDE ALL

DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

DDLERROR DEFAULT DISCARD

DDLERROR DEFAULT IGNORE RETRYOP

MAP scott.*, TARGET scott.*;


注意:先关闭rora_1进程,再添加,然后重新启动。



5、如果是序列,无需关注,因为oracle是取得序列的值进行insert的。


6、如果源端建表的时候是基于子查询,如果子查询中访问的表在目标端没有,则无法实现ddl同步。或者子查询中的表如果数据不一样,则同步的表数据也不一样,根据各自数据库的子查询中的表来定。


7、如果是insert操作,数据基于子查询,如果子查询总访问的表目标端没有,却不受影响,能够同步。


8、update某行时,如果目标数据库没有符合条件的行,ogg会insert一条新行。??