【Oracle】数据库hang 诊断

一 什么是数据库hang 

1 用户不能登录数据库

2 数据库不能正常工作

3 select 1 from dual 不出结果

4 不能正常完成建表操作

二 数据库被锁住

   1  一个或多个会话停止工作

三 如果得知数据库hang 或者被锁

   1 测试

   2 用户抱怨

   3 systemstate 或者hanganalze 操作查看被阻塞的会话

   4 一个查询hang 住不动

   5 会话耗费了大量的cpu

   6 ora-60 错误出现

四  上述现象可能会在以下操作之后:

   1 schema 变动

   2 数据库参数变动

   3 应用程序的改动

   4 数据库升级

五  理清 issue 发生的状况,你必须了解如下

   1 受影响的用户

   2 导致问题的事件的发生的顺序

   3 问题是从哪里/如何被发现的

   4 问题的表现

   5 什么正在工作

   6 最希望的或者最能够接受的结果是什么

   7 你做了什么操作来解决这个问题

六 验证工作 

   必须对数据库是否hang 或者lock 进行验证 否则会导致采取错误的动作。也有可能是os 的性能问题导致数据库表现为hang 住的!!
   select 1 from dual;

七 收集数据

  1 使用 LTOM 收集数据

  2 使用 OSW 收集系统性能数据

  3 使用 EM 

八 使用hanganalyze 和systemstate 收集数据

  systemstate的用法http://space.itpub.net/464838/viewspace-664380

  DUMP进程状态可以使用: 
    alter sessions set events 'immediate trace name processstate level ';
  或者使用:
    oradebug setmypid
    oradebug ulimit
    oradebug dump processstate
当诊断数据库挂起时,可以使用DUMP命令转储整个系统状态:
alter sessions set events 'immediate trace name systemstate level ';
或:
oradebug setmypid
oradebug ulimit
oradebug dump systemstate
如果为了获取全面一点的信息,可以使用Level 10。
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug dump systemstate 10
另外如果系统挂起,无法用SQL*Plus连接,从Oracle 10g开始,可以使用sqlplus -prelim选项强制登录,然后即可进行系统状态信息转储:
sqlplus -prelim '/ as sysdba'
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 10

====================================

--for 单实例
SQL>ORADEBUG hanganalyze
--for RAC 实例
SQL>ORADEBUG setmypid
SQL>ORADEBUG setinst all
SQL>ORADEBUG -g def hanganalyze  

注意:如果Level过大的话会产生大量的跟踪文件并影响系统的I/O性能,Oracle建议不要采用3级以上的跟踪。

以sysdba 登录

oradebug setmypid

oradebug unlimit

oradebug -g  all hanganalyze 3

oradebug -g all dump systemstate 266

--等待2min

oradebug -g  all hanganalyze 3

oradebug -g all dump systemstate 266

默认搜集数据的步骤如下:

1 hanhanalyze  level 3

2 systemstate level 266

3 wait 60 sec

4 hanhanalyze  level 3

5 systemstate level 266

对于单实例 trace file 文件在 本地的user_dump_desttination 

对于rac 环境 trace file 文件在每个节点的 backgroup_dump_destination

九 获取v$性能数据

SPOOL v_views.log;

/*set linesize 130

col "Parameter" form. a50

col "Session Value" form. a30

col "Instance Value" form. a30

*/

select a.ksppinm  "Parameter",

       b.ksppstvl "Session Value",

       c.ksppstvl "Instance Value"

  from x$ksppi a, x$ksppcv b, x$ksppsv c

  where a.indx = b.indx

   and a.indx = c.indx

  order by 1 ;

SELECT class , value, name FROM v$sysstat;

SELECT sid , id1, id2, type, lmode, request FROM v$lock;

SELECT l.latch#,

       n.name,

       h.pid,

       l.gets,

       l.misses,

       l.immediate_gets,

       l.immediate_misses,

       l.sleeps

  FROM v$latchname n, v$latchholder h, v$latch l

  WHERE l.latch# = n.latch#

   AND l.addr = h.laddr(+);

SELECT * FROM v$session_wait ORDER BY sid ;

