在Oracle数据库中,要查看表空间(Tablespace)的已分配和未分配空间,可以使用多种数据字典视图,如`DBA_FREE_SPACE`、`DBA_DATA_FILES`和`DBA_TEMP_FILES`(对于临时表空间)等。但请注意,Oracle并没有直接提供一个视图来直接显示“已分配和未分配空间”的汇总信息,通常我们需要通过查询几个视图并做一些计算来得到这些信息。
以下是一个基于`DBA_DATA_FILES`和`DBA_TEMP_FILES`(假设我们只关心数据表空间和临时表空间)的示例SQL语句,用于获取每个表空间的已分配空间和可用空间(可视为未分配空间的一种估算,因为未分配空间还包括数据文件中的空闲碎片等):
SELECT
df.tablespace_name,
ROUND(SUM(df.bytes) / 1024 / 1024, 2) AS allocated_mb,
ROUND(SUM(COALESCE(dfs.bytes, 0)) / 1024 / 1024, 2) AS free_mb
FROM
dba_data_files df
LEFT JOIN
dba_free_space dfs ON df.tablespace_name = dfs.tablespace_name
GROUP BY
df.tablespace_name
UNION ALL
SELECT
tf.tablespace_name,
ROUND(SUM(tf.bytes) / 1024 / 1024, 2) AS allocated_mb,
ROUND(SUM(COALESCE(tfs.bytes, 0)) / 1024 / 1024, 2) AS free_mb
FROM
dba_temp_files tf
LEFT JOIN
v$temp_space_header tfs ON tf.tablespace_name = tfs.tablespace_name
GROUP BY
tf.tablespace_name
ORDER BY
tablespace_name;
**注意**:
- 这个查询对于数据表空间(`dba_data_files`)和临时表空间(`dba_temp_files`)分别计算了已分配空间和可用空间(`dba_free_space` 和 `v$temp_space_header` 分别用于数据表空间和临时表空间的空闲空间查询)。
- 由于`v$temp_space_header`是一个动态性能视图,它可能不在所有Oracle安装中都可用,具体取决于Oracle的版本和配置。如果`v$temp_space_header`不可用,您可能需要查找其他方法来估算临时表空间的未分配空间。
- 请根据您的Oracle数据库版本和具体需求调整此查询。
- 这个查询提供了每个表空间的已分配空间和可用空间(作为未分配空间的一种估算),但请注意,Oracle中的空间管理更加复杂,包括空闲空间、碎片、回滚段等,因此这里的“未分配空间”只是一个近似的概念。