必须用有select_catalog_role权限的用户登录,否则执行awrrpt.sql会报ora-01031;应先以sqlplus / as sysdba连接,再查session_roles验证该角色是否激活,未激活则临时授予,且pdb环境需先alter session set container=pdb_name切换容器。
必须用有 select_catalog_role 权限的用户(如 sys 或 system)登录,否则执行 @?/rdbms/admin/awrrpt.sql 会直接报 ora-01031: insufficient privileges —— 这是第一步就卡住的最常见原因。
怎么进 SQL*Plus 并确认权限够不够
别跳过权限验证这步。很多 DBA 在非 CDB 环境下用 sqlplus / as sysdba 能进,但生成报告时仍失败,是因为 sys 在某些配置下默认不带 SELECT_CATALOG_ROLE(尤其在 19c 多租户中)。实操建议:
- 先连上:运行
sqlplus / as sysdba,确保能进入 SQL*Plus 提示符 - 立刻验证:执行
SELECT * FROM session_roles WHERE role = 'SELECT_CATALOG_ROLE';,有返回行才说明权限已激活 - 若无返回,临时授予权限:
GRANT SELECT_CATALOG_ROLE TO sys;(仅限诊断用,事后可回收) - 注意:不能用普通应用用户或只带
CONNECT的账号,哪怕它能查v$session也不行
执行 @?/rdbms/admin/awrrpt.sql 后的关键交互点
脚本启动后不是“一路回车”,几个输入项直接影响报告是否覆盖目标时段、是否包含 PDB 数据、甚至是否能生成成功:
-
report_type:填html(推荐),别输错成HTML或空格——大小写敏感,输错会退出脚本 -
num_days(天数):这个值只是用来筛选快照列表范围,不是报告时间跨度。输1表示列出最近 24 小时内的快照,但你最终选的begin_snap和end_snap可以跨多天,只要它们存在 -
begin_snap/end_snap:必须从脚本列出的表格里抄 ID,不能自己估算。常见错误是看到 “Snap Id: 12345” 就输12345,但实际该行对应的是Instance列下的某个实例名,RAC 环境下漏选实例会导致只出单节点数据 - 数据库 ID(
dbid):非 RAC 环境可回车跳过;RAC 必须手动输入,否则默认只取当前实例的dbid,掩盖跨节点等待
19c 下 PDB 场景要额外加一步
在 CDB 中直接跑 awrrpt.sql 默认生成 CDB 级报告,看不到单个 PDB 的 ASH 和 ADDM 细节。想分析某个 PDB(比如叫 PDB1),得先切容器:
- 连接后先执行:
ALTER SESSION SET CONTAINER = PDB1; - 再运行:
@?/rdbms/admin/awrrpt.sql - 注意:切换后
dbid会变,脚本里提示的DB Id是 PDB 自己的,不是 CDB 的;快照 ID 也只显示该 PDB 有数据的那些 - 如果没切容器就跑,报告里 “Top SQL” 可能全是 CDB$ROOT 的后台语句,和业务 PDB 完全无关
报告生成后文件在哪、怎么确认内容有效
默认输出到当前 shell 工作目录,文件名类似 awrrpt_1_12345_12346.html。但光有文件不等于内容可用:
- 打开 HTML 报告,先翻到 “Report Summary” 页,检查
DB Time和DB CPU是否为非零值;若全为 0,说明选的快照区间内没采集到有效负载(比如压测根本没打进来) - 看 “Top 5 Timed Foreground Events” 页,如果只有
SQL*Net message from client占比超 90%,大概率是客户端空闲等待,不是数据库瓶颈 - 对比两个快照的
begin_interval_time和end_interval_time,确认时间差符合预期(比如你选了 1 小时跨度,但报告里显示只隔了 10 分钟,说明中间快照被 purge 了) - 文本报告(
.txt)在终端里容易乱码,特别是含中文注释时,优先用 HTML 格式
真正容易被忽略的是快照本身的存在性——DBA_HIST_SNAPSHOT 里没数据,再正确的命令也白搭。每次生成前,花 10 秒跑一遍 SELECT MIN(snap_id), MAX(snap_id), COUNT(*) FROM dba_hist_snapshot WHERE begin_interval_time > SYSDATE - 1;,比反复试错快得多。











