zoukankan      html  css  js  c++  java
  • OGG-DDL复制

    http://blog.sina.com.cn/s/blog_96d348df0102vg6q.html

    OGG目前只支持Oracle和TeraData的ddl复制,Oracle数据库能够支持除去数据库系统对象之外所有对象DDL变化的复制。

    配置方法有两种:基于trigger的DDL 和 Native DLL

    一. 基于trigger的DDL
    源库建立一个Oracle全库级的Trigger(SYS.GGS_DDL_TRIGGER_BEFORE)调用ddl_setup.sql生成的package(DDLReplication )捕捉DDL操作到中间表(默认为:GGS_MARKER/GGS_DDL_HIST),CAPTURE通过CSN把DDL和DML排序后进行相应的组装然后投递到目标端。
    DDL和DML是相互独立存在的,DDL复制是基于Trigger/DML复制基于日志文件,DDL捕捉的是sql语句/DML捕捉的是LCR。DDL复制的Trigger建立和启用后,无论DML复制是否运行,该Trigger一直在发生作用,捕捉DDL sql语句到中间表。Trigger被禁止后不再抓取DDL操作。因此,DML复制的起停并不影响DDL的捕获。打开DDL复制后能够对新创建的对象自动添加其对应的附加日志。


    GGS_MARKER由marker_setup.sql生成,存储数据库里面所有的DDL语句,基本相当于log里面的内容,GGS_MARKER_SEQ为GGS_MARKER生成PK,一次DDL操作会在GGS_MARKER中写入2条记录。记录了表记录的序列号/Object ID/对应GGS_DDL_HIST的序列号/DDL语句等等。可以在GLOBALS中自定义表名MARKERTABLE,不指定就用默认名称。
    GGS_DDL_HIST存储oracle非系统用户的DDL语句(当然要符合DDL INCLUDE ALL) ,但是不包括create语句,GGS_DDL_SEQ为GGS_DDL_HIST生成PK。可以在GLOBALS中自定义表名DDLTABLE,不指定就用默认名称。


    限制-要求:
    1.两端必须是OGG支持DDL数据库,且不支持Oracle Standby DB的DDL抽取。
    2.支持双向复制的DDL仅限2个节点支持的复制,不支持多对多体系。
    3.两端的表结构保持一致即replicat中设置ASSUMETARGETDEFS参数。
    4.不支持DDL transform,但是支持map对应用户及对应对象和filter。
    5.DDL语句必须小于2M大小。
    6.DATA PUMP进程不负责任何的map和filter,使用PASSTHRU让该进程只复制传输Trail文件。
    7.数据库每日产生日志量不宜过大,如:100GB以下。
    8.应用系统在数据库中不能有频繁的DDL操作,如频繁建立中间表等操作。


    CAPTURE是默认关闭DDL的,而DATA PUMP进程和REPLICAT进程的DDL开关默认是打开的,只要在CAPTURE进程中配置DDL复制参数即可,但是建议在replicat中配置DDL相关属性。REPLICAT进程默认是所有DDL都复制,如果有多个REPLICAT进程运行,此时在参数中不进行复制范围限制,必然引起DDL的重复复制,所以在每个REPLICAT进程都需要进行配置,OGG管理用户和Oracle数据库自带的系统用户的DDL操作将不会被复制,当开启Full DDL(ALL Scope)支持时,不需要在参数文件中使用GETTRUNCATES参数 。

    格式:
    DDL     [ {INCLUDE | EXCLUDE} [, MAPPED | UNMAPPED | OTHER | ALL] [, OPTYPE ] [, OBJTYPE ‘’] [, OBJNAME “”] [, INSTR ‘’]
    样例:
    DDL &
    INCLUDE ALL &
    EXCLUDE OPTYPE DROP &
    EXCLUDE OPTYPE TRUNCATE &
    INCLUDE MAPPED OBJTYPE 'table' &
    INCLUDE MAPPED OBJTYPE 'index' &
    EXCLUDE OPTYPE COMMENT &
    DDLOPTIONS  NOCROSSRENAME  REPORT
    DDLOPTIONS ADDTRANDATA REPORT

    查看关于DDL信息
    1.查看GGS_MARKER表,也可以从DDL生成日志中查看(user_dump_dest/ggs_ddl_trace.log)
    [oracle@tianbaobao trace]$ tail -f ggs_ddl_trace.log
    SESS 4294967295-2015-02-16 00:22:21 : DDL : ************************* Start of log for DDL sequence [11], v[ OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1] trace level [0], owner schema of DDL package [OGG], objtype [ROLE PRIVILEGE] name [.]
    SESS 4294967295-2015-02-16 00:22:21 : DDLTRACE1 : Before Trigger: point in execution = [1.0], objtype [ROLE PRIVILEGE] name [.]
    SESS 4294967295-2015-02-16 00:22:21 : DDL : DDL operation [grant GGS_GGSUSER_ROLE to ogg ], sequence [11], DDL type [GRANT] ROLE PRIVILEGE, real object type [ROLE PRIVILEGE], validity [], object ID [], object [.], real object [.], base object schema [], base object name [], logged as [SYS]
    SESS 4294967295-2015-02-16 00:22:21 : DDL : Start SCN found [1190575]
    SESS 4294967295-2015-02-16 00:22:21 : DDL : ------------------------- End of log for DDL sequence [11], no DDL history metadata recorded for this DDL operation

    2.查看GGS_DDL_HIST表,可以在GGSCI中 dumpddl show,这里是看不到CREATE语句的。
    GGSCI (tianbaobao.ht8888.ht3 as ogg@dbsource) 5> dumpddl show
    *** Dumping DDL Metadata for DDL sequence [14]...
    Time of capture                   = Before DDL
    Time of DDL operation             = 2015-02-16 01:42:54
    DDL operation (maybe partial)     = [drop table t11 purge ]
    Start SCN of DDL operation        = 1194687
    DDL operation type                = DROP
    Object type                       = TABLE
    DB Blocksize                      = 8192

    Object owner                      = TIANBAOBAO
    Object name                       = T11
    Object ID                         = 87865
    Data object ID                    = 87865

    Object valid                      = VALID
    Clustered columns                 =
    Log group exists                  = 1
    Log group column#0                = ID
    Subpartition                      = NO
    Partition                         = NO
    Total number of columns           = 1
    Number of columns used            = 1

    Column #1, name                   = ID
    Column #1, ID                     = 1
    Column #1, type                   = 2
    Column #1, length                 = 22
    Column #1, is NOT NULL            = 1
    Column #1, precision              =
    Column #1, scale                  =
    Column #1, charset ID             = 0
    Column #1, charset form           = 0
    Column #1, alternate column ID    = 1
    Column #1, alternate name         = ID
    Column #1, alternate type         = NUMBER
    Column #1, alternate precision    =
    Column #1, alternate char used    =
    Column #1, alternate XML type     = 0

    Finished displaying metadata information (sequence number [14], DDL history table [ogg.GGS_DDL_HIST]).

    3.可以通过logdump中查看

    4.REPORT

    参数文件中加入ddloptions report后,使用report命令可以查看关于DDL相关信息。
    GGSCI (tianbaobao.ht8888.ht3) 1> view report ext_001
    2015-02-16 00:40:56  INFO    OGG-06507  MAPTABLE resolved (entry ogg.GGS_MARKER): TABLE "OGG"."GGS_MARKER".

    2015-02-16 00:40:57  INFO    OGG-06509  Using the following key columns for source table OGG.GGS_MARKER: SEQNO, FRAGMENTNO, OPTIME.


    定期清除数据
    长时间使用DDL复制,会在很多地方不断的增长相应记录,需要定期清除,避免空间占用率过大引起不必要的故障。
    1.GGS_MARKER表数据可以通过配置MGR参数PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30来定期删除。
    每30分钟purge一次,保持最近 3天未修改过的记录,但是超过5天未改变的记录将purge。
    2.GGS_DDL_HIST表数据可以通过配置MGR参数PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30 来定期删除。
    长期的insert,delete操作使碎片严重化,影响DDL复制性能,需定期清理碎片(shrink space),降低HWM。
    3.调用ddl_cleartrace.sql删除DDL日志文件。

    OGG也不是万能的,目前OGG还是有些对象无法复制
    create job是不支持复制的
    create trigger 是可以复制的,且enable状态,初始化过程中必须手工设置为disable或replicat参数中加入DBOPTIONS SUPPRESSTRIGGERS (DB版本:1020511202)
    Create tablespace是可以复制的,可以支持复制到不同文件目录,需要路径转换。样例: DDLSUBST '/oradata/orcl/' with 'd:oradataorcl'
    create table ** as select * from **,最终结果按照本地的数据来
    rename t1 to t2会被转换成alter table t1 rename to t2
    flashback table * to before drop是不支持复制的


    DDL性能调整
    修改Params.sql  define _ddl_rule_hint = '‘ 或者在GLOBAL文件中增加: DDLRULEHINT ,修改前切记备份。
    SQL> @?/rdbms/admin/dbmspool.sql   SQL> @ddl_pin goldengate 把DDL相关对象pin在内存中。



    二. 基于native的DDL
    Native DLL(通过logmining Server进行日志解析 – ogg12c+integrated  extract+db11204及 以上)
    基于Integrated模式,通过logmining Server进行日志解析,DDL复制参数配置和基于Trigger模式下一致。
    版本要求:
    OGG12c及以上
    DB11204及以上
    compatible参数设置11.2.0.4及以上

    使用Downstream模式下,sourcedb也必须满足以上要求。

  • 相关阅读:
    windows 10中出现“某个应用导致****文件的默认应用设置出现问题”
    全站仪数据修正为南方cass可识别数据
    用顺序表建立一个简单的可以插入删除的学生成绩管理表
    头插法与尾插法建立单链表
    修改windows下的服务名称
    批处理同时执行多个Ant文件
    Informix数据库中的TO_DATE函数
    Ant发送邮件email
    数据库视图
    Hibernate的三种状态的解释
  • 原文地址:https://www.cnblogs.com/elontian/p/9394615.html
Copyright © 2011-2022 走看看