直接执行@?/rdbms/admin/ashrpt.sql可生成HTML报表,需以/ as sysdba登录SQL*Plus,report_type输入html(全小写无空格)或直接回车,默认即html;时间范围须匹配ASH内存缓冲(约1小时),超时则报表为空。
直接执行 @?/rdbms/admin/ashrpt.sql 就能生成 HTML 报表
不用额外配置、不依赖 oem 或 pl/sql 包,ashrpt.sql 脚本本身原生支持 html 输出。只要在 sql*plus 中以 / as sysdba 登录后运行该脚本,按提示输入 html 即可,这是默认选项,回车就能用。
report_type 输入 html 是最简方式,但别输错大小写或空格
交互过程中第一个提示是 Enter value for report_type:,此时必须输入 html(全小写,无空格),不能输 HTML、Html 或 html (末尾带空格)。Oracle 对这个值严格区分大小写且 trim 不够鲁棒,输错会导致报错:SP2-0310: unable to open file "ashrpt_html.sql" —— 它会试图去找一个叫 ashrpt_HTML.sql 的脚本,根本不存在。
- 正确:直接回车(默认就是
html)或输入html - 错误:输入
HTML、text后又想改,必须退出重进;脚本不支持中途修改已输参数 - 注意:Windows 下路径分隔符是反斜杠,但
@?/rdbms/admin/ashrpt.sql中的?是 Oracle 内置变量,自动展开为$ORACLE_HOME,跨平台通用
时间范围填错会导致报表为空或只含极少量数据
ASH 报表依赖内存中 V$ACTIVE_SESSION_HISTORY 的采样数据,默认最多保留约 1 小时(实际取决于 SGA 中 ASH buffer 大小和系统负载)。如果你输入的 begin_time 是两天前,哪怕 duration 设为 3600 秒,报表也基本为空——因为那段时间的数据早已被覆盖或未持久化到 AWR 表中。
- 推荐用相对时间:比如查“15 分钟前到现在”,直接输
-15(注意前面有短横) - 绝对时间格式必须严格:如
05/14/26 22:00:00,月份/日期/年份顺序不能颠倒,年份用两位即可(Oracle 自动识别为 2026) -
duration单位是分钟(不是秒!文档里写“seconds”是误导),输30表示从begin_time起往后 30 分钟
生成的 HTML 文件默认保存在当前 SQL*Plus 工作目录,不是 $ORACLE_HOME
很多人以为报告会落在 $ORACLE_HOME/rdbms/admin/ 下,其实它就生成在你启动 SQL*Plus 时所在的目录。比如你在 /home/oracle 下执行 sqlplus / as sysdba,那么 ash_report.html 就出现在 /home/oracle/,而不是 Oracle 安装路径里。
- 确认位置:SQL*Plus 里执行
!pwd(Linux)或!cd(Windows)看当前路径 - 下载文件:用
sz ash_report.html(需安装 lrzsz)或scp拷出,不要去$ORACLE_HOME目录下翻找 - 文件名带后缀很重要:输
ash_20260514.html比输ash_20260514更稳妥,某些终端工具对无后缀文件识别异常
真正容易被忽略的是时间窗口与内存缓冲区的强耦合——ASH 报表不是“查库”,而是“读内存快照”。即使 AWR 里有更久的历史,ashrpt.sql 默认走的仍是 V$ACTIVE_SESSION_HISTORY 这条路径。要查超过 1 小时的数据,得明确切换到基于 AWR 表的模式(例如用 DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML 函数),但那就不是交互式脚本的事了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











