基本步骤如下 第一步:利用 dbms_redefinition.can_redef_table 过程检查该表是否能被在线重定义。 第二步:创建一个与原表类似的空表结构,用于重定义" name="description" />

9i新特性之——在线表格重定义研究2

发表于:2007-06-22来源:作者:点击数: 标签:
MI LY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 基本步骤如下 第一步:利用 dbms_redefinition.can_redef_table 过程检查该表是否能被在线重定义。 第二步:创建一个与原表类似的空表结构,用于重定义

   

MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基本步骤如下

 

第一步:利用dbms_redefinition.can_redef_table过程检查该表是否能被在线重定义。

 

第二步:创建一个与原表类似的空表结构,用于重定义该表,这里叫做是中间表

 

第三步:用dbms_redefinition.start_redef_table procedure定义重构开始

 

该过程可以输入如下参数信息

用户的名称

原表的名称

中间表的名称

需要同步改变的列的名称

 

这个过程将回自动执行如下操作:

 

1、插入所有行从原有表到中间表

 

2、创建MLOG$_EMP快照与快照日志,临时存储DML语句直到完成。

 

第四步:与原表一致,在中间表上面创建约束,索引,触发器

 

与原表一致(如果需要),中间表的对象权限被授予给别的对象

 

任何中间表上的外键约束将被禁止

 

第五步:用dbms_redefinition.finish_redef_table过程完成表的最终重定义

 

该过程将自动完成

应用快照日志中的DML到中间表

互换原表与中间表的名字,包括所有可能出现的数据字典

但是需要注意的是,并不对换约束,索引,触发器的名称,这些需要手工修改

 

第六步:删除中间表、

 

第七步:如果是920以上,可以利用ALTER TABLE ... RENAME CONSTRAINT ...语句来修改约束名称,如果以下版本,就只有删除并重建了,当然,如果约束名称并不重要,也就无所谓了

 

第八步:如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。

原文转自:http://www.ltesting.net