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

Oracle RAC升级至11.2.0.4后Undo表空间增长报Ora-30036

解决Oracle RAC升级11.2.0.4后触发Ora-30036 Undo表空间问题

刚处理过几乎一模一样的RAC升级后Undo报错问题,结合你的场景,咱们一步步拆解原因和解决方案:

问题根因梳理

Ora-30036的核心本质是Undo表空间无法提供足够空间来满足undo_retention设置的保留时长,再加上你提到的两个长运行查询(EM维护作业和AWR自动查询),它们会持续占用Undo数据,进一步挤压了空间余量。

先拆解你的现有配置:

  • undo_retention = 108000 也就是30小时,这个值在11g中如果开启了自动扩展,Oracle会尽量维持这么久的Undo保留,但如果Undo表空间的最大容量跟不上,就会触发报错。
  • RAC双节点分别使用独立Undo表空间(UNDOTBS1/UNDOTBS2)是正确配置,但需要逐个节点检查实际使用和扩展能力。

那两个长查询的具体影响:

  • EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS():这是EM的后台清理作业,会扫描大量历史数据,本身就会长时间占用Undo资源。
  • AWR自动负载仓库查询:快照生成和数据统计过程也会持续占用Undo,尤其是快照保留周期长、数据量大时,压力会更明显。

分步解决方案

1. 紧急缓解:先止报错,恢复业务

如果现在报错已经影响业务,先做临时处理:

  • 检查并扩展Undo表空间:
    先执行SQL查看每个节点的Undo表空间配置:
    SELECT tablespace_name, file_name, autoextensible, maxbytes
    FROM dba_data_files
    WHERE tablespace_name IN ('UNDOTBS1', 'UNDOTBS2');
    
    如果autoextensible显示为NO,先开启自动扩展,或者手动添加数据文件:
    -- 在node1上给UNDOTBS1加数据文件
    ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 2G MAXSIZE UNLIMITED;
    -- 在node2上给UNDOTBS2加数据文件
    ALTER TABLESPACE UNDOTBS2 ADD DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 2G MAXSIZE UNLIMITED;
    
  • 临时降低undo_retention:如果业务允许,先把保留时长调小(比如2小时),等长查询跑完再改回去:
    ALTER SYSTEM SET undo_retention=7200 SCOPE=BOTH;
    

2. 彻底排查:定位长查询的资源消耗

紧急处理后,得找到问题根源:

  • 查看Undo占用最高的会话:
    执行SQL定位那两个长查询的Undo占用情况:
    SELECT s.sid, s.serial#, s.username, t.used_ublk, t.used_urec, s.program
    FROM v$transaction t
    JOIN v$session s ON t.addr = s.taddr
    ORDER BY t.used_ublk DESC;
    
  • 调整EM维护作业:
    可以临时禁用这个作业,观察Undo使用是否改善:
    BEGIN
      DBMS_SCHEDULER.DISABLE('EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS');
    END;
    /
    
    问题解决后再重新启用即可。
  • 优化AWR快照配置:
    如果AWR快照保留太久或间隔太密,会增加Undo压力,调整为更合理的参数:
    BEGIN
      DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
        retention => 7*24*60, -- 保留7天(单位:分钟)
        interval => 60 -- 每60分钟生成一次快照
      );
    END;
    /
    

3. 长期优化:配置适配业务需求

  • 评估合理的undo_retention值:30小时的保留时长对于绝大多数业务场景来说偏长,建议根据实际需求调整,比如日常场景设置3600(1小时)或7200(2小时)足够。
  • 确保Undo表空间的扩展能力:RAC环境下每个节点的Undo表空间都要保证最大扩展空间充足,避免单节点Undo不足拖垮整个集群。
  • 持续监控Undo趋势:通过AWR或EM监控Undo表空间使用率、生成速率,提前预警空间不足的问题。

验证解决效果

调整后重点观察:

  • Ora-30036报错不再出现
  • 长查询执行完成后Undo占用明显下降
  • 双节点Undo表空间使用率稳定在80%以下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:12