暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

实战ogg19c集成模式如何启用DDL复制

原创 jieguo 2023-07-06
1311

如果源端和目标端数据库版本一致,服务器配置资源相当,考虑作为容灾备份或查询库分担,为了省去维护麻烦,我们可能会考虑启用DDL复制。(否则一般情况下不建议启用)

OGG从11R2开始在Integrated模式下使用了Logmining Server(OUTbound Server)这个进程读数据中的日志信息,转换生成Logical Change records(LCR)文件,extract进程再将读取这个LCR文件把数据存入trail文件。带来的一个明显好处就是OGG12c之后DDL无需触发器了。

ogg经典模式为了启用DDL还需要执行一堆DDL脚本,而使用集成模式之后只需在抽取和复制进程添加DDL简单语句即可。
注意:多租户环境只支持ogg集成模式。

抽取:

DDL INCLUDE ALL --如果需要过滤一些不必要的DDL命令,可以参阅更多参数细节https://docs.oracle.com/en/middleware/goldengate/core/19.1/reference/ddlsubst.html#GUID-27ABBB78-9DA3-4E51-A961-1FC49340C2B2
–DDL INCLUDE ALL
DDL INCLUDE MAPPED EXCLUDE MAPPED OBJTYPE ‘TRIGGER’ EXCLUDE MAPPED INSTR ‘FOREIGN KEY’
DDLOPTIONS ADDTRANDATA, REPORT

GGSCI (ora02) 42> view param e1

EXTRACT e1
USERIDALIAS jyc
TRANLOGOPTIONS MININGUSERALIAS mid
TRANLOGOPTIONS INTEGRATEDPARAMS (downstream_real_time_mine Y)
EXTTRAIL ./dirdat/e1
--DDL INCLUDE ALL
DDL INCLUDE MAPPED EXCLUDE MAPPED OBJTYPE 'TRIGGER' EXCLUDE MAPPED INSTR 'FOREIGN KEY'
DDLOPTIONS ADDTRANDATA, REPORT

DBOPTIONS ALLOWUNUSEDCOLUMN
GETTRUNCATES 
UPDATERECORDFORMAT FULL
fetchoptions nousesnapshot
fetchoptions fetchpkupdatecols
SOURCECATALOG jycdb
TABLE jyc.*;

复制:

DDL INCLUDE MAPPED
DDLOPTIONS REPORT

GGSCI (ora02) 43> view param rep1

REPLICAT rep1
USERIDALIAS jycdb
ASSUMETARGETDEFS
DBOPTIONS INTEGRATEDPARAMS(parallelism 2)
GETTRUNCATES
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
--SOURCECATALOG jycdb
MAP jycdb.jyc.*, TARGET jycdb.jyc.*;

源端新建表,索引,约束,主键,删除表,增删字段等等,通通在目标端都可以自动复制应用。

特别需注意:
1.对于ctas的方式,比如create table test as select * from user_objects;源端和目标端获取的结果是不一致的。因为创建表的数据来源于自身库的对象。
2.清理回收站动作不会同步

以下为测试的记录:

源端:

SQL> select * from t;

        ID
----------
         1
         2
        10
        22

SQL> insert into t values(23);

已创建 1 行。

SQL> commit;

提交完成。

SQL> truncate table t;

表被截断。

SQL> set time on
09:32:09 SQL> insert into t values(23);

已创建 1 行。

09:34:30 SQL> commit;

提交完成。

09:34:32 SQL> insert into t values(2);

已创建 1 行。

09:34:54 SQL> commit;

提交完成。

09:34:56 SQL> create table a (id int);

表已创建。

09:35:24 SQL>  insert into a values(1);

已创建 1 行。

09:35:40 SQL> commit;

提交完成。

09:35:42 SQL> create index idx_a on a(id);

索引已创建。

09:36:31 SQL> col index_name for a30
09:37:44 SQL> col table_name for a30
09:37:49 SQL> r
  1* select index_name,table_name from user_indexes

INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
SYS_C007546                    TEST
SYS_C007552                    T
PK_J_ID                        J
IDX_A                          A

09:37:49 SQL> alter table a add name varchar2(20);

表已更改。

09:38:15 SQL> desc a;
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(20)

09:38:20 SQL> alter table a modify(name varchar2(50));

表已更改。

09:38:47 SQL> desc a;
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(50)

09:38:51 SQL> alter table a drop column name;

表已更改。

09:39:24 SQL> desc a
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

09:39:27 SQL> create table b as select * from dba_objects;

表已创建。

09:40:33 SQL> select count(*) from b;

  COUNT(*)
----------
     72427

09:40:39 SQL> /

  COUNT(*)
----------
     72427

09:40:53 SQL> truncate table b;

表被截断。

09:41:00 SQL> drop table b;

表已删除。

