ora-13541错误源于system_moving_window基线大小超过新retention值,需先用modify_baseline_window_size缩小基线(单位:天),再调modify_snapshot_settings更新retention(单位:分钟),顺序不可颠倒。

Oracle 11g 中调整 AWR 快照频率和保留策略,核心是调用 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS,但直接改参数可能报错——尤其当你想把保留时间设为小于默认 8 天时,ORA-13541 错误大概率会出现,原因不是权限或语法,而是底层基线(Moving Window Baseline)的约束。
为什么 MODIFY_SNAPSHOT_SETTINGS 会报 ORA-13541
Oracle 11g 引入了系统级 Moving Window Baseline,默认大小等于 AWR 保留期(通常是 8 天)。这个基线会“锁定”对应范围内的快照,阻止它们被自动清理。所以当你执行:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 7*24*60);
就会触发 ORA-13541: system moving window baseline size (691200) greater than retention (604800) —— 因为基线仍占着 8 天(691200 分钟),你却只允许保留 7 天(604800 分钟)。
- 基线大小由
DBA_HIST_BASELINE视图中的MOVING_WINDOW_SIZE决定 -
retention参数单位是分钟,不是天;写7*24*60比硬写10080更安全,避免算错 - 不能先调 retention 再调基线:必须先调整基线,再改 retention
如何安全缩短保留期到 7 天或更少
必须分两步走,顺序不能反:
- 先查当前基线:
SELECT baseline_name, moving_window_size FROM dba_hist_baseline; - 用
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE缩小基线窗口(需 DBA 权限):BEGIN DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE(window_size => 7); END;
- 再改 retention:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 7*24*60); - 验证:
SELECT SNAP_INTERVAL, RETENTION FROM dba_hist_wr_control;
注意:MODIFY_BASELINE_WINDOW_SIZE 的 window_size 单位是「天」,而 MODIFY_SNAPSHOT_SETTINGS 的 retention 单位是「分钟」——这个单位不一致是日常踩坑高发点。
interval 设置低于 60 分钟的实操限制
Oracle 11g 官方文档明确写死:自动快照最小间隔为 10 分钟,但实际能否生效取决于负载和实例配置。常见问题包括:
- 设
interval => 10后,快照仍按小时生成?检查v$active_session_history是否被禁用,或_ash_sampling_interval被调得过大 - 频繁快照显著增加 SYSAUX 表空间压力,
WRH$_系列表增长加快,建议同步监控:SELECT occupant_name, space_usage_kbytes FROM v$sysaux_occupants WHERE occupant_name LIKE 'AWR%'; -
interval => 0不仅停自动快照,还会禁用手动快照(CREATE_SNAPSHOT也会失败),这不是“暂停”,是彻底关闭 AWR 数据采集
手动快照的 flush_level 参数影响什么
调用 CREATE_SNAPSHOT 时可传 flush_level,它控制本次快照采集的数据粒度:
-
'TYPICAL'(默认):采集常规性能指标(WRH$_主要表),满足大多数诊断需求 -
'ALL':额外采集如WRH$_ACTIVE_SESSION_HISTORY全量 ASH 记录,快照体积大、耗时长,仅在深度分析锁等待或短时尖峰时使用 - 该参数不影响自动快照,只对手动触发有效;传错值(如小写
'typical')会报ORA-13516
真正容易被忽略的是:即使你调高了快照频率或手动打了很多快照,如果基线没同步调整,旧快照不会被清理,SYSAUX 最终会撑爆——这不是配置没生效,而是基线和 retention 的耦合逻辑没理清。











