Oracle中大数据量删除

  因为迁移需要,需要清理生产库中 累积的大量历史数据,根据待清理的数据性质,整理出以下两种方案:

1、需删除表中全部数据的,对表执行TRUNCATE操作(速度很快)。

      TRUNCATE TABLE tab_p_mt_resp;

2、对于需有条件删除数据的表,按照是否分区表分别采取以下两种操作:

   a)对于分区表,定位存放有过期数据的分区,采用删除分区的方式删除其中的数据(速度也很快,重建索引一般也不会太慢)。

ALTER TABLE tab_p_mt_log DROP PARTITION P201208; 

如果分区上建有全局索引(GLOBAL INDEX),DROP分区会造成索引失效,则需要在DROP完分区后重建索引。

ALTER INDEX IDX_MTLOG_MOBILE REBUILD;

(LOCAL INDEX在DROP分区后不会失效,所以不用REBUILD)

b)对于非分区表,我们采取分批删除,分批提交的办法,避免造成ORA-01555错误,下面是采用自治事务删除过程(相对上面两种方法是最慢的,但有时我们别无选择): 

create or replace procedure delBigTab
(
p_TableName in varchar2,
p_Condition in varchar2,
p_Count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
  while 1=1 loop
    EXECUTE IMMEDIATE
    'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
    USING p_Count;
    if SQL%NOTFOUND then
      exit;
    else
      n_delete:=n_delete + SQL%ROWCOUNT;
    end if;
    commit;
  end loop;
  commit;
  DBMS_OUTPUT.PUT_LINE('Finished!');
  DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;
/

exec delBigTab('TAB_P_RPT_1069','MT_TIME

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28998293/viewspace-765067/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28998293/viewspace-765067/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值