index monitoring

今天在查看索引监控情况的时候发现v$object_usage视图其实是个比较特殊的v$视图,因为它只能查看本用户下索引的情况,即使是SYS用户也查不到其他用户的情况,该视图的创建语句如下:

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#;

可以看到确实只能查到自己拥有的索引情况。

如果要查看所有的索引监控情况,可以创建如下视图:

create or replace view sys.v$all_object_usage

(owner,index_name,table_name,monitoring,used,start_monitoring,end_monitoring)

as

select u.name, 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, sys.user$ u

where i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

and io.owner# = u.user#;

另外一个注意的地方是,被开启监控的索引如果rebuild,监控会停止,并且是否使用会变成NO,以下为实验过程:

[@more@]

SCOTT@ora10g>create table idx_mon as select * from emp;

表已创建。

SCOTT@ora10g>create index empno_idx on idx_mon(empno);

索引已创建。

SCOTT@ora10g>alter index empno_idx monitoring usage;

索引已更改。

SCOTT@ora10g>select * from v$object_usage;

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING

------------------------------ ------------------------------ --- --- ------------------- -------------------

EMPNO_IDX IDX_MON YES NO 12/17/2009 15:59:33

SCOTT@ora10g>conn / as sysdba

已连接。

SYS@ora10g>select * from v$object_usage; sys无法使用v$object_usage查看scott的索引监控

未选定行

SYS@ora10g>conn scott/tiger

已连接。

SCOTT@ora10g>alter index empno_idx rebuild;

索引已更改。

SCOTT@ora10g>select * from v$object_usage;

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING

------------------------------ ------------------------------ --- --- ------------------- -------------------

EMPNO_IDX IDX_MON NO YES 12/17/2009 15:59:33

SCOTT@ora10g>drop index empno_idx;

索引已删除。

SCOTT@ora10g>select * from v$object_usage; 索引drop后信息删除

未选定行

oracle9iBUG

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

alter index sys.i_objauth1 monitoring usage;

索引监控开启命令:

alter index name_idx monitoring usage;

索引监控关闭命令:

alter index name_idx nomonitoring usage;

清理v$object_usage视图:

如果想清理v$object_usage只需清理object_usage即可,但是生产库请慎用!

最后附上开启某schema下所有索引监控的脚本:

set pages 999

set heading off

spool run_idx_mon.sql

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

from dba_indexes

where owner = 'SCOTT';

spool off

@run_idx_mon

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10176825/viewspace-1029766/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10176825/viewspace-1029766/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值