/* repeat last query 3 times - we want to see who's repeatedly waiting*/

SPOOL OFF;

获取了数据之后 就是分析了!!

时间: 2024-09-29 21:40:28

【Oracle】数据库hang 诊断的相关文章

【Oracle】使用hanganalyze 命令分析数据库hang【转】

1. 数据库hang的几种可能性 oracle 死锁或者系统负载非常高比如cpu使用或其他一些锁等待很高都可能导致系统hang住,比如大量的DX锁. 通常来说,我们所指的系统hang住,是指应用无响应,普通的sqlplus几乎无法操作等等. 2. 如何进行hang分析?hang分析有哪些level?如何选择level? hanganalyze有如下几种level: 10     Dump all processes (IGN state) 5      Level 4 + Dump all pr

深入内核:Oracle数据库里SELECT操作Hang解析

崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向"Oracle"社区投稿. 我们都知道在 Oracle 数据库里是"读不阻塞写,写不阻塞读",那么是否可以认为在正常情况下,select 操作是怎样都能执行,始终不会被 hang 住的呢?注意这里提到的是正常情况下,不包括那些由于 latch 被 hold 住.或者 bug 等相关异常导致的 select 操作 hang

Oracle ADDM --dbms_addm执行oracle数据库诊断

Oracle ADDM --dbms_addm执行oracle数据库诊断  >> >> >><>     

Oracle 数据库复制常用脚本

oracle|脚本|数据|数据库 Oracle 数据库复制常用脚本(石骁騑 2001年07月30日 17:30) Oracle的数据复制是一个Oracle数据库产品中比较成熟的一项技术,它是整个分布式计算解决方案的一个重要组成部分.对于具有复制环境的数据库系统,和Oracle DBA一样,同样要有一个人来专门负责维护Oracle的数据复制问题,称之为Oracle Replication Administrator(Oracle复制管理员).本文就Oracle数据复制中复制管理员经常关心的一些关于

Oracle数据库的ORA-00257故障解决过程

概述: Oracle数据库是目前业界最常用的大型数据库系统,我在实际项目中遇到出现ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决.但是我在Oracle 10g上发现,存储空间还有很大,却也报这个错误.原来是Oracle 10g中新的特性,对Flash Recovery的管理导致的. 1.软硬件环境 服务器HP Proliant DL580G4(Intel Xeon 3.16GHz/4G

如何处理Oracle数据库中的坏块问题

oracle|数据|数据库|问题   本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率会越来越大,因此,做为一个DBA,怎么去解决数据库出现的坏块问题就成了一个重要的议题了.   一:什么是数据库的坏块   首先我们来大概看一下数据库块的格式和结构 数据库的数据块有固定的格式和结构,分三层:cache layer,transaction laye

关于Oracle数据库中行迁移/行链接的问题

oracle|链接|数据|数据库|问题 一.行迁移/行链接的介绍 在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row Chaining (行链接)就是其中我们可以尽量避免的引起Oracle数据库性能低下的潜在问题.通过合理的诊断行迁移/行链接,我们可以较大幅度上提高Oracle数据库的性能. 那究竟什么

oracle数据库如何打补丁

给软件打补丁相当于给人打预防针,对系统的稳定运行至关重要.本文详细.系统地介绍了Oracle数据库补丁的分类.安装.管理等问题. 厂商提供给用户的软件补丁的形式多为编译后的库函数,所以安装软件补丁实际上就是把这些库函数拷贝到相应目录,并在需要时进行联接操作.软件公司一般在一段时间后会把针对某一版本的所有补丁进行整理:合并融合,解决冲突,进行整体测试,并使文件拷贝和联接操作自动执行,得到一个软件补丁"包 ".不同的公司使用不同的名称,现在一般计算机用户都熟悉的Windows Servic

Oracle数据库中行迁移/行链接学习(一)什么是行迁移/行链

在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row Chaining (行链接)就是其中我们可以尽量避免的引起Oracle数据库性能低下的潜在问题.通过合理的诊断行迁移/行链接,我们可以较大幅度上提高Oracle数据库的性能. 那究竟什么是行迁移/行链接呢,先让我们从Oracle的block开始谈起.