分类: Oracle
2008-04-01 20:30:42
来源:赛迪网 作者:31619 |
一般情况下,相对于DML操作,索引对于数据库是一个性能的负担。假如索引没有被合理有效的使用,那么它的存在性就必须重新考虑。
1. Oracle9i开始,Oracle允许监视索引的使用:
2.Oracle9i的"Bug"
9205之前,假如你不慎监控了SYS.I_OBJAUTH1索引,而且不幸在重起数据库之前没有停止它,那么你的数据库将会无法启动,并且不会给出任何的错误信息。
下面的这条语句可以很容易的再现这个问题:
假如有了足够好的备份,我们可以尝试一下:
注意:(请不要拿你现在的生产数据库来进行测试)。
|
至此,数据库会挂起,并且不会出现任何提示,在alert
此时数据库则会停在此处,如果没有发现这个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。
3.在某些特殊的情况下,你可能需要清除这个v$object_usage视图中的信息。
Oracle的说法是,在下一次收集该对象的索引使用情况时会自动覆盖上一次的信息,不提供清除手段.
如果我们细心揣摩,可以发现v$object_usage是基于以下基表建立起来的:
至此你可以注意到v$object_usage关键信息来源于OBJECT_USAGE表。
除此之外我们可以注意一下,此处v$object_usage的查询基于userenv('SCHEMAID')建立.
所以以不同用户登录,你是无法看到其他用户的索引监视信息的,即使是DBA,但是可以从object_usage表中得到。
实际上我们清除了object_usage表的记录,实际上也就清空了v$object_usage的信息。
注释:本文仅做参考示例,具体操作对数据库没有潜在的影响,但请大家根据自己的实际情况谨慎使用。