awrrpti.sql必须用SQL*Plus运行,因其依赖ACCEPT/PROMPT交互及SET MARKUP HTML ON;需确认Oracle Client安装、路径正确、身份验证完整,并用response文件传参,前置执行SET MARKUP等命令,最后补全HTML头尾结构。
awrrpti.sql 脚本必须用 SQL*Plus 运行,不能用 sqlcl 或其他客户端
oracle 官方 awr 报告生成脚本 awrrpti.sql 是为 sql*plus 量身定制的:它依赖 accept、prompt 和 set markup html on 的交互式行为。用 sqlcl 或 jdbc 连接(比如 dbeaver)执行会卡在参数输入环节,或直接报错 sp2-0310: unable to open file "awrrpti.sql"(路径没设对)或更隐蔽的 ora-00900: invalid sql statement(因 markup 初始化失败)。
实操建议:
- 确认已安装 Oracle Client(含 SQL*Plus),不是只装了 Instant Client(缺
awrrpti.sql) - 路径通常在
$ORACLE_HOME/rdbms/admin/awrrpti.sql,先ls -l $ORACLE_HOME/rdbms/admin/awrrpti.sql确认存在 - 连接必须用
sqlplus / as sysdba或带密码的sqlplus username/password@tns_alias,不能跳过身份验证 - 别试图重定向 stdin 模拟交互——
echo -e "1\n1\n...\n" | sqlplus ... @awrrpti.sql会失败,SQL*Plus 不吃这种管道输入
HTML 输出必须显式开启 SET MARKUP,并关闭多余输出
默认 SQL*Plus 输出是纯文本,awrrpti.sql 自身不负责开 HTML 模式。如果漏掉这步,你会得到一个满屏 ANSI 控制符+表格边框的“伪 HTML”文件,浏览器打开就是乱码加大量 <pre class="brush:php;toolbar:false;"></code> 块。</p>
<p>实操建议:</p>
<ul>
<li>在调用 <code>awrrpti.sql</code> 前,必须先执行:<br><pre class="brush:php;toolbar:false;">SET MARKUP HTML ON SPOOL ON<br>SET PAGESIZE 0<br>SET LINESIZE 32767<br>SET LONG 1000000<br>SET TRIMSPOOL ON</pre>
<li>
<code>SET PAGESIZE 0 关键:否则每页顶部会插入 <table> 标签导致 HTML 结构断裂
<li>
<code>SET LINESIZE 32767 防止长 SQL 行被截断换行,破坏 HTML 标签完整性
SPOOL report.html 开始捕获,@awrrpti.sql 执行完后 SPOOL OFF
参数输入无法跳过,但可用 response 文件绕过交互
awrrpti.sql 启动后会依次问:报告类型(HTML/TEXT)、DBID、实例号、快照范围、报告名称。手动输 5 次在无 GUI 环境下不现实,但 Oracle 支持 response 文件机制。
立即学习“前端免费学习笔记(深入)”;
实操建议:
- 新建文件
awr.rsp,按顺序写 5 行(空行或注释不行):html<br>1234567890<br>1<br>1000<br>1010<br>my_awr_report
- 执行命令:
sqlplus / as sysdba @?/rdbms/admin/awrrpti.sql @awr.rsp
注意:两个@,第一个是执行脚本,第二个是把awr.rsp当作参数传给脚本内部的ACCEPT - DBID 必须准确,查法:
SELECT dbid FROM v$database;;实例号查v$instance;快照 ID 查dba_hist_snapshot - 若响应文件格式错(比如多空格、少一行),SQL*Plus 会卡住或报
SP2-0310,此时删掉spool文件重试
生成的 HTML 文件需手动补全 DOCTYPE 和 CSS,否则显示异常
Oracle 生成的 HTML 是片段(...),没有 、,也不带样式。直接双击打开,Chrome 会以 quirks mode 渲染,表格错位、字体发虚、折叠功能失效。
实操建议:
- 用 sed 或脚本头尾补全(Linux 示例):
sed -i '1s/^/<!DOCTYPE html><html><head><meta charset="utf-8"><title>AWR Report<\/title><style>body{font-family:Arial,sans-serif;}table{border-collapse:collapse;width:100%;}th,td{border:1px solid #ccc;padding:4px;text-align:left;}<\/style><\/head><body>/' report.html<br>echo "</body></html>" >> report.html - 关键补的是
<meta charset="utf-8">,否则中文字段名显示为方块 - 别依赖 Oracle 自带的
awrrpt.sql(它只输出 TEXT),必须用awrrpti.sql—— 后者才是支持交互式 HTML 的那个 - 如果报告里出现
#VALUE!或空白图表,说明你的数据库版本低于 12.2,或者未启用STATISTICS_LEVEL=ALL,这个没法靠前端补救
SET MARKUP 时机——这两处错一点,整个流程就静默失败,连错误提示都不给你。











