我有一个需要重新分区的大型 Oracle 表。我想知道有没有一种方法可以知道我有足够的空间来使用新分区创建此表的副本并将新分区与旧分区交换。
对您的表大小的粗略估计是:
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)
如果您没有足够的空间,请检查您的其他表空间,因为如果您有权限,您可以在其中临时创建表。
归档时间: |
|
查看次数: |
513 次 |
最近记录: |