SELECT
df.tablespace_name "表空间名称",
(df.totalspace - tu.usedspace) "剩余空间(MB)",
df.totalspace "总空间(MB)",
tu.usedspace "已用空间(MB)",
ROUND(100 * (tu.usedspace / df.totalspace), 2) "使用率 (%)"
FROM
(SELECT
tablespace_name,
SUM(bytes) / 1024 / 1024 totalspace
FROM
dba_data_files
GROUP BY
tablespace_name) df
JOIN
(SELECT
tablespace_name,
SUM(bytes_used) / 1024 / 1024 usedspace
FROM
(SELECT
tablespace_name,
SUM(bytes) bytes_used
FROM
dba_segments
GROUP BY
tablespace_name) seg
GROUP BY
tablespace_name) tu
ON
df.tablespace_name = tu.tablespace_name;
这个查询首先计算了每个表空间的数据文件总大小(totalspace
),然后通过汇总dba_segments
视图中的bytes_used
来得到已使用的空间大小。最后,通过两个子查询的联结,显示了每个表空间的名称、总空间、已用空间、剩余空间以及使用率。