在Oracle数据库中,查看各个表空间的存储空间使用情况可以通过以下几种方式
在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数据库中各个表空间的存储使用情况。

浙公网安备 33010602011771号