09:41:17 SQL> show parameter recy;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle                  string
db_recycle_cache_size                big integer 0
recyclebin                           string      on
09:41:41 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iczVP5D13gU5rPqMDuQQ==$0 TABLE        2023-07-06:09:41:17
09:41:51 SQL> purge recyclebin;

回收站已清空。

09:47:12 SQL> desc a;
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

09:47:22 SQL> alter table a add constraint pk_a primary key(id);

表已更改。

09:47:39 SQL> select constraint_name from user_constraints;

CONSTRAINT_NAME
--------------------------------------------------------------------------------
PK_J_ID
PK_A
SYS_C007546
SYS_C007551
SYS_C007552

09:48:31 SQL> col CONSTRAINT_NAME for a20
09:48:41 SQL> select table_name,constraint_name from user_constraints;

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ --------------------
J                              PK_J_ID
A                              PK_A
TEST                           SYS_C007546
T                              SYS_C007551
T                              SYS_C007552

09:48:55 SQL> 

10:54:23 SQL> create table t1(id int not null,name varchar(20),constraint pk_t1 primary key(id));

表已创建。

10:56:02 SQL> insert into t1 values(1,'a');

已创建 1 行。

10:56:17 SQL> commit;

提交完成。

10:56:19 SQL> 

目标端:

SQL> select * from t;

        ID
----------
         1
         2
        10
        22

SQL> /       

        ID
----------
         1
         2
        10
        22

SQL> /

        ID
----------
         1
         2
        10
        22

SQL> /

        ID
----------
         1
         2
        10
        22

SQL> /

        ID
----------
         1
         2
        10
        22

SQL> /

        ID
----------
         1
         2
        10
        22

SQL> /

        ID
----------
         1
         2
        10
        22
        23

SQL> set time on
09:32:04 SQL> /

        ID
----------
         1
         2
        10
        22
        23

09:32:06 SQL> /

未选定行

09:32:12 SQL> /

未选定行

09:34:37 SQL> /

未选定行

09:34:39 SQL> /

未选定行

09:34:41 SQL> /

        ID
----------
        23

09:34:43 SQL> /

        ID
----------
        23

09:34:58 SQL> /

        ID
----------
        23

09:35:00 SQL> /

        ID
----------
        23

09:35:01 SQL> /

        ID
----------
        23

09:35:03 SQL> /

        ID
----------
        23

09:35:04 SQL> /

        ID
----------
         2
        23

09:35:06 SQL> select * from a;

未选定行

09:35:56 SQL> /

        ID
----------
         1

09:36:00 SQL> select index_name from user_indexes;

INDEX_NAME
--------------------------------------------------------------------------------
SYS_C007569
PK_J_ID
IDX_A
SYS_C007546

09:36:59 SQL> col index_name for a30
09:37:14 SQL> col table_name for a30
09:37:20 SQL> select index_name,table_name from user_indexes;

INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------
SYS_C007546                    TEST
SYS_C007569                    T
PK_J_ID                        J
IDX_A                          A

09:37:21 SQL> desc a;
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(20)

09:38:24 SQL> desc a;
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(50)

09:39:03 SQL> desc a
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(50)

09:39:31 SQL> desc a
 名称                                    是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

09:39:34 SQL> select count(*) from b;

  COUNT(*)
----------
     72470

09:40:46 SQL> /

  COUNT(*)
----------
     72470

09:40:51 SQL> /

  COUNT(*)
----------
     72470

09:41:03 SQL> /

  COUNT(*)
----------
     72470

09:41:05 SQL> /

  COUNT(*)
----------
     72470

09:41:06 SQL> /

  COUNT(*)
----------
     72470

09:41:08 SQL> /

  COUNT(*)
----------
         0

09:41:10 SQL> /

  COUNT(*)
----------
         0

09:41:22 SQL> /
select count(*) from b
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在


09:41:24 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:41:59 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:17 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:22 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:24 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:27 SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:30 SQL> show recyclebin;                
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:44 SQL> /
select count(*) from b
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在


09:42:53 SQL> show recyclebin;   
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
B                BIN$/8iFGdxoEazgU5zPqMCqqQ==$0 TABLE        2023-07-06:09:41:23
09:42:59 SQL> purge recyclebin;

回收站已清空。

09:43:06 SQL> show recyclebin;   
09:43:11 SQL> col CONSTRAINT_NAME for a20
09:49:02 SQL> select table_name,constraint_name from user_constraints;

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ --------------------
T                              SYS_C007568
T                              SYS_C007569
J                              PK_J_ID
A                              PK_A
TEST                           SYS_C007546

09:49:10 SQL> select * from t1;

未选定行

10:56:26 SQL> /

未选定行

10:56:27 SQL> /

        ID NAME
---------- --------------------
         1 a

10:56:30 SQL> 

相关参考:
https://www.modb.pro/db/84733
http://blog.itpub.net/29785807/viewspace-2685439/

最后修改时间:2023-07-07 10:24:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论