DBMS_REDEFINITION在线重定义表

本文详细介绍了Oracle的DBMS_REDEFINITION包在24*7运行系统中如何在线重定义表,以实现表的结构调整、分区修改等,同时提供了完整的重定义步骤和示例,包括验证、创建中间表、启动和完成重定义、同步数据等关键步骤。
摘要由CSDN通过智能技术生成

       一、在线重定表介绍  

        对24*7运行的系统,如果因业务调整,需要对某些表增加字段,或者把重新想把常规的表进行分区,这时可用ooracle提供的包dbms_redefinition包达到目的。 

        dbms_redefinition可以完成以下工作 

  • 修改table或者cluster的存储参数 

  • 移动table或者cluster到不同的表空间 

  • 增加、修改、删除table或者cluster的一列或列 

  • 增加或者删除分区(仅支持非cluster table) 

  • 改变分区结构 

  • 改变一个单表分区的物理属性,包括移动到同一个模式下不同的表空间 

  • 增加并行查询(parallel queries)的支持 

  • 重新创建table or cluster用来减少碎片 

  • 把堆表(heat table)变成索引组织表(IOT),或者做反向操作 

  • 转换一个关系表到一张表中的object column,或者做反向操作 

  • 转换object table到一张关系表或者表中的object column,或者做反向操作 

         

        在线重定义表有两种方式,key或者rowid 

        (1)通过key的方式要求选择一个主键(primary key)或者伪主键(pseudo-primary key)用来重定义表,这种方法要求重定义前和重定义后有相同的主键,这也是默认重定义表的方法 

        (2)如果没有主键可用,可选择通过rowid的方式重定义表。这种方法会添加名为M_ROW$$的隐藏列到重定义表,推荐再重定义表完成后删除此列或者设置成unused。如果COMPATIBLE参数设置10.2.0或者更高,在重定义阶段会自动设置成unsed,可以在使用ALTER TABLE ... DROP UNUSED COLUMNS删除他。如果是索引组织表不能使用rowid的方式 

         

        二、在线重定表步骤       

         在线重定义表有以下几步 

        1.调用过程CAN_REDEF_TABLE验证表是否可以实施在线重定义,验证结果如果不能在重定义会报错并提示原因。 

        2.创建一个空的中间表(与要重定义的表在同一 schema),表包含希望有的逻辑和物理属性。如果有列要删除,中间表不要包含删除的列。不需要在中间表上定义所有的索引、约束、grants、触发器,当复制依赖的对象时会自动定义。 

        3.如果使用rowid方法重定义分区表,要在中间表上开启行移动。 

        later table … enable row movement; 

       

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值