Oracle 基于 dbms_redefinition 在线重定义表

2014-11-24 17:18:26 · 作者: · 浏览: 0

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------


1、在线重定义表的主要功能:


修改表或簇的存储参数


将表移动到相同或不同schema下不同的tablespace(如果不要求表始终可用的话,也可以直接使用alter table move 实现)


为表添加,修改或删除列


为表添加或删除分区,改变分区结构


改变物化视图日志或者Streams Advanced Queuing queue 表结构


增加并行查询支持


重建表以减少碎片


将堆表变为索引组织表或相反


2、图示在线重定义


下面的图示便于理解是如何进行在线重定义,其本质是基于基表的一个快照


3、在线重定义的步骤


a、选择在线重定义的方式,基于键(主键或唯一键)还是rowid(无主键或唯一键的情形)


b、校验表能否被在线重定义,使用过程CAN_REDEF_TABLE


c、创建用于在线重定义的临时表(该临时表使用新的表结构,即添加删除列,列长度变化,存储属性变化等)


d、如果重定义的为分区表且使用rowid方式,应该为临时表开启行移动(ALTER TABLE ... ENABLE ROW MOVEMENT;)


e、对于大型表的在线重定义可以通过启用并行以提高性能(此步骤可选)


ALTER SESSION FORCE PARALLEL DML PARALLEL degree-of-parallelism;


ALTER SESSION FORCE PARALLEL QUERY PARALLEL degree-of-parallelism;


f、调用过程start_redef_table启动在线重定义,如果启动失败,应调用ABORT_REDEF_TABLE先终止查找原因后再次启动


g、从被重定义的表复制依赖对象到临时表(triggers, indexes, materialized view logs, grants, and constraints)及统计信息到临时表


h、同步被重定义的表到临时表(调用过程sync_interim_table,此步可选)


i、调用过程FINISH_REDEF_TABLE完成表的在线重订义


j、删除临时表