🍦 1.6 Oracle数据库表空间使用率检查
一、表空间总体使用率(最常用)
SELECT tablespace_name,
ROUND(used_space * 100 / tablespace_size, 2) AS used_pct,
ROUND(tablespace_size / 1024 / 1024, 2) AS size_mb,
ROUND(used_space / 1024 / 1024, 2) AS used_mb,
ROUND((tablespace_size - used_space) / 1024 / 1024, 2) AS free_mb
FROM dba_tablespace_usage_metrics
ORDER BY used_pct DESC;
SQL> SELECT tablespace_name,
2 ROUND(used_space * 100 / tablespace_size, 2) AS used_pct,
3 ROUND(tablespace_size / 1024 / 1024, 2) AS size_mb,
4 ROUND(used_space / 1024 / 1024, 2) AS used_mb,
5 ROUND((tablespace_size - used_space) / 1024 / 1024, 2) AS free_mb
6 FROM dba_tablespace_usage_metrics
7 ORDER BY used_pct DESC;
TABLESPACE_NAME USED_PCT SIZE_MB USED_MB FREE_MB
------------------------------------------------------------ ---------- ---------- ---------- ----------
LXMES_DATA 61.86 12 7.42 4.58
DS_SO01 48.68 12 5.84 6.16
SYSTEM 23.32 4 .93 3.07
DS_OPC01 21.27 4 .85 3.15
LXMESTQ_DATA 20.37 4 .81 3.19
SYSAUX 19.21 4 .77 3.23
DS_IN01 4.57 4 .18 3.82
UNDOTBS1 1.88 1.88 .04 1.84
DS_OTHER .73 4 .03 3.97
DS_SORED01 .57 4 .02 3.98
LXMES_HIS 0 4 0 4
TABLESPACE_NAME USED_PCT SIZE_MB USED_MB FREE_MB
------------------------------------------------------------ ---------- ---------- ---------- ----------
LXMES_TEMP 0 2.5 0 2.5
DS_INTERF01 0 4 0 4
TEMP 0 .01 0 .01
USERS 0 4 0 4
DS_TEMP01 0 .13 0 .13
16 rows selected.
字段说明:
tablespace_name:表空间名used_pct:已使用百分比(建议 < 90%)size_mb:当前总容量(MB)used_mb:已用空间free_mb:剩余空间
注意:该视图仅统计已分配空间,不包含自动扩展的潜在空间。
二、数据文件详细信息(含自动扩展)
SELECT file_id,
tablespace_name,
file_name,
ROUND(bytes / 1024 / 1024, 2) AS size_mb,
ROUND(maxbytes / 1024 / 1024, 2) AS max_mb,
autoextensible,
ROUND((bytes - (SELECT NVL(SUM(bytes), 0)
FROM dba_free_space f
WHERE f.file_id = d.file_id)) / 1024 / 1024, 2) AS used_mb
FROM dba_data_files d
ORDER BY tablespace_name, file_id;
SQL> SELECT file_id,
2 tablespace_name,
3 file_name,
4 ROUND(bytes / 1024 / 1024, 2) AS size_mb,
5 ROUND(maxbytes / 1024 / 1024, 2) AS max_mb,
6 autoextensible,
7 ROUND((bytes - (SELECT NVL(SUM(bytes), 0)
8 FROM dba_free_space f
9 WHERE f.file_id = d.file_id)) / 1024 / 1024, 2) AS used_mb
10 FROM dba_data_files d
11 ORDER BY tablespace_name, file_id;
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
9 DS_IN01
/oracle/app/oracle/oradata/lxmes/DS_IN01.dbf
3072 32767.98 YES 1498.44
7 DS_INTERF01
/oracle/app/oracle/oradata/lxmes/DS_INTERF01.dbf
1024 32767.98 YES 1
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
11 DS_OPC01
/oracle/app/oracle/oradata/lxmes/DS_OPC01.dbf
8192 32767.98 YES 6968.19
13 DS_OTHER
/home/oradata/lxmes/DS_OTHER.dbf
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
2048 32767.98 YES 239.5
6 DS_SO01
/oracle/app/oracle/oradata/lxmes/DS_SO01.dbf
32767.98 32767.98 YES 32767.86
12 DS_SO01
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
/oracle/app/oracle/oradata/lxmes/DS_SO02.dbf
10240 32767.98 YES 10240
16 DS_SO01
/home/oradata/lxmes/DS_SO03.dbf
32767 0 NO 4850.75
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
8 DS_SORED01
/oracle/app/oracle/oradata/lxmes/DS_SORED01.dbf
10240 32767.98 YES 185.38
14 LXMESTQ_DATA
/home/oradata/lxmes/LXMESTQ_DATA.dbf
7168 32767.98 YES 6675.25
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
5 LXMES_DATA
/oracle/app/oracle/oradata/lxmes/LXMES_DATA.dbf
32767.98 32767.98 YES 32767.55
10 LXMES_DATA
/oracle/app/oracle/oradata/lxmes/LXMES_DATA01.dbf
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
25600 32767.98 YES 25499.5
17 LXMES_DATA
/oracle/app/oracle/oradata/lxmes/LXMES_DATA02.dbf
32767 0 NO 2544.88
15 LXMES_HIS
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
/home/oradata/lxmes/LXMES_HIS01.dbf
2048 32767.98 YES 1
2 SYSAUX
/oracle/app/oracle/oradata/lxmes/sysaux01.dbf
6620 32767.98 YES 6295.44
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
1 SYSTEM
/oracle/app/oracle/oradata/lxmes/system01.dbf
10240 32767.98 YES 7640
3 UNDOTBS1
/oracle/app/oracle/oradata/lxmes/undotbs01.dbf
15360 0 NO 14148.38
FILE_ID TABLESPACE_NAME
---------- ------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SIZE_MB MAX_MB AUTOEX USED_MB
---------- ---------- ------ ----------
4 USERS
/oracle/app/oracle/oradata/lxmes/users01.dbf
5 32767.98 YES 1
17 rows selected.
关注点:
autoextensible:YES 表示允许自动扩展;NO则需手动监控剩余空间。max_mb:最大可扩展的上限(若为0 或34359721984表示受平台限制,通常为 32GB/128GB)。- 如果多个数据文件接近满且无法自动扩展,需及时添加数据文件或扩展。
三、临时表空间使用率
临时表空间主要用于排序、哈希连接等操作,高水位不回收可能导致“虚拟”空间不足。
-- 查看临时文件信息
SELECT tablespace_name,
file_name,
ROUND(bytes / 1024 / 1024, 2) AS size_mb,
autoextensible,
ROUND(maxbytes / 1024 / 1024, 2) AS max_mb
FROM dba_temp_files;
-- 查看当前临时表空间使用情况(近似)
SELECT tablespace_name,
ROUND((SUM(bytes_used) / SUM(bytes_allocated)) * 100, 2) AS used_pct
FROM v$temp_space_header
GROUP BY tablespace_name;
如果
used_pct长期居高不下,可能因 SQL 未优化或临时表空间配置过小。
四、快速恢复区(FRA)空间使用(归档日志/备份区)
若数据库使用快速恢复区(DB_RECOVERY_FILE_DEST),需监控其空间占用。
-- 查看 FRA 配置及使用率
SELECT name,
ROUND(space_limit / 1024 / 1024, 2) AS limit_mb,
ROUND(space_used / 1024 / 1024, 2) AS used_mb,
ROUND((space_used / space_limit) * 100, 2) AS used_pct
FROM v$recovery_file_dest;
-- 查看 FRA 中各类型文件占用详情
SELECT file_type,
ROUND(percent_space_used, 2) AS pct_used,
ROUND(space_used / 1024 / 1024, 2) AS used_mb
FROM v$flash_recovery_area_usage
ORDER BY file_type;
- 当
used_pct达到 90% 时,数据库可能暂停归档,导致挂起(ORA-19815)。 - 常用清理方式:RMAN 删除过期的归档日志或备份集。
五、Undo 表空间使用监控
SELECT tablespace_name,
ROUND((SUM(bytes) / 1024 / 1024), 2) AS size_mb,
ROUND((SUM(NVL(bytes, 0) - NVL(used_bytes, 0)) / 1024 / 1024), 2) AS free_mb,
ROUND((SUM(used_bytes) / SUM(bytes)) * 100, 2) AS used_pct
FROM dba_undo_extents
GROUP BY tablespace_name;
- 若
used_pct持续接近 100%,可能存在长事务或 undo 表空间配置不足。
六、在线日志组大小及使用情况
SELECT group#,
threads,
sequence#,
bytes/1024/1024 AS size_mb,
members,
archived,
status
FROM v$log
ORDER BY group#;
- 日志组切换频繁(如每几分钟)可能导致 I/O 压力,需考虑增大日志文件大小或增加组数。
七、常见告警阈值与处理建议
| 对象 | 告警阈值 | 处理建议 |
|---|---|---|
| 表空间使用率 | ≥ 90% | 添加数据文件 / 扩展文件 / 回收空间(如清理历史数据) |
| 数据文件自动扩展 | 达到 maxbytes 且无剩余空间 | 立即添加数据文件 |
| 临时表空间使用率 | ≥ 95% | 检查 SQL 优化,增加临时文件或大小 |
| FRA 使用率 | ≥ 85% | RMAN 删除过期备份/归档,或增加 FRA 空间 |
| Undo 表空间使用率 | ≥ 90% | 检查长事务,适当增大 undo 表空间 |
八、空间回收与清理实用命令
1. 扩展表空间
-- 添加数据文件
ALTER TABLESPACE users ADD DATAFILE '/u01/app/oracle/oradata/ORCL/users02.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
-- 调整已有数据文件大小(需有足够磁盘空间)
ALTER DATABASE DATAFILE '/path/to/file.dbf' RESIZE 2G;
2. 清理归档日志(RMAN)
rman target /
DELETE ARCHIVELOG ALL BACKED UP 2 TIMES TO DEVICE TYPE DISK;
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';
3. 回收表空间高水位
-- 移动表以回收空间(谨慎,可能产生锁)
ALTER TABLE table_name MOVE;
-- 重建索引
ALTER INDEX index_name REBUILD;
4. 收缩临时表空间
-- 不能直接收缩,需通过重建临时表空间
ALTER TABLESPACE temp ADD TEMPFILE '/new/path/temp02.dbf' SIZE 1G;
ALTER TABLESPACE temp DROP TEMPFILE '/old/path/temp01.dbf';
九、一键巡检脚本(SQL*Plus)
将以下内容保存为 check_space.sql,在 SQL*Plus 中执行 @check_space:
set pages 200 lines 200
col tablespace_name for a20
col file_name for a50
col used_pct for 999.99
-- 表空间使用率
select tablespace_name, round(used_space*100/tablespace_size,2) used_pct
from dba_tablespace_usage_metrics
where round(used_space*100/tablespace_size,2) > 85;
-- 数据文件使用情况
select file_name, tablespace_name,
round(bytes/1024/1024,2) size_mb,
round((bytes - nvl(free_bytes,0))/1024/1024,2) used_mb,
autoextensible, round(maxbytes/1024/1024,2) max_mb
from dba_data_files d,
(select file_id, sum(bytes) free_bytes from dba_free_space group by file_id) f
where d.file_id = f.file_id(+);
-- FRA 使用率
select name, round(space_used/space_limit*100,2) used_pct
from v$recovery_file_dest;
定期检查空间使用率并采取预防措施,可有效避免因空间不足导致的生产故障。如果发现某个特定表空间空间增长异常,建议进一步排查对应 schema 的对象数据增长情况(如 dba_segments)。
阅读:153
发布时间: