一、简介
在Oracle GoldenGate (OGG) 中配置DDL(数据定义语言)的作用主要在于确保数据库结构的变更(例如创建表、修改表结构、删除表等操作)能够在源数据库和目标数据库(或复制数据库)之间得到同步。这对于维护数据库间数据的一致性和完整性至关重要,特别是在实施数据复制、数据分发或迁移的场景中。以下是DDL配置在OGG中的几个关键作用:
-
架构同步:DDL复制使得任何在源数据库上执行的结构变更都能自动传播到目标数据库,保证两个数据库的架构保持一致。
-
自动化管理:通过配置,OGG可以自动捕获DDL语句,无需手动干预,提高了管理效率并减少了因人工操作错误导致的问题。
-
灵活的过滤与映射:OGG允许用户配置DDL筛选规则,决定哪些DDL操作需要被复制,以及如何映射目标数据库中的对象名称或属性,以适应不同的数据库环境或业务需求。
-
保障数据一致性:在复制数据的同时复制DDL操作,可以防止因数据库结构不一致导致的数据不匹配问题,确保应用程序在所有数据库上的行为一致。
-
简化维护:在多数据库环境下,统一管理和部署DDL变更,简化了数据库维护和升级流程。
配置DDL复制通常涉及在OGG的Extract进程(用于从源数据库捕获数据)和Replicat进程(用于在目标数据库应用数据)的参数文件中设置特定的选项,比如开启DDL捕获(ddl include
)和定义处理DDL的特定行为。此外,可能还需要编写预处理或后处理脚本(如前面提到的ddl_pin.sql
或ddl_pn.sql
),来处理特殊的DDL需求或适应目标系统的特定要求。
二、具体操作
goldengate 支持DDL复制的Oracle数据库对象且有限支持 clusters,functions,indexes,packages,roles,sequences,synonyms,tables,tablespaces,triggers,type,views,materialized views,users
mapped scope支持同步的DDL操作和数据库对象对table、map语句指定的内容有效
DDL operations CREATE , ALTER, DROP, RENAME, GRANT*, REVOKE*
Oracle database objects TABLE*, INDEX, TRIGGER, SEQUENCE* MATERALIZED VIEW*
当你需要同步除goldengate和Oracle数据库自带的用户外所有用户的DDL操作时,可在源端主抽取进程中加入下面的内容:
ddl include all
1、ogg配置DDL功能(源端与目标端)
a、停止进程
源端
stop epux
目标端
stop rpux
b、用户默认的表空间不能指定 system 表空间
c、关闭数据库的回收站功能并清空回收站
Oracle 10g
alter system set recyclebin=off scope=spfile;
其他版本:
purge dba_recyclebin;
d、指明支持 ddl 的对象放在哪个 schema 下面
ggsci> edit params ./GLOBALS
GGSCHEMA goldengate
e、增加相关权限
SQL> grant execute on UTL_FILE to goldengate;
SQL> grant restricted session to goldengate;
SQL> grant create table,create sequence to goldengate;
f、创建相关脚本准备
cd /u01/ogg
sqlplus / as sysdba
@marker_setup.sql
@ddl_setup.sql
@role_setup.sql
GRANT GGS_GGSUSER_ROLE TO goldengate;
@ddl_enable.sql
@$ORACLE_HOME/rdbms/admin/dbmspool.sql
@ddl_pin.sql goldengate
g、修改参数,增加 ddl 复制参数
源端ogg抽取进程
ggsci >edit params epux
--指定某一对象
--DDL INCLUDE OBJNAME "owner.*"
--指定所有对象
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA,REPORT
目标端ogg复制进程
ggsci >edit params rpux
--指定某一对象
--DDL INCLUDE OBJNAME "owner.*"
--指定所有对象
DDL INCLUDE ALL
DDLERROR default ignore retryop
h、启动各进程
源端
start epux
目标端
start rpux
i、测试 ddl 简单的复制
在源端创建一个表,在目标端查询是否存在
j、DDL 其它功能
支持两个系统之间的复制,主备,双活,两边的对象结构相同,必须使用assumetargetdefs参数
开启与关闭
ddl功能开启与关闭
cd /u01/ogg
@ddl_disable.sql
@ddl_enable.sql
清空 ddl trace 文件 ggs_ddl_trace.log
@ddl_cleartrace.sql
ddl的配置参数:
optype alert
objtype "table"
objname "user.tab*"
include mapped object "*";
exclude mapped object "user.table_name*"