必须先验证归档模式、statistics_level参数及用户权限,再查快照ID,最后按固定顺序输入report_type、num_days、begin_snap、end_snap和report_name;RAC环境须用awrrpti.sql并指定实例号。

直接用 @?/rdbms/admin/awrrpt.sql 就能生成,但必须先确认快照存在、权限够、归档模式开启,否则报告可能为空或报错。
查快照ID前先验证基础条件
AWR报告不是“有时间就能出”,它依赖真实存在的快照数据。以下三点不满足,脚本会静默失败(比如生成一个只有页眉的空HTML):
- 数据库必须是
ARCHIVELOG模式:ARCHIVE LOG LIST输出中需含Database log mode: Archive Mode -
statistics_level参数不能是BASIC:SHOW PARAMETER statistics_level应返回TYPICAL或ALL - 当前用户需有
SELECT_CATALOG_ROLE(仅SELECT权限不够),否则查不到DBA_HIST_*视图
用SQL查最近可用的快照ID
别靠记忆或估算时间——AWR只认 snap_id,且快照是按固定间隔(默认60分钟)生成的,中间可能有断点。运行:
SELECT snap_id, TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI') AS begin_time,
TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI') AS end_time
FROM dba_hist_snapshot
WHERE begin_interval_time > SYSDATE - 1
ORDER BY snap_id DESC;注意:begin_interval_time 和 end_interval_time 是采样窗口,不是执行时刻;选 begin_snap 和 end_snap 时,必须保证两者之间没有被手工清理过(如调用过 DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE)。
执行 awrrpt.sql 的关键输入顺序
脚本交互式提问顺序固定,错一步就导出错周期数据:
-
report_type:输html,别直接回车(旧版本默认text,且不提示) -
num_days:建议输1,只列出最近24小时快照,避免滚动太多屏漏看 -
begin_snap/end_snap:必须是上一步查到的、连续的两个 ID,且begin_snap -
report_name:只输文件名如awr_20261026.html,不带路径;实际写入位置是当前 sqlplus 启动目录(不是$ORACLE_HOME)
RAC环境误用单实例脚本的典型表现
如果你在 RAC 上连的是某个实例(比如 inst_num = 2),却用了 awrrpt.sql,报告只会包含该实例数据,但脚本不会警告你“其他实例没算进来”。真正要跨实例分析,得换用 awrrpti.sql 并手动指定 instance_number。单实例库也建议检查 SELECT instance_name FROM v$instance; 确认不是 RAC 模式伪装成单实例(比如某些云托管Oracle)。


















