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

王朝other·作者佚名  2008-05-19
宽屏版  字体: |||超大  

基本步骤如下

第一步:利用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来释放快照。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有