ITPub博客

首页 > 数据库 > Oracle > GoldenGate DDL复制

GoldenGate DDL复制

原创 Oracle 作者:Ashic 时间:2014-07-04 01:55:48 0 删除 编辑

在GoldenGate 10g中如果要使用DDL复制,则必须先关闭回收站

SQL> show parameter recyclebin

 

NAME                                     TYPE         VALUE

------------------------------------ ----------- ------------------------------

recyclebin                             string         on

 

alter system set recyclebin = off scope=spfile;

 

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.*;        

 

5、如果新建的表进行同步,update可能不成功,需要进行一下操作,这样子ogg才会去捕捉new_tab的日志信息:

 

ADD TRANDATA scott.new_tab;

 

 

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

 

 

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

 

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

 

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

 

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

解决办法: 在最新的GG11.2版本中针对此种情况设置了专门的冲突解决机制,在11.2以前配置解决这个冲突很复杂

(11:16:58 AM) louise.liang@oracle.com: 在initial load 中有一个参数可以避免这个冲突,但是在正常复制时一般不建议用

 

 

 

测试:

 

gc1删除emp_ogg表

scott@PROD>drop table emp_ogg;

 

Table dropped.

 

QL> select * from tab;

 

TNAME                               TABTYPE        CLUSTERID

------------------------------ ------- ----------

BONUS                               TABLE

DEPT                               TABLE

DEPT_OGG                       TABLE

EMP                               TABLE

EMP_OGG                        TABLE

SALGRADE                       TABLE

TEST1                               TABLE

TEST1_STAT                       TABLE

 

8 rows selected.

 

gc2查看,emp_ogg以消失

SQL> select * from tab;

 

TNAME                               TABTYPE        CLUSTERID

------------------------------ ------- ----------

BONUS                               TABLE

DEPT                               TABLE

DEPT_OGG                       TABLE

EMP                               TABLE

SALGRADE                       TABLE

TEST1                               TABLE

TEST1_STAT                       TABLE

 

7 rows selected.

 

 

 

gc2删除SALGRADE表

SQL> drop table SALGRADE;

 

Table dropped.

 

gc1SALGRADE表以消失

scott@PROD>select * from tab;

 

TNAME                               TABTYPE        CLUSTERID

------------------------------ ------- ----------

CLASSES                        TABLE

DEPT                               TABLE

DEPT_CLUSTER                       TABLE                2

DEPT_OGG                       TABLE

EMP                               TABLE

EMP_CLUSTER                       TABLE                1

EMP_DEPT                       CLUSTER

STUDENTS                       TABLE

TEST1                               TABLE

TEST1_STAT                       TABLE

TEST2                               TABLE

TEST2_STAT                       TABLE

 

12 rows selected.

 

 

 

gc1创建表xiete

scott@PROD>create table xiete(id number,name varchar2(10));

 

Table created.

 

gc2:

SQL> select * from tab;

 

TNAME                               TABTYPE        CLUSTERID

------------------------------ ------- ----------

BONUS                               TABLE

DEPT                               TABLE

DEPT_OGG                       TABLE

EMP                               TABLE

TEST1                               TABLE

TEST1_STAT                       TABLE

XIETE                               TABLE

 

7 rows selected.

 

 

此时若要同步xiete表需要在两端作如下配置:

两个节点都赋予权限

grant INSERT, UPDATE, DELETE on scott.xiete to ogg;

 

EDIT PARAMS EORA_1

EXTRACT EORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD ogg

EXTTRAIL ./dirdat/aa

TABLE scott.emp_ogg;

TABLE scott.dept_ogg;

TABLE scott.xiete;                                或使用通配符

DDL INCLUDE OBJNAME "scott.*"

 

EDIT PARAMS PORA_1

EXTRACT PORA_1

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

PASSTHRU

RMTHOST gc2, MGRPORT 7788

RMTTRAIL ./dirdat/pa

TABLE scott.emp_ogg;

TABLE scott.dept_ogg;

TABLE scott.xiete;

 

EDIT PARAMS 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.*;

DDL INCLUDE ALL

DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

DDLERROR DEFAULT DISCARD

DDLERROR DEFAULT IGNORE RETRYOP

 

ADD TRANDATA scott.new_tab;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29492784/viewspace-1208954/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 创建CATALOG库
请登录后发表评论 登录
全部评论

注册时间:2014-02-18

  • 博文量
    21
  • 访问量
    102668