如何排查开启索引监控后v$object_usage视图无对应记录的问题
Oracle索引监控开启后v$object_usage返回空排查方案
- 确认查询账号与视图范围
v$object_usage仅展示当前登录用户名下的索引监控数据,若开启监控的索引归属REPORTschema,使用其他账号(如sys、system等管理员账号)直接查询v$object_usage会返回空结果。
解决方案:- 切换到
REPORT账号后重新执行查询语句 - 持DBA权限的账号可查询权限更高的
dba_object_usage视图,执行语句如下:
SELECT index_name,table_name,monitoring,used,start_monitoring,end_monitoring FROM dba_object_usage WHERE owner = 'REPORT' AND index_name = 'DY_SUM_DLY_SCH_TRN_DIV'; - 切换到
- 确认索引有效性与监控开启状态
执行以下语句确认目标索引存在且状态正常,避免拼写错误、索引已被删除/标记为不可用导致监控未实际生效:
若查询返回索引状态为SELECT owner, index_name, table_name, status FROM all_indexes WHERE owner = 'REPORT' AND index_name = 'DY_SUM_DLY_SCH_TRN_DIV';VALID,可重新执行监控开启语句确认生效:alter index REPORT.DY_SUM_DLY_SCH_TRN_DIV monitoring usage; - 确认数据库环境适配性
- 索引监控功能仅在Oracle 10g及以上版本支持,更低版本数据库无v$object_usage视图,返回为空属于预期表现
- 12c及以上多租户架构下,需确认当前登录的是索引所属的PDB容器,在CDB根容器下查询PDB级的索引监控数据也会返回空
- 确认无监控记录清空操作
以下操作会清空已有的索引监控记录:- 执行
alter index REPORT.DY_SUM_DLY_SCH_TRN_DIV nomonitoring usage关闭监控 - 索引重建、删除后重建操作
- 数据库实例重启
若开启监控后执行过上述操作,需要重新开启监控后再查询。
- 执行
内容的提问来源于stack exchange,提问作者radha
相关产品推荐
相关产品推荐

