Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1997521
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 18:09:41

基本步骤如下

 

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

【责编:Amy】

--------------------next---------------------

阅读(117) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~