运行@addmrpt.sql前须确认用户具备SELECT_CATALOG_ROLE(需显式启用)和ADVISOR权限,AWR快照区间内至少有两个含完整统计的连续快照,STATISTICS_LEVEL必须为TYPICAL或ALL,且需手动SPOOL指定输出路径。
运行 @addmrpt.sql 前必须确认当前用户有 SELECT_CATALOG_ROLE 和 ADVISOR 权限
没权限时执行会直接报错 ora-00942: table or view does not exist 或 ora-01031: insufficient privileges,而不是提示“权限不足”。这是因为脚本内部查询 dba_hist_* 视图和调用 dbms_advisor 包,底层依赖这两个角色。
实操建议:
- 用
SELECT * FROM SESSION_ROLES;确认当前会话已激活SELECT_CATALOG_ROLE(注意:该角色默认不自动启用,需显式SET ROLE SELECT_CATALOG_ROLE;) -
GRANT ADVISOR TO your_user;必须由 DBA 执行,普通用户无法自行授予 - 如果用
SYSTEM或SYS登录,也得确保不是以AS SYSOPER方式连接——否则部分数据字典视图不可见
@addmrpt.sql 要求 AWR 快照区间内至少存在两个有效快照
脚本运行时会要求输入 begin_snap 和 end_snap,但容易忽略的是:这两个快照不仅得存在,还必须都包含完整的性能统计(比如 DBA_HIST_SYSMETRIC_SUMMARY 有记录),否则生成的报告里关键指标(如 DB Time、CPU 使用率)会显示为 0 或空。
常见错误现象:
- 报告中 “Top 5 Timed Foreground Events” 全是空白
- “DB Time” 显示为
0.0,即使数据库明显在忙 - 脚本中途退出,提示
No data found for the specified snapshot range
实操建议:
- 先查
SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT WHERE INSTANCE_NUMBER = 1 ORDER BY SNAP_ID DESC FETCH FIRST 10 ROWS ONLY;确认快照时间对齐且非空 - 避免跨重启边界:如果实例在
begin_snap和end_snap之间重启过,AWR 数据可能不连续,建议选同一次实例运行期内的快照 - 最小合理区间通常是 2 个快照(即 1 小时,默认 60 分钟采样一次),太短(如只差 5 分钟)会导致统计抖动大、结论失真
输出路径和文件名由 SQL*Plus 环境变量 SPPOOL 和当前目录决定,不是脚本内置
@addmrpt.sql 本身不指定保存位置,它依赖 SQL*Plus 的 SPOOL 机制。很多人以为报告会自动落在 $ORACLE_HOME/rdbms/admin/ 下,结果执行完找不到文件。
实操建议:
- 运行前手动执行
SPOOL /tmp/addm_report_20240520.html(路径需有写权限) - 确认当前 SQL*Plus 工作目录:用
HOST pwd(Linux/macOS)或HOST CD(Windows)查看,SPOOL默认相对该路径解析 - 生成后务必
SPOOL OFF,否则后续所有 SQL*Plus 输出都会被追加进报告文件 - 输出格式固定为 HTML,不支持直接生成文本或 CSV;若需解析,得用外部工具处理 HTML 表格
ADDM 报告依赖实例级配置,STATISTICS_LEVEL 必须为 TYPICAL 或 ALL
哪怕 AWR 快照存在、权限齐全、区间合理,如果数据库启用了最低限度监控,ADDM 引擎仍会跳过分析,报告里只有一行:“No findings were detected.”
原因很直接:STATISTICS_LEVEL = BASIC 会禁用 AWR 采样和 ADDM 所需的底层统计收集(如等待事件细分类、SQL 执行计划历史等)。
检查与修复:
- 查当前值:
SHOW PARAMETER STATISTICS_LEVEL - 临时生效(无需重启):
ALTER SYSTEM SET STATISTICS_LEVEL = TYPICAL SCOPE=BOTH; - 注意:改完不会自动补全历史快照,只影响之后的 AWR 采集;已有快照若是在
BASIC下生成的,仍无法用于 ADDM 分析
这个参数常被 DBA 为了“省资源”设成 BASIC,但代价是诊断能力归零——ADDM 不是可选功能,而是 Oracle 自带诊断的基础设施,关了就等于没装。

















