在Oracle数据库的日常管理和开发工作中,查看表空间的相关信息是运维人员的基础操作,通过表空间的相关数据可以了解数据库的存储使用情况,提前规划存储扩容,避免因为空间不足导致业务异常。表空间是Oracle数据库中用于存储数据的逻辑结构,对应着实际的数据文件,Oracle提供了多个系统数据字典视图来记录表空间的相关信息。

常用的表空间查询视图
Oracle中查看表空间主要依赖以下几个系统视图,不同视图包含的信息有所区别:
- dba_data_files:记录所有表空间对应的数据文件信息,包括文件路径、大小、状态等
- dba_free_space:记录表空间中未使用的空闲空间信息
- dba_tablespaces:记录所有表空间的基本属性,比如表空间类型、状态、块大小等
- user_tablespaces:记录当前用户有权限查看的表空间信息
查看表空间总大小、已用空间和剩余空间
通过关联dba_data_files和dba_free_space两个视图,可以计算出每个表空间的总大小、已使用空间和剩余空间,具体SQL如下:
-- 查询所有表空间的总大小、已用空间、剩余空间和利用率
SELECT
a.tablespace_name AS 表空间名称,
total_size AS 总大小_MB,
used_size AS 已用大小_MB,
free_size AS 剩余大小_MB,
ROUND(used_size / total_size * 100, 2) AS 利用率_百分比
FROM
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS total_size
FROM dba_data_files
GROUP BY tablespace_name) a
LEFT JOIN
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS free_size
FROM dba_free_space
GROUP BY tablespace_name) b
ON a.tablespace_name = b.tablespace_name
LEFT JOIN
(SELECT tablespace_name,
(SUM(bytes) - SUM(NVL(free_bytes, 0))) / 1024 / 1024 AS used_size
FROM (SELECT tablespace_name, bytes, NULL AS free_bytes FROM dba_data_files
UNION ALL
SELECT tablespace_name, NULL AS bytes, bytes AS free_bytes FROM dba_free_space)
GROUP BY tablespace_name) c
ON a.tablespace_name = c.tablespace_name
ORDER BY 利用率_百分比 DESC;
上述SQL的执行结果会展示每个表空间的名称、总大小(单位为MB)、已使用大小、剩余大小以及空间利用率,方便用户快速判断哪些表空间需要扩容。
查看表空间对应的数据文件信息
如果需要查看某个表空间对应的具体数据文件路径、大小、是否自动扩展等属性,可以查询dba_data_files视图,示例SQL如下:
-- 查询表空间对应的数据文件信息
SELECT
tablespace_name AS 表空间名称,
file_name AS 数据文件路径,
bytes / 1024 / 1024 AS 文件大小_MB,
autoextensible AS 是否自动扩展,
maxbytes / 1024 / 1024 AS 最大可扩展大小_MB
FROM
dba_data_files
ORDER BY
tablespace_name, file_name;
执行该SQL后,可以看到每个数据文件所属表空间、存储路径、当前大小、是否开启自动扩展以及最大可扩展到的容量,对于排查数据文件存储位置问题很有帮助。
查看表空间的基本属性
如果需要了解表空间的类型、状态、块大小等基础属性,可以查询dba_tablespaces视图,示例SQL如下:
-- 查询表空间基本属性
SELECT
tablespace_name AS 表空间名称,
status AS 状态,
contents AS 表空间类型,
block_size AS 块大小,
extent_management AS 区管理方式
FROM
dba_tablespaces
ORDER BY
tablespace_name;
其中表空间类型字段contents的值如果是PERMANENT表示永久表空间,TEMPORARY表示临时表空间,UNDO表示撤销表空间,用户可以根据该字段区分不同类型的表空间。
注意事项
1. 上述查询语句需要有DBA权限或者对应系统视图的查询权限,普通用户如果没有权限可以查询user_tablespaces和user_data_files视图获取自己有权限的信息。
2. 临时表空间的空闲空间信息不在dba_free_space中,需要查询dba_temp_free_space视图来获取临时表空间的使用情况。
3. 如果表空间开启了自动扩展,计算剩余空间时需要结合数据文件的最大可扩展大小,不能仅看当前的空闲空间,避免误判存储容量。
oracle表空间SQL查询dba_data_filesdba_free_space修改时间:2026-07-03 19:36:26