ORACLE DDL复制原理

  1. DDL复制原理
    基于数据库全局Trigger的复制,在源数据建立一个Oracle全库级别的Trigger捕捉DDL操作到中间表,Extract读取中间表DDL语句并与DML语句根据scn排序,Pump投递到目标端,目标端Replicat在重现该DDL语句
  2. DDL复制和DML复制的区别
    (1). DDL复制是基于Trigger
    (2). DML复制是基于日志
    (3). 只是在主Extract进程中通过scn号安装发生顺序进行组装,保证DDL操作和DML操作按照原来的顺序在目标端执行。
  3. DDL复制和DML复制的关系
    DDL复制和DML复制可以项目独立,可以只启动DDL复制,也可以只启动DML复制,相互并不影响,他们之间只是在Extract进行组装时根据scn号进行排序

goldengate DDL实现

一.安装GoldenGate DDL对象

  1. 停止Extract进程组
GGSCI 1> stop *
Sending STOP request to EXTRACT DEPYA ...
Request processed.

Sending STOP request to EXTRACT EXTYA ...
Request processed.
  1. 指定源端数据库的模式
GGSCI 2> edit params ./GLOBALS
GGSCHEMA ggs  -------指定需要进行DDL复制的用户
  1. 停止Manager进程
GGSCI 3> stop MGR 
Manager process is required by other GGS processes.
Are you sure you want to stop it (y/n)? y

Sending STOP request to MANAGER ...
Request processed.
Manager stopped.
  1. 关闭Oracle的recyclebin
[oracle@prod]$ sqlplus / as sysdba
SQL> show parameter recyclebin
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF

SQL> alter system set recyclebin = off scope = both;

Recyclebin 10G后的新特性,当drop表时,如果没有指定purge,那么oracle只是将这个表重命名,并修改数据字典中的相关信息,表所占用的空间并没有回收,当表空间的可用大小不足时,oracle才会根据dropscn#逐个清理回收站的对象占用的空间。
5. 安装DDL对象

[oracle@prod]$ sqlplus / as sysdba

SQL> @/ogg/marker_setup.sql ------安装DDL支持所需要的marker系统
SQL> @/ogg/ddl_setup.sql  -----创建了进行DDL复制抽取和复制所用的对象
SQL> @/ogg/role_setup.sql   ------删除和创建DDL同步需要的角色
SQL> grant GGS_GGSUSER_ROLE to ggs;
SQL> @/ogg/ddl_enable.sql    -------启用DDL触发器

二.配置DDL支持

  1. 停止Extract 和 Replicat进程组
--Extract 端
GGSCI (gavinprod.com) 1> stop E*
EXTRACT EXT1 is already stopped.
EXTRACT EXT2 is already stopped.

GGSCI (gavinprod.com) 2> stop D*
EXTRACT DMP2 is already stopped.


--Replicat 端
GGSCI (odellprod.com) 1> stop *
REPLICAT REP1 is already stopped.
REPLICAT REP2 is already stopped.
  1. 修改Extract配置文件
GGSCI (gavinprod.com) 6> view params EXT2
extract ext2
userid ggate@gavinprod, password oracle
exttrail /opt/oracle/ggate/dirdat/ld

DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA, REPORT
table ggs.*;
  1. 修改Replicat配置文件
GGSCI (odellprod.com) 2> view params REP2

replicat rep2
ASSUMETARGETDEFS
userid ggate@odellprod,password oracle
discardfile /opt/oracle/ggate/dirdat/rep2_discard.txt, append, megabytes 10

DDL INCLUDE MAPPED
DDLOPTIONS REPORT
map source_prod.*, target target_prod.*;
  1. 重启进程
--Extract 端
GGSCI (gavinprod.com) 1> start E*
GGSCI (gavinprod.com) 2> start D*

--Replicat 端
GGSCI (odellprod.com) 1> start R*
  1. 验证结果

1)目标端建立table ogg_ddl_table

create table ogg_ddl_table (id number, name varchar2 (100) );

2)目标端查看所创建的table是否存在

select * from dba_objects where object_name = 'OGG_DDL_TABLE';

3)如果存在,测试成功

注意事项

  1. 不支持和有限支持的DDL类型
    (1). Oracle数据库保留的Schema,GoldenGate是不支持的,如SYS、SYSTEM、PUBLIC等等
    (2). GoldenGate10g DDL不支持Oracle回收站功能
    (3). GoldenGate支持不超过2M长度的DDL语句
    (4). GoldenGate只支持单向的DDL复制,不支持双向的DDL复制
    (5). GoldenGate只支持源端和目标端结构一致的