必须用 awrgrpt.sql 且 inst_num 输入 all 才能生成 rac 全局报告,因 awrrpt.sql 底层调用 awr_report_html 仅支持单实例,而 awrgrpt.sql 在 inst_num=all 时才调用 awr_global_report_html。

必须用 awrgrpt.sql,且在 inst_num 提示处输入 ALL(全大写),否则你拿到的只是单节点报告,不是全局的。
为什么 awrrpt.sql 生成不了 RAC 全局报告
awrrpt.sql 调用的是 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML,这个函数只接受单个 inst_num 参数,底层不支持跨实例聚合。RAC 下它会静默忽略其他节点——不报错、不提醒、也不显示 Global Cache 或 Interconnect 相关指标。常见现象包括:
- Top SQL 列表里同一条语句只出现一次,实际它在多个节点上都执行过
-
Buffer Nowait %显示 99.99%,但集群级缓存争用根本没体现出来 - 报告里压根没有 “Global Cache Blocks Received” 这类关键 RAC 指标
执行 awrgrpt.sql 时的关键输入点
进 SQL*Plus 后运行:@?/rdbms/admin/awrgrpt.sql,脚本会依次提示:
-
Enter value for report_type:填html(推荐)或text -
Enter value for dbid:输入数据库唯一 ID,可查:select dbid from v$database; -
Enter value for inst_num:必须填ALL(全大写) —— 留空 = 当前连接实例;填数字 = 强制单实例;只有ALL才触发DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML -
Enter value for num_days:建议填1或7,让脚本自动列出最近可用快照范围 -
Enter value for begin_snap:和end_snap:选时间跨度合理的两个快照 ID(建议间隔 ≥30 分钟)
权限和路径容易被忽略的细节
没权限会直接卡在第一步,报 ORA-00942: table or view does not exist(错在访问 WRM$_DATABASE_INSTANCE):
- 当前用户必须有
SELECT_CATALOG_ROLE,不能只靠DBA角色 -
@?/rdbms/admin/awrgrpt.sql中的?是$ORACLE_HOME的简写,确保环境变量已设好 - RAC 多节点下,
awrgrpt.sql从任意节点执行都行,只要连的是该集群的数据库(不是某单实例)
真正麻烦的不是步骤,而是误以为自己在看全局报告——inst_num 输错、脚本选错、权限漏授,三者任一出问题,输出内容就只剩一个节点的“局部真相”。











