必须先调小SYSTEM_MOVING_WINDOW基线大小(如设为3),再修改AWR retention为对应天数(如32460分钟),否则因11g强制要求retention≥moving_window_size而触发ORA-13541报错。

不能直接设 retention 小于 8 天(11g 默认限制),必须先调小 SYSTEM_MOVING_WINDOW 基线大小,否则 ORA-13541 报错必现。
查当前 AWR 配置和基线大小
先确认现状,避免盲目修改:
- 运行
SELECT * FROM dba_hist_wr_control;查看当前SNAP_INTERVAL和RETENTION(单位是+DD HH:MI:SS格式) - 运行
SELECT dbid, baseline_name, baseline_type, moving_window_size FROM dba_hist_baseline;确认SYSTEM_MOVING_WINDOW当前值(11g 默认为 8) - 注意:
moving_window_size单位是天,而RETENTION在dba_hist_wr_control中单位是分钟,换算时别搞混
改 retention 小于 8 天必须先改基线
Oracle 11g 强制要求 RETENTION ≥ moving_window_size。想设保留 3 天,就得先把基线也设成 ≤3:
- 执行
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE(3);(数值必须是整数,且 ≤ 目标 retention 天数) - 再执行
BEGIN DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 60, retention => 3*24*60); END; - 如果跳过第一步直接改 retention,必定报
ORA-13541: system moving window baseline size (604800) greater than retention (259200) - 基线修改后不可逆回退到大于当前 retention 的值,除非先拉高 retention
interval 最小支持 10 分钟,0 表示禁用 AWR
采集频率不是越密越好,高频快照会加重 MMON 进程负担,尤其在 OLTP 系统:
-
interval参数单位是分钟,合法范围是0到525600(1 年),0表示彻底停掉自动快照 - 常见合理值:生产库一般用
30或60;诊断短期问题可临时设为10,但别长期开着 - 设
interval => 10时,务必同步检查retention是否足够大(比如至少 1440 分钟/1 天),否则快照还没分析就被清掉 - 修改后不需重启实例,但新设置只对后续快照生效,已有快照不受影响
验证修改是否生效
改完别信“PL/SQL procedure successfully completed”,得自己查:
- 重跑
SELECT * FROM dba_hist_wr_control;,确认SNAP_INTERVAL和RETENTION字段已更新(注意时间格式解析) - 查
SELECT COUNT(*) FROM dba_hist_snapshot WHERE snap_id > (SELECT MAX(snap_id)-10 FROM dba_hist_snapshot);看最近快照是否按新间隔生成 - 留意
DBA_HIST_WR_CONTROL.TOPNSQL字段——它控制 Top SQL 收集数量,默认 100,若你调低 retention 却没调它,可能丢失关键 SQL 统计
最易被忽略的是基线与 retention 的耦合关系:11g 里它们绑死,不是独立参数。哪怕你只想缩短保留时间,也得动基线;而基线一旦调小,就会影响基于移动窗口的性能对比功能(比如 ADDM 某些分析)。真要压到 2 天 retention,得提前评估这类依赖是否可接受。











