搜索结果

×

搜索结果将在这里显示。

🚀 4.1 Oracle表空间检查11g

1. 表空间检查

Oracle 表空间检查是数据库日常运维的核心任务,确保存储空间充足、性能稳定。以下从多个维度给出检查方法、SQL 脚本及处理建议。

一、表空间总体使用率

1. 查询所有表空间的使用率(11g+)

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;

说明:该视图仅统计已分配的数据文件空间,不包含自动扩展的潜在空间。

2. 传统方法(兼容所有版本)

SELECT df.tablespace_name,
       ROUND((df.total_bytes - NVL(fs.free_bytes, 0)) / df.total_bytes * 100, 2) AS used_pct,
       ROUND(df.total_bytes / 1048576, 2) AS size_mb,
       ROUND((df.total_bytes - NVL(fs.free_bytes, 0)) / 1048576, 2) AS used_mb,
       ROUND(NVL(fs.free_bytes, 0) / 1048576, 2) AS free_mb
FROM (SELECT tablespace_name, SUM(bytes) total_bytes
      FROM dba_data_files
      GROUP BY tablespace_name) df,
     (SELECT tablespace_name, SUM(bytes) free_bytes
      FROM dba_free_space
      GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name(+)
ORDER BY used_pct DESC;

二、数据文件详细信息(含自动扩展)

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 - NVL(free_bytes, 0)) / 1024 / 1024, 2) AS used_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(+);

关注点

  • autoextensible = 'YES'​ 表示允许自动扩展,但需确保 max_mb 足够大。
  • 若多个数据文件接近满且无法自动扩展,需立即添加或扩展。

三、临时表空间检查

1. 临时文件信息

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;

2. 临时表空间当前使用情况(近似)

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 长期 > 90%,可能需增大临时表空间或优化 SQL。

四、Undo 表空间监控

11G:

SELECT tablespace_name,
       ROUND(SUM(bytes) / 1024 / 1024, 2) AS total_mb,
       ROUND(SUM(NVL(used_bytes, 0)) / 1024 / 1024, 2) AS used_mb,
       ROUND(SUM(NVL(used_bytes, 0)) / SUM(bytes) * 100, 2) AS used_pct
FROM dba_undo_extents
GROUP BY tablespace_name;

19C:

SELECT tablespace_name,
       ROUND(SUM(bytes_used) / (SUM(bytes_used) + SUM(bytes_free)) * 100, 2) AS used_pct
FROM v$temp_space_header
GROUP BY tablespace_name;
  • used_pct 持续 > 90%,可能存在长事务或 Undo 表空间配置不足。

五、快速恢复区(FRA)检查

如果使用 DB_RECOVERY_FILE_DEST,需监控空间:

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;
  • 使用率超过 85% 时应及时清理(RMAN 删除过期归档/备份)。

六、表空间 I/O 性能(可选)

查看表空间级的 I/O 统计(需 STATISTICS_LEVEL = TYPICAL):

SELECT tablespace_name,
       ROUND(SUM(phyblkrd) / DECODE(SUM(phyblkwrt), 0, 1, SUM(phyblkwrt)), 2) AS read_write_ratio
FROM v$filestat fs, dba_data_files df
WHERE fs.file# = df.file_id
GROUP BY tablespace_name;

七、常见问题与处理建议

问题 检查方法 处理措施
表空间使用率 ≥ 90% 使用率查询 添加数据文件:ALTER TABLESPACE ... ADD DATAFILE ... SIZE 1G AUTOEXTEND ON​;或扩展现有文件:ALTER DATABASE DATAFILE ... RESIZE 2G
临时表空间不足 v$temp_space_header 增加临时文件:ALTER TABLESPACE temp ADD TEMPFILE ... SIZE 1G
Undo 表空间高水位 dba_undo_extents 检查长事务,适当增加 Undo 表空间大小
FRA 空间满 v$recovery_file_dest 使用 RMAN 删除过期备份:DELETE OBSOLETE;或增加 FRA 大小
数据文件无法扩展 dba_data_files​ 的 maxbytes 限制 修改 MAXSIZE:ALTER DATABASE DATAFILE ... AUTOEXTEND ON MAXSIZE 32G 或添加新文件
表空间碎片(高水位线过高) dba_tables​ 的 blocks​ 与 empty_blocks 使用 SHRINK SPACE​ 或 MOVE 重组表

八、一键巡检脚本(11g 兼容)

将以下 SQL 保存为 tablespace_check.sql​,在 SQL*Plus 中执行 @tablespace_check

sql

set pages 100 lines 200
col tablespace_name for a20
col file_name for a50

prompt === 1. 表空间使用率(Top 10) ===
select * from (
  select tablespace_name,
         round(used_space*100/tablespace_size,2) used_pct,
         round(tablespace_size/1024/1024,2) size_mb,
         round(used_space/1024/1024,2) used_mb
  from dba_tablespace_usage_metrics
  order by used_pct desc
) where rownum <= 10;

prompt === 2. 数据文件与自动扩展 ===
select file_id, tablespace_name, file_name,
       round(bytes/1024/1024,2) size_mb,
       autoextensible, round(maxbytes/1024/1024,2) max_mb
from dba_data_files
order by tablespace_name, file_id;

prompt === 3. 临时文件信息 ===
select tablespace_name, file_name,
       round(bytes/1024/1024,2) size_mb,
       autoextensible, round(maxbytes/1024/1024,2) max_mb
from dba_temp_files;

prompt === 4. Undo 表空间使用 ===
select tablespace_name,
       round(sum(bytes)/1024/1024,2) total_mb,
       round(sum(nvl(used_bytes,0))/1024/1024,2) used_mb,
       round(sum(nvl(used_bytes,0))/sum(bytes)*100,2) used_pct
from dba_undo_extents
group by tablespace_name;

prompt === 5. FRA 使用率(如配置) ===
select name, round(space_limit/1024/1024,2) limit_mb,
       round(space_used/1024/1024,2) used_mb,
       round(space_used/space_limit*100,2) used_pct
from v$recovery_file_dest;

执行后可快速获取所有关键表空间信息。建议将此巡检纳入每日自动化监控,及时发现并处理空间问题。

阅读:154
发布时间: