在一个Oracle 12.1实例中,想监控一个表的索引使用情况,在system用户下执行了下面脚本以及输出的监控索引脚本后,发现V$OBJECT_USAGE下一直没有对应的记录(在system用户下查询)- SELECT
- 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' MONITORING USAGE;'
- FROM
- DBA_INDEXES
- WHERE
- INDEX_TYPE != 'LOB' AND OWNER NOT IN ('SYS', 'SYSMAN', 'SYSTEM', 'MDSYS', 'WMSYS', 'TSMSYS', 'DBSNMP', 'OUTLN')
- AND OWNER=UPPER('&OWNER')
- AND TABLE_NAME=UPPER('&TABLE_NAME')
- ;
复制代码 许久没有使用这个功能了,还以为我遇到bug了,一通折腾下来,居然是时间太久了,自己也忘记了一些细节:V$OBJECT_USAGE只能查看/显示当前用户下被监控的索引使用统计信息。即使sys、system用户也不能查看其它用户的数据。这个跟视图V$OBJECT_USAGE的定义有关,如下所示,它在查询条件中过滤了记录集,只显示当前用户下的记录。- create or replace view V$OBJECT_USAGE
- (INDEX_NAME,
- TABLE_NAME,
- MONITORING,
- USED,
- START_MONITORING,
- END_MONITORING)
- as
- select io.name, t.name,
- decode(bitand(i.flags, 65536), 0, 'NO', 'YES'),
- decode(bitand(ou.flags, 1), 0, 'NO', 'YES'),
- ou.start_monitoring,
- ou.end_monitoring
- from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou
- where io.owner# = userenv('SCHEMAID')
- and i.obj# = ou.obj#
- and io.obj# = ou.obj#
- and t.obj# = i.bo#
- /
复制代码 从Oracle 12.2开始,Oracle默认会监控索引的使用情况,而不用特意去设置监控索引使用情况,我们只需从DBA_INDEX_USAGE查看索引的使用情况,而自己的忘性也越来越大,真是廉颇老矣尚能饭否。悲催啊!
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |