一、表的占用空间大小释放原理
背景:生产环境中,经常会遇到表由于数据不断插入,导致空间越来越大,由于前期配置问题,没有做分区或者其他优化,而且生产数据实时向表插入。要删除历史数据来释放空间。
分析:
(1)没做分区表:
由于没有分区表,所以无法分块对表进行清理。
(2)表实时插入数据,数据量大,要保留部分数据:
无法采用将有效数据插入另一个表,drop原表,修改名字来删除原表,或者truncate原表,来释放空间。
(3)删除历史数据:
用delete from 加条件,删除历史数据。
实验:
首先查看表段使用的大小
SQL> select round(BYTES/1024/1024,2)||'M' MB from user_segments where segment_name='T1';
MB
--------------------------------------------------------------------------------
19.94M
对t1表批量删除操作
declare
row_num number :=0;
begin
for g_t1 in (select rowid from t1 t where t.OBJECT_ID <=10000 ) loop
delete from t1 where rowid=g_t1.rowid;
row_num :&