11g資料庫大表資料快速清理方法 - insert+append+parallel+exchange (2)

tolywang發表於2014-07-02

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章