2. 由于2013-2014数据是表中较少量的数据,采用insert到其他表的方式处理,而不使用delete ,其中的parallel根据实际CPU设置.
# insert_ap_inv.sql
spool insert_ap_inv.log
set timing on
alter session enable parallel DML ;
insert /*+ append */ into AP.AP_INVOICE_DISTS_ARCH_WQ
select /*+ parallel(32) */ * from AP.AP_INVOICE_DISTS_ARCH_WQ a
where a.last_update_date>=to_date('20130101','yyyymmdd');
commit;
set timing off
spool off
exit
nohup sqlplus / as sysdba @insert_ap_inv.sql &
3. 对原表和中间分区表(只有一个分区)进行数据置换 (注意只会进行数据置换, 索引不会有任何动作,这里没有使用including indexes, including indexes 表示). 将Local indexes 一同exchange出来, 此选项需要用来与之exchange的table 有建立一样的Index)
alter table AP.AP_INVOICE_DISTS_ARCH_WQ exchange partition APINV_PART01 with table AP.AP_INVOICE_DISTS_ARCH without validation;
4. 进行exchange后原表的索引可能会变成unusable 状态,需要对原表中索引进行rebuild .
select 'alter index '||owner||'.'||index_name||' rebuild parallel 32 nologging ;' from dba_indexes where table_name =
'AP_INVOICE_DISTS_ARCH';
将查询出来的语句保存为 rebuild_idx2.sql 文件 ,后台执行。
nohup sqlplus / as sysdba @rebuild_idx2.sql &
5. 数据置换后需要对表进行统计信息重新收集 。
# gather_ap_inv.sql
spool gather_ap_inv.log
set timing on
EXEC dbms_stats.gather_table_stats(ownname => 'AP',tabname => 'AP_INVOICE_DISTS_ARCH',method_opt => 'FOR ALL COLUMNS SIZE
AUTO',degree=>32,cascade => TRUE);
set timing off
spool off
exit
后台执行 : nohup sqlplus / as sysdba @gather_ap_inv.sql &
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-1204790/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-1204790/
本文详细介绍了在Oracle数据库中如何通过插入、数据置换等操作来完成数据迁移,并针对索引重建及统计信息更新进行了具体说明。
446

被折叠的 条评论
为什么被折叠?



