使用 awrgrpt.sql 生成全局 RAC AWR 报告需在提示 Enter value for inst_num: 时输入 ALL(全大写),否则仅生成当前实例报告;awrrpt.sql 不支持多实例,无法显示 Global Cache 等 RAC 特有指标。
怎么用 awrgrpt.sql 生成全局 RAC AWR 报告
全局 rac awr 报告不是默认行为,必须显式指定所有实例;否则你拿到的只是当前连接节点的单实例报告,哪怕数据库是 rac。
实操上,进 SQL*Plus 后运行 @?/rdbms/admin/awrgrpt.sql(注意是 awrgrpt.sql,不是 awrrpt.sql),它会引导你选「Database ID」→「Instance Number」→ 这里关键来了:当提示 Enter value for inst_num: 时,输入 ALL(全大写),而不是留空或填某个数字。
- 留空 = 默认只取当前实例(
inst_num由连接时的ORACLE_SID决定) - 填
1或2= 强制单节点,即使你连的是节点 1,填 2 也会报ERROR: Instance number 2 is not valid for this database -
ALL是唯一触发跨实例数据聚合的开关,底层调用DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML
为什么 awrrpt.sql 不能生成全局报告
awrrpt.sql 是单实例设计,它调用的是 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML,这个函数只接受一个 inst_num 参数,不支持多实例上下文。RAC 下强行用它,结果就是:你以为在看集群负载,实际只看到自己连的那个节点的 CPU、IO、SQL 统计。
常见错误现象:Top SQL 列表里某条语句出现多次(不同 inst_id),但报告里只显示其中一条;Instance Efficiency Percentages 指标值异常高(比如 Buffer Nowait % 99.99%),其实是单节点缓存命中掩盖了跨实例争用。
- RAC 全局指标(如
Global Cache Blocks Received)只出现在awrgrpt生成的报告中 -
awrrpt.sql的输出里根本不会出现Global Cache或Interconnect相关章节 - Oracle 12c 及以后版本,
awrrpt.sql连 RAC 时甚至会静默忽略其他实例,不报错也不提醒
生成 HTML 报告时 awrgrpt.sql 和 awrgdrpt.sql 怎么选
两者都支持全局,但用途不同:awrgrpt.sql 是交互式、按时间范围生成(比如最近 1 小时);awrgdrpt.sql 是非交互、按快照 ID 区间生成(比如 snapshot 1000–1050),适合自动化脚本调用。
- 日常诊断优先用
awrgrpt.sql:响应快,能自动推荐合理时间窗口 - 做历史对比或巡检时用
awrgdrpt.sql:避免因时间偏移导致快照不一致(例如节点 1 的 snap 1000 在 10:00:01,节点 2 的 snap 1000 在 10:00:03) - 两个脚本都要求当前用户有
SELECT_CATALOG_ROLE,否则报ORA-00942: table or view does not exist(错在访问WRM$_DATABASE_INSTANCE)
RAC AWR 报告里哪些字段容易被误读
全局报告把多个实例数据揉在一起,但部分统计项仍是“单实例视角”,直接相加会失真。最典型的是 DB Time 和 DB CPU:报告底部的 Summary 里这两个值是各节点之和,但它们本身已是并发累加值,不能简单理解为“整个集群耗时”。
-
DB Time全局汇总值 > 单节点最大值 × 节点数 —— 正常,说明存在并行执行或跨实例调用 -
Global Cache Cr Block Received高 ≠ 网络瓶颈,可能是某节点频繁请求另一节点的 block(查Top Events里的gc cr block busy) -
Instance Startup Time在 Summary 里只显示第一个实例的启动时间,其他节点启动时间需翻到每个 Instance Section 查看
真正需要盯住的是「Global Cache and Enqueue Statistics」和「Interconnect Report」章节,它们才是 RAC 特有的压力指纹。别的都能凑合看,这两块漏了,等于没看 RAC。










