我需要添加一些索引到一个中等大小的表,我想事先知道表空间是否有空间来保存索引。 (这些范围假设会自动增加大小,但是DBA并不总是有正确的设置,我不想成为崩溃系统的那个)。我需要运行什么SQL来查看有很多空间可用?
select tablespace_name, round(sum(bytes)/(1024*1024)) free_mb from dba_free_space group by tablespace_name;
但并不总是如此简单。 例如,可能有100M可用,您可能希望创build一个您估计为80M的索引,但可能会尝试占用120M的新范围并失败。
另外,如果你有一个50M的桌子,并放弃它,你的100M可用可能是两个50M的块。 再次,如果数据库试图获得100M的范围,它可能会失败。
如果表空间没有空闲空间,但被设置为自动扩展(dba_tablespaces上的segment_space_management),那么它可能显示为空间不足,但可以工作。 还是不行,这取决于底层文件系统是否有足够的空间。