我们在Oracle数据库中有一个巨大的表,我们已经删除了表中的数百万条记录。删除之前和删除之后,大小和记录数没有差异。我们还没有使用收缩命令。
如何计算桌子的实际尺寸。
我已经尝试过以下查询
SELECT
OWNER,
TABLE_NAME,
TRUNC(SUM(BYTES)/1024/1024) SIZE_IN_MB
FROM
(SELECT SEGMENT_NAME TABLE_NAME, OWNER, BYTES
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
group by OWNER, TABLE_NAME
删除行不会释放表空间空间。该空间在其现有块内是可重用的,但这些块仍然分配给表段。如果使用传统插入,该空间可以被新行重用,但如果使用直接路径插入,则永远不会重用。要删除多余的空间,您需要使用
move
命令重新组织表格:
alter table mytable move parallel (degree 16) update indexes;
将来,避免将大规模删除作为典型活动。如果您正在归档旧行,请考虑使用分区,这样您就可以简单地删除旧分区。