如何在没有可用空间的情况下计算 Oracle 数据库表、索引、表分区、LOBSEGMENT 和 LOB 分区的大小

问题描述 投票:0回答:1

我们在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
oracle oracle11g size
1个回答
0
投票

删除行不会释放表空间空间。该空间在其现有块内是可重用的,但这些块仍然分配给表段。如果使用传统插入,该空间可以被新行重用,但如果使用直接路径插入,则永远不会重用。要删除多余的空间,您需要使用

move
命令重新组织表格:

alter table mytable move parallel (degree 16) update indexes;

将来,避免将大规模删除作为典型活动。如果您正在归档旧行,请考虑使用分区,这样您就可以简单地删除旧分区。

© www.soinside.com 2019 - 2024. All rights reserved.