AWR快照间隔与保留时间必须用DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS修改,因retention≥interval×2且需整数分钟值,否则报ORA-13541/13516;设7天以下需先调小SYSTEM_MOVING_WINDOW基线;缩短interval至5分钟虽技术可行但生产慎用,会显著增加SYSAUX压力与采集延迟。
AWR快照间隔和保留时间必须用 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 修改,不能直接改表或用 ALTER SYSTEM;否则会报 ORA-13541 或 ORA-13516 错误。
最常见原因是参数不满足约束: retention 必须 ≥ interval × 2,且必须是整数分钟值。Oracle 强制校验这个关系,不是可选逻辑。
retention => 7*24*60(7天)但 interval => 60(1小时),则 10080 ≥ 120 → 合法retention => 10080 但 interval => 90 → 10080 ORA-13541interval => 15.5,某些版本隐式截断为 15,有些直接报 ORA-13516;统一用整数EXECUTE 权限也会报类似错误,不是只读权限够就行Oracle 默认有 SYSTEM_MOVING_WINDOW 基线,其 moving_window_size(单位:分钟)不能超过 retention。想设 retention = 7 天(10080 分钟),先确认基线大小:
SELECT baseline_name, moving_window_size FROM dba_hist_baseline;
若返回 moving_window_size = 11520(即 8 天),必须先调小基线:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE(7);
MODIFY_SNAPSHOT_SETTINGS 设置 retention => 10080
技术上允许(interval => 5),但生产环境慎用——它不是“更精细”,而是“更高开销”。
WRH$_ACTIVE_SESSION_HISTORY 膨胀极快awrrpt.sql 执行可能超时别只看 PL/SQL 是否成功,要查视图确认真实值:
SELECT snap_interval, retention FROM dba_hist_wr_control;
注意输出格式:+00000 01:00:00.0 中的小时部分就是 interval(这里是 60 分钟),+00007 00:00:00.0 表示 retention 是 7 天。
snap_interval 显示为 +00000 00:00:00.0,说明自动采集已关闭,不是“慢”,是“停”EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();,再查 dba_hist_snapshot 确认新快照 ID 是否生成真正容易被忽略的是 SYSAUX 空间增长速度——延长 retention 或缩短 interval 后,头几天可能没异常,但一周后 WRH$_ 表碎片和归档压力会集中爆发。改之前务必跑一次空间评估查询,而不是只看当前占用。