oracle大数据量分批删除
很多时候,我们要清理一个大表的数据,比如几个亿,业务还不能停,还只能delete,这种情况下分批删除是个好办法。
createorreplaceproceduredelBigTab--分批提交删除(p_TableNameinvarchar2,--表名p_Conditioninvarchar2,--条件p_Countinvarchar2--每批提交的条数)aspragmaautonomous_transaction;n_deletenumber:=0;beginwhile1=1loopEXECUTEIMMEDIATE'deletefrom'||p_TableName||'where'||p_Condition||'andrownum<=:rn'USINGp_Count;ifSQL%NOTFOUNDthenexit;elsen_delete:=n_delete+SQL%ROWCOUNT;DBMS_OUTPUT.PUT_LINE(n_delete);endif;commit;endloop;commit;DBMS_OUTPUT.PUT_LINE('Finished!');DBMS_OUTPUT.PUT_LINE('Totally'||to_char(n_delete)||'recordsdeleted!');end;
执行方法:execdelBigTab('XXXXX','status=1','10000');
清理表之后,重新收集下该表的统计信息
EXECUTEdbms_stats.gather_table_stats(ownname=>'XXXX',tabname=>'XXXXXX',estimate_percent=>30,cascade=>true,degree=>4);
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。