需额外安装组件,主要如下
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
replicat
DDLERROR
{
{INCLUDE
[IGNOREMISSINGOBJECTS | ABENDONMISSINGOBJECTS]
DDLOPTIONS
DDLOPTIONS
[, ADDTRANDATA [ABEND | RETRYOP
[, DEFAULTUSERPASSWORDPASSWORD
[ENCRYPTKEY DEFAULT | ENCRYPTKEY
[, GETAPPLOPS | IGNOREAPPLOPS]
[, GETREPLICATES | IGNOREREPLICATES]
[, IGNOREMAPPING]
[, MAPDERIVED | NOMAPDERIVED]
[, MAPSCHEMAS]
[, MAPSESSIONSCHEMA]
[, 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 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/ ,如需转载,请注明出处,否则将追究法律责任。