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/