• OGG双向复制



      注意:在进行如下配置之前,先在源数据库(原来的目标数据库)端添加辅助的redolog配置:
          1、SQL> alter database add supplemental log data;
                 SQL> alter system switch logfile;
            2、alter database force logging;
           
            否则启动extract进程会失败,使用view report eora_2查看详细信息时会显示如下错误:
            2012-12-07 06:58:03  GGS ERROR       500  Found unsupported in-memory undo record in sequence 60, at RBA 15113744, with SCN 0.4214362 (4214362)
    ... Minimum supplemental logging must be enabled to prevent data loss.
           
           
            3、在ogg环境下,添加日志跟踪:
            GGSCI (db.cn.oracle.com) 3> DBLOGIN USERID ogg, PASSWORD Ogg
            GGSCI (db.cn.oracle.com) 5> ADD TRANDATA scott.EMP_OGG

            GGSCI (db.cn.oracle.com) 6> ADD TRANDATA scott.DEPT_OGG


    一、双向复制节点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


        注意:在双向复制的过程中,如果表有主键,那么更新表主键列的时候,oracle会在目标端insert一条新行,而不是在原来的行上更新;如果没有主键列,无论update哪个列,都在目标数据库insert新行。
       

    二、支持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.*;   

    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 中有一个参数可以避免这个冲突,但是在正常复制时一般不建议用

  • 相关阅读:
    Linux性能监控
    程序员技术练级攻略
    使用 GDB 调试多进程程序
    nginx下面部署fast-cgi和C++【原】
    ROS Learning-024 (提高篇-002) rviz的安装和使用
    ROS Learning-023 (提高篇-001) 准备工作 --- 安装一些必要的软件包
    STM32 C++编程 005 I2c(Soft)类
    Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫
    设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本
    在PyCharm 软件中设置你的项目 使用的Python版本
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/6661579.html
Copyright © 2020-2023  润新知