首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 开发技术 >> 正文

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

  至此,数据库会挂起,并且不会出现任何提示,在alert.log文件中,我们可以看到:

[oracle@jumper bdump]$ tail -f alert_conner.log 
Completed: ALTER DATABASE   MOUNT
Sat Dec  4 10:09:49 2004
ALTER DATABASE OPEN
Sat Dec  4 10:09:49 2004LGWR: Primary database is in CLUSTER CONSISTENT mode
Thread 1 opened at log sequence 54  
Current log# 2 seq# 54 mem# 0: /opt/oracle/oradata/conner/redo02.log
Successful open of redo thread 1.
Sat Dec  4 10:09:49 2004
SMON: enabling cache recovery
Sat Dec  4 10:10:33 2004
Restarting 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)
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_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#  a
nd 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_MONITORIN
----------- -------------------------- -------------------
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

  注释:本文仅做参考示例,具体操作对数据库没有潜在的影响,但请大家根据自己的实际情况谨慎使用。

上一页  [1] [2] 

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航