必须先查快照ID再运行awrrpt.sql:执行SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY;确认目标时段存在连续快照,同时验证用户权限、归档模式及实例环境。

直接用 @?/rdbms/admin/awrrpt.sql 脚本,但必须手动指定起止 snap_id,不能只填“昨天”或“最近1小时”——AWR不认自然时间表达式,只认快照ID。
怎么查可用的 snap_id?别靠猜
AWR报告依赖快照(snapshot),而快照是按固定间隔(默认60分钟)生成的,不是每秒都有。你得先确认目标时间段内真有快照存在,否则选了也白搭。
- 运行
SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY;查最近10个快照 - 注意
begin_interval_time和end_interval_time是采样窗口,不是执行时间点;比如9:00–10:00的快照,snap_id=12345,那你要分析这整段就得用它 - 如果目标时段没快照,查
SELECT * FROM dba_hist_wr_control;看保留天数是否为0,或SHOW PARAMETER statistics_level;是否是BASIC(必须是TYPICAL或ALL)
执行 @?/rdbms/admin/awrrpt.sql 时最关键的三步输入
脚本会交互式提问,顺序固定,错一步就可能导出空报告或跨周期数据。
-
report_type:输html(推荐),别回车默认——某些旧版本默认是text,且不提示 -
begin_snap和end_snap:必须是真实存在的、连续的snap_id,且begin_snap < end_snap;中间若被手工清理过(如调用DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE),end_snap不能“跳空”,否则部分历史表(如DBA_HIST_SQLSTAT)静默缺失 -
report_name:只输文件名(如awr_20260720.html),不带路径;实际写入位置由当前 Oracle 用户的默认目录决定(通常是$ORACLE_HOME/rdbms/admin下,或当前 sqlplus 启动路径)
为什么有时生成了报告但关键数据为空?
常见静默失败场景,不报错但内容缺项:
- 用户缺少
SELECT_CATALOG_ROLE角色(仅SELECT权限不够),DBA_HIST_*视图查不到数据 - 数据库不在
ARCHIVELOG模式:ARCHIVE LOG LIST必须显示Database log mode: Archive Mode;非归档下awrrpt.sql可能卡在打包阶段,最后生成一个只有页眉的空 HTML -
snap_id跨越了不同实例(RAC 环境):单实例脚本awrrpt.sql默认只查当前实例;若要跨实例,得改用awrrpti.sql并手动指定instance_number
真正麻烦的不是生成步骤,而是快照本身是否完整、权限是否精确匹配、归档模式是否开启——这三个点漏一个,报告就只剩壳子。别急着点“回车”,先查快照、再验权限、最后跑脚本。


















