select a.tablespace_name, round(a.total_size,1) "total(M)",
round(a.total_size)-round(nvl(b.free_size,0),1) "used(M)",
round(nvl(b.free_size,0),1) "free(M)",
round(nvl(b.free_size,0)/total_size*100,1) "free rate(%)"
from (select tablespace_name,sum(bytes)/1024/1024 total_size
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,sum(bytes)/1024/1024 free_size
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
order by "free rate(%)";
或
SELECT a.tablespace_name "表空间名",
total / 1024 / 1024 "表空间大小(M)",
free / 1024 / 1024 "表空间剩余大小(M)",
(total - free) / 1024 / 1024 "表空间使用大小(M)",
ROUND((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM DBA_FREE_SPACE
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM DBA_DATA_FILES
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
或
select total.tablespace_name,
round(total.MB, 2) as Total_MB,
round(total.MB - free.MB, 2) as Used_MB,
round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name) total
where free.tablespace_name = total.tablespace_name;