因为表的数据量过大,比如上百亿数据量的表进行删除的话,如果未能及时提交的话,会造成undo空间的占用,导致其他事务操作任务执行时间变长。
所引再删除大数据量表的数据时,需要将进行删除的大事物操作拆分成诺干个小事物。
比如如对A表删除1亿的数据的大事物,可以拆分成每次删除1000W的小事物
因为删除数据后,表的实际存储空间未能释放,需要对数据进行收缩操作。
–授权表支持行移动
execute immediate ‘alter table c##djj.to1_delete_commit enable row movement’;
–回收空间,降低表的HWM
execute immediate ‘alter table c##djj.to1_delete_commit shrink space’;
–收集优化器统计信息
dbms_stats.delete_table_stats(ownname=>‘C##DJJ’,tabname=>‘TO1_DELETE_COMMIT’,cascade_indexes=>true);
dbms_stats.gather_table_stats(ownname=>‘C##DJJ’,tabname=>‘TO1_DELETE_COMMIT’,degree=>8,estimate_percent=>dbms_stats.auto_sample_size);
循环删除数据代码可参考:
https://download.csdn.net/download/u010438126/85045496