ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表的在线重定义

表的在线重定义

原创 Linux操作系统 作者:yaguo_96 时间:2008-10-19 22:58:48 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: awr
请登录后发表评论 登录
全部评论

注册时间:2008-04-06

  • 博文量
    27
  • 访问量
    41436