执行 _awrrpt.sql 前必须确认:①以 sqlplus / as sysdba 连接;②DBID 准确(查 v$database);③快照 ID 成对且有效(查 dba_hist_snapshot)。
执行 _awrrpt.sql 前必须确认的三件事
它不会自动连上你想要的数据库,也不会猜你想要哪段时间——不手动指定连接信息和快照范围,脚本一运行就报 ora-01017: invalid username/password 或卡在 enter value for dbid: 一直等输入。
- 用
sqlplus / as sysdba连上去再跑,别用普通用户;如果跨库,得先CONNECT username/password@tns_alias -
dbid必须准确:查SELECT dbid FROM v$database;,别抄错数字(尤其末尾 0 和 O 容易看混) - 快照 ID 要成对:比如想看昨天下午 2 点到 4 点,得先查
SELECT snap_id, begin_interval_time FROM dba_hist_snapshot WHERE begin_interval_time >= TRUNC(SYSDATE-1)+14/24 ORDER BY snap_id FETCH FIRST 5 ROWS ONLY;,挑两个相邻、时间差符合你需求的snap_id
_awrrpt.sql 的参数顺序不能调换
这个脚本是 SQL*Plus 脚本,参数靠位置绑定,不是命名参数。输错顺序会导致报告生成失败或内容错乱——比如把 report_type 放在 num_days 位置,它会把 html 当成天数解析,然后报 SP2-0552: Bind variable "num_days" not declared。
- 标准顺序是:
@?/rdbms/admin/awrrpt.sql <report_type><dbid><inst_num><num_days><begin_snap><end_snap></end_snap></begin_snap></num_days></inst_num></dbid></report_type> -
report_type只接受text或html,大小写敏感,输HTML会失败 -
inst_num是实例号,RAC 环境必须填对(查SELECT instance_number FROM gv$instance;),单机一般填1 -
num_days其实只用于交互式模式下自动选快照范围,如果你已经指定了begin_snap和end_snap,它会被忽略——但位置还得占着,填0最安全
生成 HTML 报告时容易被忽略的环境依赖
脚本本身不报错,但生成的 HTML 打不开、样式全丢、图表不显示——大概率是 Oracle Home 下的 awr 相关 CSS/JS 文件没加载成功,或者浏览器直接双击打开 file:// 协议导致跨域拦截。
- 确保运行
sqlplus的用户对$ORACLE_HOME/rdbms/admin/有读权限(尤其 AIX/Linux 上常因 umask 导致新生成的 .html 无法读取同目录下的awrrpt.css) - 别用资源管理器双击打开报告,要用浏览器「文件 → 打开」,或起个本地 HTTP 服务(比如 Python3 -m http.server 8000)后访问
http://localhost:8000/awrrpt_1_12345.html - 如果报告里显示
Failed to load chart data,检查$ORACLE_HOME/rdbms/jlib/oracle.sql.jar是否存在且可读,缺失会导致 JS 解析失败
替代方案:用 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML 更可控
交互式脚本适合快速查一次,但要集成进监控或定时任务,_awrrpt.sql 的参数绑定和输出路径不可控,不如直接调 PL/SQL 函数——它返回 CLOB,你可以自己写入文件、加时间戳、发邮件。
- 函数签名固定:
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(<l_dbid>, <l_inst_num>, <l_bid>, <l_eid>)</l_eid></l_bid></l_inst_num></l_dbid>,四个参数全是 NUMBER,没有字符串类型陷阱 - 输出是纯 HTML 字符串,不用依赖 SQL*Plus 的 spool 机制,避免编码错乱(比如中文变成
中文) - 注意
l_bid和l_eid必须是真实存在的快照 ID,且l_bid ,否则返回空 CLOB,不会报错
真正麻烦的不是步骤多,而是每个参数背后都绑着一个可能失效的上下文:DBID 对不上、实例号在 RAC 里漂移、快照被自动清理、HTML 资源路径硬编码在 Oracle Home 里——这些地方一漏,报告就“看起来生成了”,实际没法用。











