一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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的锁争用上,但你完全看不到。

常见问题表现:

  1. 报告里 “Global Cache” 相关统计为空或为 0
  2. “Instance Activity Stats” 中各节点内存、I/O 指标明显不均衡,但报告只显示一个实例
  3. ADDM 建议里没提任何跨实例等待事件(比如 gc buffer busy acquire

RAC 全局报告必须用 awrgrpt.sql 并输 ALL

awrgrpt.sql 调用的是 DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML,这才是真正支持多实例聚合的函数。关键交互点只有两个:

  1. 当提示 Enter value for inst_num: 时,必须输入 ALL(全大写,不能是 allAll 或留空)
  2. DB Id 不能回车跳过;RAC 环境下要手动输入,可用 SELECT dbid FROM v$database;
  3. num_days 是筛选快照列表的时间范围(比如输 3 就列出最近3天内的快照),不是报告跨度;选完后从列表里抄 begin_snapend_snap,别自己估算

PDB 场景下要先切容器再验证角色

如果你要分析的是某个 PDB(例如 PDB_PRODCORE),不能在 CDB$ROOT 里直接跑 awrgrpt.sql。否则报告全是 CDB 后台进程(ora_w001_* 类进程),业务 SQL 几乎不出现。

操作顺序必须是:

  1. ALTER SESSION SET CONTAINER = PDB_PRODCORE;
  2. 再查该 PDB 的 dbidSELECT dbid FROM v$database;(注意:PDB 的 dbid ≠ CDB 的 dbid
  3. 然后运行 @?/rdbms/admin/awrgrpt.sql,这时列出的快照 ID 才是该 PDB 实际有数据的那些
  4. 切换容器后,SELECT_CATALOG_ROLE 可能未激活,需重新验证:SELECT * FROM session_roles WHERE role = 'SELECT_CATALOG_ROLE';;没返回就临时授予权限:GRANT SELECT_CATALOG_ROLE TO sys;

权限和角色容易被忽略的细节

ORA-01031: insufficient privilegesORA-00942: table or view does not exist 多半不是因为没用 sysdba 登录,而是 SELECT_CATALOG_ROLE 没激活。即使你用 sqlplus / as sysdba 登录,该角色默认也不一定启用。

特别注意:

  1. RAC + PDB 组合场景下,切换容器后角色状态不继承,必须重新验证
  2. inst_num=ALL 是触发全局聚合的唯一开关,漏掉这一步,其余参数再准也没用
  3. 输出路径必须对 oracle 用户可写,否则脚本静默失败,不报错但无文件生成

最常被跳过的动作是:输 ALL 之前没确认当前连接的是目标 PDB,也没查对应 dbid。这两个点一错,生成的报告要么内容错位,要么根本跑不起来。

热门栏目