You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 10g SYSTEM表空间数据文件异常快速增长占满空间求助

排查步骤
  • 优先定位SYSTEM表空间内的空间占用主体
    不要盲目加数据文件,先跑以下SQL查SYSTEM表空间占用Top20的段,适配Oracle 10g语法:

    SELECT * FROM (
      SELECT owner, segment_name, segment_type, bytes/1024/1024 AS size_mb
      FROM dba_segments
      WHERE tablespace_name = 'SYSTEM'
      ORDER BY bytes DESC
    ) WHERE ROWNUM <=20;
    

    常见的异常占用分三类:

    • 审计相关表AUD$/FGA_LOG$:10g版本最常见的SYSTEM暴涨诱因,默认审计日志存在SYSTEM表空间,无清理策略时增长极快
    • 业务用户的表/索引:业务用户默认表空间被误设为SYSTEM,业务数据持续写入系统表空间
    • 系统回滚段/临时段/系统索引:多为长事务僵死、数据库bug导致的空间泄漏
  • 审计场景专项排查
    如果查询结果显示审计表占比最高,执行以下SQL确认审计配置和日志增量:

    -- 确认审计开关状态
    SELECT name, value FROM v$parameter WHERE name = 'audit_trail';
    -- 统计每日审计日志生成量
    SELECT TRUNC(ntimestamp#) AS gen_date, COUNT(*) AS daily_log_cnt
    FROM sys.aud$
    GROUP BY TRUNC(ntimestamp#)
    ORDER BY gen_date DESC;
    

    若audit_trail返回值为DB或DB_EXTENDED,说明审计日志直接写入库内系统表,每日1GB增量符合未清理审计日志的特征。

  • 表空间配置错误排查
    执行SQL检查是否有非系统用户错用SYSTEM表空间:

    SELECT username, default_tablespace, temporary_tablespace
    FROM dba_users
    WHERE default_tablespace = 'SYSTEM' OR temporary_tablespace = 'SYSTEM';
    

    正常仅SYS、SYSTEM等内置系统用户默认表空间为SYSTEM,所有业务账号都应使用独立业务表空间。

解决方法
  • 审计日志暴涨修复

    1. 先备份历史审计数据到其他业务表空间,避免日志丢失:
    CREATE TABLE sys.aud$_history TABLESPACE 可用的业务表空间名 AS SELECT * FROM sys.aud$;
    
    1. 清理超期日志,建议保留30-90天即可,清理后收缩表释放空间:
    DELETE FROM sys.aud$ WHERE ntimestamp# < SYSDATE - 30;
    COMMIT;
    ALTER TABLE sys.aud$ ENABLE ROW MOVEMENT;
    ALTER TABLE sys.aud$ SHRINK SPACE CASCADE;
    
    1. 长期优化:不需要审计功能就直接修改audit_trail参数为NONE,重启数据库生效;需要保留审计的话,把AUD$、FGA_LOG$迁移到独立表空间,同时配置定时任务定期清理超期日志。
  • 业务数据错写入SYSTEM修复

    1. 把查到的业务表、索引在线迁移到对应业务表空间:
    -- 迁移表
    ALTER TABLE 属主.表名 MOVE TABLESPACE 对应业务表空间名;
    -- 重建表上索引
    ALTER INDEX 属主.索引名 REBUILD TABLESPACE 对应业务索引表空间名;
    
    1. 修正用户配置,避免后续再写入:
    -- 修改业务用户默认表空间
    ALTER USER 业务用户名 DEFAULT TABLESPACE 业务表空间名 TEMPORARY TABLESPACE TEMP;
    -- 回收业务用户在SYSTEM表空间的写入权限
    REVOKE UNLIMITED TABLESPACE FROM 业务用户名;
    ALTER USER 业务用户名 QUOTA 0 ON SYSTEM;
    
  • 系统段异常修复

    1. 先查僵死长事务:
    SELECT s.sid, s.serial#, t.start_time, s.username, s.status
    FROM v$transaction t JOIN v$session s ON t.addr = s.taddr
    WHERE t.start_time < SYSDATE - 1;
    
    1. 杀掉非业务需要的僵死事务释放回滚空间;如果是10g已知bug导致的系统段泄漏,在业务低峰窗口重启实例即可释放临时占用的空间。

注意:Oracle 10g已停止官方支持十余年,后续建议规划升级到仍在维护周期的数据库版本,减少无补丁修复的系统风险。

内容的提问来源于stack exchange,提问作者biramani thangjam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:09:15