最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle 19c如何生成指定时间段的AWR报告
时间:2026-08-24 09:36:49 编辑:袖梨 来源:一聚教程网
RAC环境下必须用awrgrpt.sql并输入ALL才能生成全局AWR报告,因awrrpt.sql仅调用单实例函数AWR_REPORT_HTML,只接受一个inst_num参数,无法聚合多节点数据,导致Global Cache等RAC指标缺失、Top SQL仅反映本节点负载。
直接结论:用 @?/rdbms/admin/awrrpt.sql 脚本,但 RAC 环境下必须改用 @?/rdbms/admin/awrgrpt.sql 并输入 ALL,否则只出单节点数据。
为什么 RAC 下 awrrpt.sql 生成的报告不全
因为 awrrpt.sql 底层调用的是 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML,该函数只接受一个 inst_num 参数。你在节点1上执行,它就只查 inst_num=1 的快照 —— 即使集群有4个实例,RAC 特有指标(如 Global Cache Blocks Received)会消失,Top SQL 也只反映本节点负载。实际瓶颈可能在节点3的锁争用上,但你完全看不到。
常见问题表现:
- 报告里 “Global Cache” 相关统计为空或为 0
- “Instance Activity Stats” 中各节点内存、I/O 指标明显不均衡,但报告只显示一个实例
- ADDM 建议里没提任何跨实例等待事件(比如
gc buffer busy acquire)
RAC 全局报告必须用 awrgrpt.sql 并输 ALL
awrgrpt.sql 调用的是 DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML,这才是真正支持多实例聚合的函数。关键交互点只有两个:
- 当提示
Enter value for inst_num:时,必须输入ALL(全大写,不能是all、All或留空) -
DB Id不能回车跳过;RAC 环境下要手动输入,可用SELECT dbid FROM v$database;查 -
num_days是筛选快照列表的时间范围(比如输 3 就列出最近3天内的快照),不是报告跨度;选完后从列表里抄begin_snap和end_snap,别自己估算
PDB 场景下要先切容器再验证角色
如果你要分析的是某个 PDB(例如 PDB_PRODCORE),不能在 CDB$ROOT 里直接跑 awrgrpt.sql。否则报告全是 CDB 后台进程(ora_w001_* 类进程),业务 SQL 几乎不出现。
操作顺序必须是:
- 先
ALTER SESSION SET CONTAINER = PDB_PRODCORE; - 再查该 PDB 的
dbid:SELECT dbid FROM v$database;(注意:PDB 的dbid≠ CDB 的dbid) - 然后运行
@?/rdbms/admin/awrgrpt.sql,这时列出的快照 ID 才是该 PDB 实际有数据的那些 - 切换容器后,
SELECT_CATALOG_ROLE可能未激活,需重新验证:SELECT * FROM session_roles WHERE role = 'SELECT_CATALOG_ROLE';;没返回就临时授予权限:GRANT SELECT_CATALOG_ROLE TO sys;
权限和角色容易被忽略的细节
ORA-01031: insufficient privileges 或 ORA-00942: table or view does not exist 多半不是因为没用 sysdba 登录,而是 SELECT_CATALOG_ROLE 没激活。即使你用 sqlplus / as sysdba 登录,该角色默认也不一定启用。
特别注意:
- RAC + PDB 组合场景下,切换容器后角色状态不继承,必须重新验证
-
inst_num=ALL是触发全局聚合的唯一开关,漏掉这一步,其余参数再准也没用 - 输出路径必须对
oracle用户可写,否则脚本静默失败,不报错但无文件生成
最常被跳过的动作是:输 ALL 之前没确认当前连接的是目标 PDB,也没查对应 dbid。这两个点一错,生成的报告要么内容错位,要么根本跑不起来。