表的在线重定义

1 检查表是否支持重定义
  BEGIN
    DBMS_REDEFINITION.CAN_REDEF_TABLE('test','test',
             dbms_redefinition.cons_use_pk);
   END;
SQL> /

2 创建中间表
3 开始重组过程.

 exec DBMS_REDEFINITION.START_REDEF_TABLE('TEST', 'TEST','TEST_IN','a a,b b');

 会创建表MLOG$_TEST,存储表的改变日志。
 a a,b b:实际上是创建物化视图的SQL语句的select部分
 实际上这个过程会创建一个物化视图,名字和中间表名字相同
4 重组过程中, 可以多次同步中间表.

SQL> exec dbms_redefinition.SYNC_INTERIM_TABLE('TEST', 'TEST', 'TEST_IN');

PL/SQL procedure successfully completed.

 

5 完成在线重定义.

SQL> exec dbms_redefinition.FINISH_REDEF_TABLE('TEST', 'TEST', 'TEST_IN');
把test和test_in名字互换
 
6 删除中间表.

SQL> drop table test_in


---如果失败可以先执行下面的过程然后重新做
exec dbms_redefinition.abort_redef_table('TEST', 'TEST', 'TEST_IN');
---原表的索引、约束、触发器、授权需要手工在新的表上重建,

DBA_REDEFINITION_ERRORS数据字典视图, 用来查看在线重定义过程中出现的错误.

如果表上有活动事务则一直等待
alter table test move  如果表上有活动事务,立刻提示资源忙
重定义的表要求其上没有物化视图

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69265/viewspace-473115/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69265/viewspace-473115/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值