查询各表空间的管理属性、空间总量、空闲量及使用率,用于巡检表空间是否存在空间不足风险。
一、SQL脚本
sql
--检查表空间使用情况
SELECT B.TABLESPACE_NAME TABLESPACE,
A.EXTENT_MANAGEMENT EXT_MGT, -- 表空间的区管理方式(LOCAL/LOCAL AUTOALLOCATE等)
A.SEGMENT_SPACE_MANAGEMENT SEG_MGT, -- 表空间的段管理方式(AUTO/MANUAL)
A.STATUS STATUS, -- 表空间状态(ONLINE/READ ONLY等)
A.LOGGING LOGGING, -- 表空间日志模式(LOGGING/NOLOGGING)
B.TOTAL TOTAL, -- 表空间总大小(GB)
B.FREE FREE, -- 表空间空闲大小(GB)
B.USED_PCT USED_PCT -- 表空间使用率(%)
FROM DBA_TABLESPACES A,
(SELECT D.TABLESPACE_NAME,
ROUND(D.SUMBYTES / 1024 / 1024 / 1024, 2) || 'GB' TOTAL, -- 计算总空间(转GB,保留2位小数)
ROUND(DECODE(F.SUMBYTES, NULL, 0, F.SUMBYTES) / 1024 / 1024 / 1024, 2) || 'GB' FREE, -- 计算空闲空间(空值处理为0)
ROUND((D.SUMBYTES - DECODE(F.SUMBYTES, NULL, 0, F.SUMBYTES)) * 100 / D.SUMBYTES, 2) || '%' USED_PCT -- 计算使用率
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) SUMBYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, SUM(BYTES) SUMBYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D
WHERE F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME -- 外连接,确保包含无空闲空间的表空间
ORDER BY D.TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME;
二、脚本说明
该SQL会返回以下关键信息,用于表空间巡检:
TABLESPACE:表空间名称;EXT_MGT:表空间的区管理方式 (如LOCAL,表示本地管理,是Oracle推荐的方式);SEG_MGT:表空间的段管理方式 (如AUTO,表示自动段空间管理);STATUS:表空间状态(正常应为ONLINE);LOGGING:表空间日志模式(正常应为LOGGING,确保数据可恢复);TOTAL:表空间总大小(单位:GB);FREE:表空间空闲大小(单位:GB);USED_PCT:表空间使用率(单位:%,通常使用率超过90%需预警)。
三、注意事项
- 若某表空间的
USED_PCT接近或超过90%,需及时扩展表空间(添加数据文件或扩展现有数据文件); - 若表空间状态为
OFFLINE/READ ONLY,需排查是否为异常状态; - 若
EXT_MGT为DICTIONARY(字典管理),建议迁移为LOCAL管理(Oracle 10g后推荐本地管理)。