OGG Configuring DDL Support

13.1 配置DDL的前提

Extract can capture DDL operations from a source Oracle Database through the use of a special DDL trigger or natively through the Oracle logmining server. Which of these methods you can use depends on the Extract capture mode and the version of the source Oracle Database. This section describes the available support in each capture mode.

13.1.1 integrated capture mode
支持两种DDL捕获方式:
- oracle 11.2.0.4 or later:database log mining server,也叫native DDL capture(也叫triggerless DDL capture),不需要触发器或其他对象支持。在多租户容器数据库中,这是唯一支持的DDL capture方式。数据库的compatibles参数必须设置为11.2.0.4以上。
- version earlier than 11.2.0.4:基于触发器的DDL capture方式,数据库的compatibles参数小于11.2.0.4。

13.1.2 classic capture mode下的DDL capture
classic capture mode下需要使用基于触发器的DDL capture。
classic capture mode不支持native DDL capture。
classic capture mode不支持从多租户容器数据库中捕获DDL。

13.2 DDL同步总览
DDL复制和DML复制是相互独立的,所有可以有如下同步方式:
- 只同步DDL
- 只同步DML
- 同步DDL和DML

13.3 OGG对于DDL复制的限制
13.3.1 DDL语句长度限制为4MB,如果DDL语句的长度大于支持的长度,extract会生成一个告警信息并且忽略这个DDL操作。
使用基于DDL触发器的捕获模式,被忽略的DDL存储在marker table中。使用ddl_ddl2file.sql脚本,可以像捕获其他DDL一样捕获被忽略的DDL语句,这个脚本会把DDL操作保存在USER_DUMP_DEST目录下的text file中。

D 安装基于触发器的DDL capture

这篇附录包含支持基于触发器方式的capture的对象的安装方法。

什么时候需要用到基于触发器的DDL capture?

安装步骤:
1.建立一个用户schema
2.赋予utl_file执行权限
3.为新创建的用户建立一个表空间,这个表空间不能让其他用户使用。
4.新建的表空间设置为自动扩展,能适应GGS_DDL_HIST和GGS_MARKER表的不断增大。
5.(可选)新建的表空间满的时候,为了让用户DDL失败,需要编辑params.sql脚本,设置ddl_fire_error_in_trigger参数为TRUE。如果表空间满了,则extract不能获取DDL,所以,停止DDL为扩展表空间和避免DDL遗漏赢得了时间。
6.创建或编辑GLOBALS文件,
7.在GLOBALS文件中,添加如下信息指定DDL schema:GGSCHEMA schema_name
8.(可选)修改默认创建的对象的名字(没必要)
9.为了使基于触发器的DDL复制能够识别到不可见索引,需要在params.sql脚本中设置如下信息:define allow_invisible_index_keys = ‘TRUE’
10.保存并关闭GLOBALS和params.sql文件
11.切换目录到OGG安装目录
12.退出所有oracle会话,包括sqlplus,应用程序,OGG进程,和其他使用oracle的软件,避免开启新的会话。
13.通过sqlplus,以拥有SYSDBA权限的用户登录。这个权限是为了在SYS用户下面创建DDL触发器。其他DDL对象都被创建在第一步创建的用户下面。
14.运行marker_setup.sql脚本。按照提示输入OGG用户。这个脚本创建支持DDL marker系统的支持。
15.运行ddl_setup.sql脚本,根据提示输入在第一步创建的DDL用户。(如果其他用户也在用这个表空间,则脚本报错。如果没有开启自动扩展,不会报错。)
16.运行role_setup.sql脚本,根据提示输入第一步创建的DDL用户。这个脚本删除并重建DDL同步需要的角色,并且赋予OGG DDL object的DML权限。
17.将创建的角色赋予需要执行OGG extract的用户。如果有多个用户,需要执行多次。
18.使DDL触发器生效。
19.为了改善DDL触发器的性能,执行ddl_pin脚本。

基于触发器的Oracle DDL复制原理:

(1)OGG DDL的复制是基于数据库全局trigger的复制,在source库建立一个oracle全局trigger捕获DDL操作到中间表,Extract读取中间表DDL语句并与DML语句根据csn排序,pump投递到target端,target端的replicat再重现该DDL语句。
(2)DDL复制基于trigger,而DML复制基于日志。两者相互独立,DML不影响DDL,DDL不影响DML捕获。

猜你喜欢

转载自blog.csdn.net/lijingkuan/article/details/77678195
ogg
DDL