DDL复制是基于触发器的捕获模式(这也是oracle11.2.0.4之前版本下唯一的方式),因此,需要先在模式下建立触发器及触发器所用的数据库对象。GG提供了一系列sql脚本来创建这些触发器及相关的数据库对象。注意:DDL语句的数据量不能超过2MB。
grant create table,create sequence to ogg;
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追踪级别的脚本。
1 授予ogg执行uti_file包的权限
grant execute on utl_file to ogg;
edit params ./GLOBALS
GGSCHEMA ogg
2.为ogg创建触发器及其相关的数据库对象
进入goldengate软件安装目录,以SYSDBA身份登录oracle执行以下脚本,执行脚本过程中,需要输入的用户全部是ogg,安装模式为INITIALSETUP,如果数据字典或者某些内部的包有错误,则需要运行catalog.sql和catproc.sql脚本。
如果某项脚本执行错误,需要重新执行时,先要执行清除的脚本:ddl_remove.sql和marker_remove.sql
执行下列步骤,为ogg创建触发器及其相关的数据库对象:
进入goldengate软件安装目录,以SYSDBA身份登录oracle执行以下脚本,执行脚本过程中,需要输入的用户全部是ogg,安装模式为INITIALSETUP,如果数据字典或者某些内部的包有错误,则需要运行catalog.sql和catproc.sql脚本。
如果某项脚本执行错误,需要重新执行时,先要执行清除的脚本:ddl_remove.sql和marker_remove.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
配置抽取进程组,缺省下,源端不支持DDL操作,而复制端(即目的端)支持DDL
修改配置文件eora_1,增加下一行:
ddl include all all表示包括三个范围:mapped,nomapped和other
--------------目的端复制时报错处理--------------------
目的端报错:
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
***************DDL双向复制过程*************
四、双向DDL复制时,也要解决循环复制问题。OGG的抽取组设置中缺省忽略复制产生的DDL语句,因此,缺省不会产生循环复制。
1、修改目的端的抽取组配置文件,加入
ddl include all
所有的组随管理程序一起启动:
修改mgr配置文件,加入:
autostart er *ora* 所有包含ora字符的组随管理程序启动。
******************************************************************************************************
Veridata
=======================================================================================
veridata使用比较算法来对比源和目的之间的复制是否一致。它由一个或几个代理进程和专用的资料库服务器组成,资料库服务器上保存着veridata使用的元数据对象。代理进程安装在gg的节点上,将所需比较的对象的数据传送到服务器,由服务器来完成比较,给出结果。因此,服务器资源消耗较大,现实中多用单独的主机完成,可使用oracle、mysql及SQLserver作为数据库保存资料数据。我们的项目中不采用单独服务器的方式,选gg中的一个节点作服务器。
对于标准的veridata安装,要安装配置下列组件:
Veridata web
Veridata server
Veridata Agent
Veridata CLI
要比较的源和目的节点
agent要求:
server要求:
drop table mytest cascade constraints;
Ddl Include all:所有ddl语句都会传到对边(现实生活中ddl语句是有选择的,还可以正对对象选择and操作类型进行选择传送)