OGG DML双向复制及DDL双向复制

一、上一篇配置了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.*

       OGG DML双向复制及DDL双向复制


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 

      OGG DML双向复制及DDL双向复制

③启动抽取进程:

    GGSCI(target)>start extract eora_2

④使用info命令查看抽取进程是否工作正常,可以加detail参数查看详细信息:

   GGSCI(source)>info extract eora_2[,detail]

         日志在dirrpt目录下。

         操作系统下,查看bb000000文件已产生。

   cd /u01/app/ogg/dirdat

            ls -l 

     OGG DML双向复制及DDL双向复制


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

    OGG DML双向复制及DDL双向复制

④使用info命令查看传输进程是否工作正常,可以加detail参数查看详细信息:

 GGSCI(source)>info extract pora_2[,detail]

         其中的status应是RUNNING才对

         日志在dirrpt目录下。

         操作系统下,查看目的库,pb000000文件已产生。(源端查看)

     cd /u01/app/ogg/dirdat

          ls -l  

     OGG DML双向复制及DDL双向复制


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

     OGG DML双向复制及DDL双向复制

④使用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,在源端查看表是删除

















上一篇:apache开启 gzip 压缩


下一篇:c#复制包含子目录文件夹代码