搜索结果

×

搜索结果将在这里显示。

🍦 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
发布时间: