分享
 
 
 

Oracle9i中如何监视索引并清除监视信息

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

对于DML操作来说,索引对于数据库是一个性能负担.如果索引没有被有效的使用,那么其存在性就值得从新考虑.

1. 从Oracle9i开始,Oracle允许你监视索引的使用:

SQL connect scott/tiger@conner

Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0

Connected as scott

SQL select index_name from user_indexes;

INDEX_NAME

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

PK_DEPT

PK_EMP

开始监视pk_dept索引:

SQL alter index pk_dept monitoring usage;

Index altered

在此过程中,如果查询使用索引,将会记录下来:

SQL select * from dept where deptno=10;

DEPTNO DNAME

LOC

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

10 ACCOUNTING

NEW YORK

停止监视:

SQL alter index pk_dept nomonitoring usage;

Index altered

查询索引使用情况,YES表示在监视过程中索引被使用到:

SQL select * from v$object_usage;

INDEX_NAME

TABLE_NAME

MONITORING USED START_MONITORING

END_MONITORING

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

PK_DEPT

DEPT

NO

YES

10/28/2004 10:55:19 10/28/2004 10:55:47

SQL

2.Oracle9i的Bug

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

不会给出任何错误信息。

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

'ALTER INDEX SYS.I_OBJAUTH1 MONITORING USAGE'

如果你有了足够好的备份(严重警告,请不要拿你的生产数据库进行测试),你可以尝试一下:

[oracle@jumper oradata]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sat Dec 4 10:09:30 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

With the Partitioning option

JServer Release 9.2.0.4.0 - Production

SQL alter index SYS.I_OBJAUTH1 monitoring usage ;

Index altered.

SQL shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL startup

ORACLE instance started.

Total System Global Area 80811208 bytes

Fixed Size 451784 bytes

Variable Size 37748736 bytes

Database Buffers 41943040 bytes

Redo Buffers 667648 bytes

Database mounted.

此时,数据库挂起,而且不会有任何提示,在alert<sid.log文件中,你可以看到:

[oracle@jumper bdump]$ tail -f alert_conner.log Completed: ALTER DATABASE

MOUNTSat Dec

4 10:09:49 2004ALTER DATABASE OPENSat Dec

4 10:09:49 2004LGWR: Primary database is in CLUSTER CONSISTENT modeThread 1 opened at log sequence 54

Current log# 2 seq# 54 mem# 0: /opt/oracle/oradata/conner/redo02.logSuccessful open of redo thread 1.Sat Dec

4 10:09:49 2004SMON: enabling cache recoverySat Dec

4 10:10:33 2004Restarting dead background process QMN0QMN0 started with pid=9

然后数据库将会停在此处。

如果不知道此bug存在,你可能会一筹莫展的。

现在你能做的就是从备份中恢复,或者升级到9.2.0.5。

Oracle已经Release了这个Bug,你可以参考Metalink:Note:2934068.8,Oracle声明在9.2.0.5 (Server Patch Set)和 10g Production Base Release中fixed了这个Bug。

[oracle@jumper oradata]$ rm -rf conner[oracle@jumper oradata]$ cp -R connerbak/ conner[oracle@jumper oradata]$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.4.0 - Production on Sat Dec 4 10:19:07 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

SQL startup

ORACLE instance started.

Total System Global Area 80811208 bytes

Fixed Size 451784 bytes

Variable Size 37748736 bytes

Database Buffers 41943040 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL

3. 在特殊的情况下,你可能需要清除这个v$object_usage视图中的信息.

Oracle的说法是,在下一次收集该对象的索引使用情况时会自动覆盖上一次的信息,不提供清除手段.

稍微研究了一下.

v$object_usage是基于以下基表建立起来的:

create or replace view v$object_usage(index_name, table_name, monitoring, used, start_monitoring, end_monitoring)asselect 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_monitoringfrom sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ouwhere 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表中得到.

SQL select * from v$object_usage;

INDEX_NAME

TABLE_NAME

MON USE START_MONITORING

END_MONITORING

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

PK_DEPT

DEPT

NO

YES 10/28/2004 10:55:19 10/28/2004 10:55:47

SQL select * from object_usage;

select * from object_usage

*

ERROR at line 1:

ORA-00942: table or view does not exist

SQL connect /as sysdba

Connected.

SQL /

OBJ#

FLAGS START_MONITORING

END_MONITORING

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

6288

1 10/28/2004 10:55:19 10/28/2004 10:55:47

实际上我们清除了object_usage表的记录,实际上也就清空了v$object_usage的信息.

SQL delete from object_usage;

1 row deleted.

SQL commit;

Commit complete.

SQL select * from v$object_usage;

no rows selected

此操作对数据库没有潜在的影响,但是请谨慎使用.作为实验目的提供.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有