我需要向一个中等大小的表添加一些索引,并且我希望提前知道表空间是否有空间来保存索引。(范围应该自动增加,但 DBA 并不总是正确设置它,而且我不想成为导致系统崩溃的人。)我需要运行什么 SQL 来查看有多少可用空间?
答案1
select tablespace_name, round(sum(bytes)/(1024*1024)) free_mb
from dba_free_space group by tablespace_name;
但事情并不总是那么简单。例如,虽然可能有 100M 可用,但您可能想创建一个估计为 80M 的索引,但它可能会尝试获取 120M 的新范围并失败。
此外,如果您有一个 50M 的表并将其删除,则可用的 100M 可能就是两个 50M 的块。同样,如果数据库尝试获取 100M 区段,则可能会失败。
如果表空间没有可用空间但设置为自动扩展(dba_tablespaces 上的segment_space_management),则可能会显示空间不足但可以工作。或者不可以,这取决于底层文件系统是否有足够的空间。