dan*_*boh 4 oracle resources delete-row
作为维护的一部分,我们从一个表中删除了大量的记录,并希望将这个空间丢弃到其他表中.问题是我正在检查表的大小,它在删除之前显示相同的原始大小.我在这里错过了什么?
为了检查尺寸,我正在看dba_segments.
Ste*_*ell 13
在真正了解空间使用之前,您需要了解有关表的一些概念.我会尝试给你5秒钟的巡演...
表由范围组成,这些范围可以在大小上变化,但是我们假设它们在这里是1MB块.
创建表时,通常会向其中添加1个范围,因此即使表没有行,也会占用1MB.
插入行时,Oracle有一个表的内部指针,称为高水位线(HWM).在HWM下面,有格式化的数据块,在它上面有未格式化的块.它从零开始.
如果以新表为例,并开始插入行,则HWM将向上移动,从而使表中使用的第一个范围越来越多.当范围全部用完时,将分配另一个并重复该过程.
让我们说你填充三个1MB扩展区然后删除所有行 - 表是空的,但是Oracle不会将HWM向下移动,或者释放那些使用过的扩展区.因此即使它是空的,该表也将在磁盘上占用3MB,但是有3MB的可用空间可以在其中重复使用.新的插入将进入HWM下方的空间,直到再次移动HWM之前再次填充.
要恢复空间,如果您的表使用ASSM,则可以使用以下命令:
alter table t1 shrink space;
Run Code Online (Sandbox Code Playgroud)
如果你没有使用ASSM,你需要考虑一个表重组来恢复空间.