ITPub博客

首页 > Linux操作系统 > Linux操作系统 > goldengate配置DDL复制

goldengate配置DDL复制

原创 Linux操作系统 作者:myownstars 时间:2013-06-01 10:44:49 0 删除 编辑

需额外安装组件,主要如下

1

创建新用户DDLuser并执行grant execute on utl_file to schema

为其专门分配一个表空间且autoextend=on,用于存储ggs_ddl_hist/ggs_marker表;

编辑globals文件edit params ./globals,添加GGSCHEMA DDLuser

2

初始化脚本

位于OGG安装目录

以sysdba登陆oracle,执行marker_setup.sql/ddl_setup.sql/role_setup.sql,如果表空间被其他用户共享第2个脚本会失败,第3个脚本执行完将新建的role赋给DDLuser, grant ggs_ggsuser_role to DDLuser;

执行ddl_enable.sql启动DDL trigger

可选:执行ddl_pin.sql,将trigger用到的PL/SQL包pin到内存

3

默认extract不支持而replicat支持DDL,因此需要为Extract配置DDL参数

4

开启schema supplemental log:用于DDL replication,执行add schematrandata schema

 

 

限制

1

DDL可以被映射或过滤,但不能由datapump处理;

Datapump—对使用DDL的对象的DML操作配置passthru模式,将PASSTHRU参数放在候选表之前;不可对datapump使用DDL参数;

 

2

Rename table会被转换成alter table  rename,后者支持schema前缀,但rename view/sequence不能被转换,即source/target必须为同一object;

 

3

对于lob字段,redo只记录被更改的部分内容,可通过闪回查询从基表读取整个行;

DDL会导致闪回查询失败,因此执行DDL前需注意以下几点

暂停该表所有的DML;

等待extract读完剩余的redo并replicat将其应用,info replicat group;

执行DDL;

恢复DML;

 

4

DDL只能用于like-to-like配置,故replicat必须指定assumetargetdefs参数,如果使用sourcedefs参数replicat会abend

 

5

Initial load期间须禁用ddl extract/replicat,完成后须将所有source sequence均执行一次nextval

 

6

按字节衡量DDL语句的长度,最大约为2M,超过则会跳过并将其存入marker表;

可通过ddl_ddl2file.sql 将DDL以文本文件存储于user_dump_dest;

 

参数

DDL

不可用于datapump进程

[

{INCLUDE | EXCLUDE}

[, MAPPED | UNMAPPED | OTHER | ALL]

[, OPTYPE ]

[, OBJTYPE ‘’]

[, OBJNAME ]

[, INSTR ‘’]

[, INSTRCOMMENTS ‘’]

[, STAYMETADATA]

[, EVENTACTIONS ()

]

 

DDLERROR

extract

DDLERROR [RESTARTSKIP ] [SKIPTRIGGERERROR ]

 

replicat

DDLERROR

{ | DEFAULT} {}—response包括abend/discard/ignore/retryop maxretries

{INCLUDE | EXCLUDE }

[IGNOREMISSINGOBJECTS | ABENDONMISSINGOBJECTS]

 

DDLOPTIONS

DDLOPTIONS

[, ADDTRANDATA [ABEND | RETRYOP MAXRETRIES ]

[, DEFAULTUSERPASSWORDPASSWORD

[ENCRYPTKEY DEFAULT | ENCRYPTKEY ]]

[, GETAPPLOPS | IGNOREAPPLOPS]

[, GETREPLICATES | IGNOREREPLICATES]

[, IGNOREMAPPING]

[, MAPDERIVED | NOMAPDERIVED]

[, MAPSCHEMAS]

[, MAPSESSIONSCHEMA] TARGET

[, PASSWORD ENCRYPTKEY [DEFAULT | ENCRYPTKEY ]

[, REMOVECOMMENTS {BEFORE | AFTER}]

[, REPLICATEPASSWORD | NOREPLICATEPASSWORD]

[, REPORT | NOREPORT]

[, UPDATEMETADATA]

[, USEOWNERFORSESSION]

 

DDLTABLE

指定DDL历史表名,默认为GGS_DDL_HIST

 

 

alter table move  OGG DDL support of ALTER TABLE MOVE or DBMS_REDEFINITION [ID 1265554.1]

OGG不支持在线重定义,V11.2.1.0.3之前不支持

如果source db需要执行相应操作,应采用如下方法:

1 停止基表上的所有操作

2 确保extract/replicat没有lag然后stop

3 为extract添加tranlogoptions excludeuser

4 启动extract/replicat

注:该方法过滤用户下的所有DDL/DML

 

 

针对DDL object操作引发 ORA-01502 [ID 1358765.1]

对DDL字典表执行DDL时须先disable DDL trigger,相当拗口的一句话

比如

SQL> connect ggs/ggs
SQL> alter table ggs_marker move tablespace test;
Table altered.

SQL> connect hr/hr
SQL> create table x (a number);
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01502: index 'GGS.SYS_C0011956' or partition of such index is in unusable state
ORA-06512: at line 993

解决方案

先禁止DDL trigger,重建失效索引;

具体步骤

1 停止extract进程,确保没有其他会话正在执行DDL,禁止DDL trigger

SQL> @ddl_disable.sql

2 重建索引

3 激活DDL trigger

SQL> @ddl_enable.sql

4 重启extract

 

数据库升级前最好先禁止ddl trigger,完成后再开启ID 971222.1

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15480802/viewspace-762694/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3320732