另一篇 Oracle索引监控

昨天用脚本生成一堆索引 监控语句

select'alter index '||index_name||' monitoring usage;'
from user_indexes;

alter index IX_BASE_PROUSER_USER monitoring usage;
alter index IX_BASE_PROUSER_LOWEX monitoring usage;
alter index IX_BASE_PROUSER_SOURCE monitoring usage;
alter index IX_BASESUCCPROUSE_ENDDATE monitoring usage;
alter index IX_BASE_PROUSER_YEARMONTH monitoring usage;
alter index IX_BASE_PROUSER_YEARWEEK monitoring usage;
alter index IX_BASE_PROUSER_PROID monitoring usage;
alter index IX_VIP_TRADEDETAIL_NAMEADDTIME monitoring usage;

然后在pl/sql developer 的 command 窗口执行成功

今天凌晨有15个过程在跑。上班后用SYS账号查看

select * from V$OBJECT_USAGE

结果没没有记录


为此专门写个查询去使用 索引 IX_VIP_TRADEDETAIL_NAMEADDTIME。可后果依旧没有记录。

最后从网上扣了这段代码过来

 select object_owner, object_name, options, count(*)
 from  v$sql_plan
where operation='INDEX'
 and  object_owner='BI'
 group by object_owner, object_name, operation, options
 order by count(*) desc;

原因:是用SYS账号是看不到BI账号的索引监控情况的

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#

注意到v$object_usage关键信息来源于OBJECT_USAGE表.
另外我们可以注意一下,此处v$object_usage的查询基于userenv('SCHEMAID')建立.
所以以不同用户登录,你是无法看到其他用户的索引监视信息的,即使是dba,但是可以从object_usage表中得到.

在9205之前,如果你不慎监控了SYS.I_OBJAUTH1索引,并且不幸在重起数据库之前没有停止它,那么你的数据库将会无法启动,并且
不会给出任何错误信息。

以下这条简单的语句可以轻易再现这个问题:

'ALTER INDEX SYS.I_OBJAUTH1 MONITORING USAGE'


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值