ADG备库无法直接生成反映自身负载的AWR报告,因其默认不采集本地快照,需启用RMF框架并注册拓扑后,由主库触发备库远程采样,再通过远程数据库类型生成报告。
adg备库不能直接用默认方式生成反映自身负载的awr报告——必须启用远程管理框架(rmf)并注册备库到主库拓扑,否则你看到的只是主库的快照数据,不是备库的真实性能。
为什么直接在备库跑 awrrpt.sql 会失效
备库默认不采集本地 AWR 快照,@?/rdbms/admin/awrrpt.sql 脚本执行时会报 ORA-13502: cannot create awr snapshot on a standby database。这不是权限问题,而是 Oracle 的硬限制:19c 及以前版本中,备库的 AWR 数据源只能来自主库归档日志里的同步信息,它本身不产生独立快照。
即使你设了 STATISTICS_LEVEL = ALL,也只影响部分内存视图(如 V$SESSION_EVENT),但 DBA_HIST_* 表仍依赖主库快照 ID,查出来的仍是主库视角。
- 备库上执行
SELECT COUNT(*) FROM DBA_HIST_SNAPSHOT返回非零值?那只是主库同步过来的历史快照,不是备库自己采的 - 用主库快照 ID 在备库生成报告,得到的是“主库当时干了什么”,不是“备库当时扛住了多少只读请求”
-
V$ACTIVE_SESSION_HISTORY在备库有数据,但DBA_HIST_ACTIVE_SESS_HISTORY有 2–10 分钟延迟,且采样率受_ash_disk_filter_ratio控制(默认 0.5)
必须启用 RMF 框架才能生成真正属于备库的 AWR 报告
从 12.2 开始,Oracle 提供了 Remote Management Framework(RMF)机制,允许主库远程调度备库采集 AWR 快照。这需要显式配置,不是开个参数就自动生效。
关键步骤顺序不能错:
- 在主库解锁
SYS$UMF用户:ALTER USER sys$umf IDENTIFIED BY yourpwd ACCOUNT UNLOCK - 主库和备库双向建
DATABASE LINK,都用SYS$UMF连接对方(注意:备库上连主库的 link 会报ORA-16000,这是正常现象,只要主库能连备库即可) - 主库执行:
ALTER SYSTEM SET "_umf_remote_enabled" = TRUE SCOPE=BOTH - 主库调用
DBMS_UMF.CONFIGURE_TOPOLOGY创建拓扑,再用DBMS_UMF.REGISTER_DATABASE注册备库(db_unique_name必须一致) - 最后在主库执行
DBMS_UMF.CREATE_REMOTE_SNAPSHOT,触发备库本地采集
生成报告时,仍用 @?/rdbms/admin/awrrpt.sql,但要选 “Remote Database” 类型,并指定备库的 DBID 和 INSTANCE_NUMBER —— 脚本会自动拉取刚创建的远程快照。
备库只读慢,别急着看 SQL,先盯这三个等待事件
ADG 备库性能差,80% 以上和以下三类等待强相关,它们比 SQL 执行计划更优先排查:
-
read by other session:热块争用,常见于序列号表、状态位更新频繁但备库未关DB_BLOCK_CHECKING(默认ON,加重 CPU 和 IO) -
log file sync出现在备库等待列表里?说明有写操作漏到了备库(比如误启用了 ADG DML 功能,或 PDB 下本地 UNDO 配置错误) -
gc cr block busy或gc current block 2-way:RAC 主库环境特有,出现即表明应用连接没走备库服务名,实际连到了主库某个节点
查法统一用:SELECT EVENT, TOTAL_WAITS, TIME_WAITED FROM V$SESSION_EVENT WHERE EVENT IN ('read by other session', 'log file sync', 'gc cr block busy'); —— 不要依赖 AWR Top 5 Events,因为默认快照不含备库真实负载。
容易被忽略的细节:PDB 和快照时间窗口
RMF 机制目前不支持 PDB 级别的 AWR 报告,所有采集都是 CDB 层级;另外,远程快照不是实时触发的,CREATE_REMOTE_SNAPSHOT 后需等至少 1 分钟,再查 DBA_HIST_SNAPSHOT@db_link_to_standby 确认 SNAP_ID 已生成,否则报告脚本会找不到数据源。











