online table redefinition
online table redefinition是oracle9i引入的新特性,在10g加强了这个特性,该特性通过DBMS_REDEFINITON包实现的。online table redefinitio保证了表的可用性,(alter table ...move 和create index会在整个执行过程中锁表)online table redefinition只有在完成online table redefinition阶段时锁表,且锁表时间不长。
DBMS_REDEFINITION包
DBMS_REDEFINITION由下的8个procedure组成
ABORT_REDEF_TABLE:取消或错误后取消redefinition
CAN_REDEF_TABLE:检查是否可以online redefinition
COPY_TABLE_DEPENDENTS:在interim表上创建dependents
START_REDEF_TABLE:开始online redefinition
FINISH_REDEF_TABLE:完成online redefinition
SYNC_INTERIM_TABLE:同步在online redefinition过程中的更新
REGISTER_DEPENDENT_OBJECT:注册手动创建的dependent
UNREGISTER_DEPENDENT_OBJECT:取消dependent的注册
为了执行online table redefinition你需要下的权限:
execute dbms_redefinition package
create any table
alter any table
drop any table
lock any table
select any table
create any index
create any trigger
online table redefinition步骤:
1.调用dbms_redefinition.can_redef_table procedure 确认是否可以online redefinition
example: EXECUTE dbms_redefinition.can_redef_table ('FINANCE', 'ACCTS_PAYABLE');
2.在redefinition schema下创建interim table
3. 如果你redefinition一个大表,你可以用下面的Statement来改善性能:
alter session force parallel dml parallel degree-of-parallelism;
alter session force parallel query parallel degree-of-parallelism;
4.调用dbms_redefinition.start_redef_table procedure开如redefinition
example:dbms_redefinition.start_redef_table ('FINANCE', 'ACCTS_PAYABLE','ACCTS_PAYABLE_STAGE');
5.创建dependent objects on interim table
有两种方法:
调用dbms_redefinition.copy_table_dependents自动创建dependent objects
使用create statement手动创建dependent objects﹐手动创建的dependents需要调用register_dependent_object注册
6.更新在redefinition过程中的更新到interim表
7.调用dbms_redefinition.finish_redef_table完成redefinition
8.删除收回空间如interim table使用的表
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7419833/viewspace-503857/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7419833/viewspace-503857/