的列名和原表不一致,那么在开始重定义的时候,需要重新指定
映射关系:?
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(?
'ICD',?
'unpar_table',?
'par_table',?
'ID ID, create_date TIME', -- 在这里指定新的映射关系?
DBMS_REDEFINITION.CONS_USE_PK);?
?
这一步操作结束后,数据就已经同步到这个临时的分区表里来了。
?
d3. 同步新表,这是可选的操作
SQL> BEGIN?
? 2 ? ?dbms_redefinition.sync_interim_table(?
? 3 ? ?uname => 'ICD',?
? 4 ? ?orig_table => 'unpar_table',?
? 5 ? ?int_table => 'par_table');?
? 6 ? ?END;?
? 7 ? ?/?
PL/SQL 过程已成功完成。
?
d4. 创建索引,在线重定义只重定义数据,索引还需要单独建立
sql> create index create_date_ind2 on par_table(time);?
?
d5. 收集新表的统计信息
sql> exec dbms_stats.gather_table_stats('icd', 'par_table', cascade => true);
?
d6. 结束重定义?
SQL> BEGIN?
? 2 ? ?dbms_redefinition.finish_redef_table(?
? 3 ? ?uname => 'ICD',?
? 4 ? ?orig_table => 'unpar_table',?
? 5 ? int_table => 'par_table');?
? 6 ? ?END;?
? 7 ? ?/?
PL/SQL 过程已成功完成
?
?
结束重定义的意义:?
?
基表unpar_table ?和临时分区表par_table ?进行了交换。 ?此时临时分区表
par_table成了普通表,我们的基表unpar_table成了分区表。 ?
?
我们在重定义的时候,基表unpar_table是可以进行DML操作的。 只有在2个表进行切换的时候会有短暂的锁表。