您查看的文章来源于http://www.oklinux.cn
一般情况下,相对于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.
|
共3页: 上一页 1 [2] [3] 下一页 |