估计 Oracle 中剩余的空间

Sea*_*yen 4 oracle

我有一个需要重新分区的大型 Oracle 表。我想知道有没有一种方法可以知道我有足够的空间来使用新分区创建此表的副本并将新分区与旧分区交换。

Joh*_*yle 6

对您的表大小的粗略估计是:

select sum(BYTES) / 1024 / 1024 as SIZE_MB
from   USER_SEGMENTS
where  SEGMENT_NAME = '<tablename>';
Run Code Online (Sandbox Code Playgroud)

但是,请参阅问题如何在 Oracle 中计算表大小以获得更好的详细信息,因为磁盘上复制表的实际大小可能与原始表不同。然后,您可以使用以下命令检查表空间中有多少空间:

select TS.TABLESPACE_NAME
      ,nvl(nvl(DF.BYTES, 0) / 1024 / 1024, 0) + nvl(nvl(FS.BYTES, 0) / 1024 / 1024, 0) as AVAIL_SPC_MB
from   DBA_TABLESPACES TS
       left join (select   TABLESPACE_NAME, (sum(MAXBYTES) - sum(BYTES)) BYTES
                  from     DBA_DATA_FILES
                  group by TABLESPACE_NAME) DF
         on TS.TABLESPACE_NAME = DF.TABLESPACE_NAME
       left join (select   TABLESPACE_NAME, sum(BYTES) BYTES
                  from     DBA_FREE_SPACE
                  group by TABLESPACE_NAME) FS
         on TS.TABLESPACE_NAME = FS.TABLESPACE_NAME
       left join DBA_TABLES TAB
         on TS.TABLESPACE_NAME = TAB.TABLESPACE_NAME
where  TAB.TABLE_NAME = '<tablename>';
Run Code Online (Sandbox Code Playgroud)

如果您没有足够的空间,请检查您的其他表空间,因为如果您有权限,您可以在其中临时创建表。