V$INDEX_USAGE_INFO中找不到监控索引数据的尴尬经历

打印 上一主题 下一主题

主题 876|帖子 876|积分 2643

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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表