参考杨大师的:http://space.itpub.net/4227/viewspace-168447
10g在dbms_redefinition包中增加了COPY_TABLE_DEPENDENTS过程,用于索引、约束、触发器、统计信息和授权的表的在线重定义
实验过程:
SQL> select table_name,index_name,column_name from user_ind_columns where table_name='FUNCTIONS_INFO';
TABLE_NAME INDEX_NAME COLUMN_NAME
------------------------- ------------------------------ ------------------------------
FUNCTIONS_INFO FUNCINFO_GAMEKID_IDX GAME_KIND_ID
FUNCTIONS_INFO SYS_C007875 FUNCTION_ID
SQL> create table functions_info_m as select * from functions_info where 1=0;
SQL> exec dbms_redefinition.can_redef_table('WEP','FUNCTIONS_INFO');
PL/SQL procedure successfully completed.
SQL> exec dbms_redefinition.start_redef_table('WEP','FUNCTIONS_INFO','FUNCTIONS_INFO_M');
PL/SQL procedure successfully completed.
SQL> var v_num number
SQL> exec dbms_redefinition.copy_table_dependents('WEP','FUNCTIONS_INFO','FUNCTIONS_INFO_M',dbms_redefinition.cons_orig_params,true,true,true,true,:v_num,true);
PL/SQL procedure successfully completed.
SQL> exec dbms_redefinition.finish_redef_table('WEP','FUNCTIONS_INFO','FUNCTIONS_INFO_M');
PL/SQL procedure successfully completed.
SQL> select table_name,index_name,column_name from user_ind_columns where table_name='FUNCTIONS_INFO';
TABLE_NAME INDEX_NAME COLUMN_NAME
------------------------- ------------------------------ ------------------------------
FUNCTIONS_INFO SYS_C007875 FUNCTION_ID
FUNCTIONS_INFO FUNCINFO_GAMEKID_IDX GAME_KIND_ID
SQL> select table_name,index_name,column_name from user_ind_columns where table_name='FUNCTIONS_INFO_M';
TABLE_NAME INDEX_NAME COLUMN_NAME
------------------------- ------------------------------ ------------------------------
FUNCTIONS_INFO_M TMP$$_FUNCINFO_GAMEKID_IDX0 GAME_KIND_ID
FUNCTIONS_INFO_M TMP$$_SYS_C0078750 FUNCTION_ID
这样重定义后的索引名也与原来同名了,完整的完成了一个table的在线重定义。