ITPub博客

首页 > 数据库 > Oracle > 11g数据库大表数据快速清理方法 - insert+append+parallel+exchange (2)

11g数据库大表数据快速清理方法 - insert+append+parallel+exchange (2)

原创 Oracle 作者:tolywang 时间:2014-07-02 15:43:51 1 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/35489/viewspace-1204790/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14695689