在Oracle数据库中,查看各个表空间的存储空间使用情况可以通过以下几种方式:

1. 使用DBA_DATA_FILES和DBA_FREE_SPACE视图

SELECT

a.tablespace_name "表空间",

a.bytes/1024/1024 "总空间(MB)",

(a.bytes - NVL(b.bytes,0))/1024/1024 "已用空间(MB)",

NVL(b.bytes,0)/1024/1024 "剩余空间(MB)",

ROUND((a.bytes - NVL(b.bytes,0))/a.bytes*100,2) "使用率(%)"

FROM

(SELECT tablespace_name, SUM(bytes) bytes

FROM dba_data_files

GROUP BY tablespace_name) a,

(SELECT tablespace_name, SUM(bytes) bytes

FROM dba_free_space

GROUP BY tablespace_name) b

WHERE a.tablespace_name = b.tablespace_name(+)

ORDER BY "使用率(%)" DESC;

2. 使用DBA_TABLESPACES相关视图(更详细)

SELECT

df.tablespace_name "表空间",

df.bytes/1024/1024 "总空间(MB)",

fs.bytes/1024/1024 "剩余空间(MB)",

(df.bytes - fs.bytes)/1024/1024 "已用空间(MB)",

ROUND((df.bytes - fs.bytes) * 100 / df.bytes, 2) "使用率(%)",

df.maxbytes/1024/1024 "最大可扩展(MB)",

df.autoextensible "自动扩展"

FROM

(SELECT tablespace_name,

SUM(bytes) bytes,

SUM(DECODE(autoextensible, 'YES', maxbytes, bytes)) maxbytes,

MAX(autoextensible) autoextensible

FROM dba_data_files

GROUP BY tablespace_name) df,

(SELECT tablespace_name, SUM(bytes) bytes

FROM dba_free_space

GROUP BY tablespace_name) fs

WHERE df.tablespace_name = fs.tablespace_name

ORDER BY "使用率(%)" DESC;

3. 包含临时表空间的完整查询

-- 永久表空间

SELECT

tablespace_name "表空间",

size_mb "总空间(MB)",

used_mb "已用空间(MB)",

free_mb "剩余空间(MB)",

round(used_mb/size_mb*100, 2) "使用率(%)"

FROM (

SELECT

df.tablespace_name,

trunc(sum(df.bytes)/1048576) size_mb,

trunc((sum(df.bytes) - sum(fs.bytes))/1048576) used_mb,

trunc(sum(fs.bytes)/1048576) free_mb

FROM dba_data_files df, dba_free_space fs

WHERE df.tablespace_name = fs.tablespace_name(+)

GROUP BY df.tablespace_name

)

UNION ALL

-- 临时表空间

SELECT

tablespace_name "表空间",

size_mb "总空间(MB)",

used_mb "已用空间(MB)",

(size_mb - used_mb) "剩余空间(MB)",

round(used_mb/size_mb*100, 2) "使用率(%)"

FROM (

SELECT

tablespace_name,

trunc(sum(bytes)/1048576) size_mb,

trunc(sum(bytes_used)/1048576) used_mb

FROM v$temp_extent_pool

GROUP BY tablespace_name

)

ORDER BY "使用率(%)" DESC;

4. 简化的单行查询

SELECT

tablespace_name,

round(sum(bytes)/1024/1024,2) "总空间(MB)",

round(sum(bytes - blocks*8192)/1024/1024,2) "已用空间(MB)",

round(sum(blocks*8192)/1024/1024,2) "剩余空间(MB)",

round((sum(bytes) - sum(blocks*8192))/sum(bytes)*100,2) "使用率(%)"

FROM dba_data_files

GROUP BY tablespace_name;

5. 查看数据文件详细信息

SELECT

tablespace_name "表空间",

file_name "数据文件",

bytes/1024/1024 "大小(MB)",

autoextensible "自动扩展",

maxbytes/1024/1024 "最大大小(MB)",

increment_by "增量块数"

FROM dba_data_files

ORDER BY tablespace_name, file_name;

关键说明:

需要权限:执行这些查询需要DBA权限或相应的系统视图访问权限

表空间 vs 数据库:Oracle中存储空间是按表空间管理的,不是按"数据库"

临时表空间:如果需要包含临时表空间,需要使用专门的查询

使用率监控:建议定期监控使用率,及时扩展表空间避免空间不足

这些查询可以帮助你全面了解Oracle数据库中各个表空间的存储使用情况。