系统HANG住了,怎么办?

如果系统HANG住了,这个时候做一个SYSTEM STATE DUMP,对于分析HANG的原因十分重要。但是很多情况下,系统HANG住了就无法登录,那么如何进行分析呢?

METALINK DOC :359536.1提供了一些好的办法,在这里和大家共享:

支持的数据库版本:9.2.0.1-10.2

平台(部分是UNIX平台,部分适用于所有平台)

1、10G以前,使用DBX,GDB之类的工具:

  找到一个前台进程的PID(ps -ef|grep LOCAL),然后用gdb $ORACLE_HOME/bin/oracle进行跟踪

 oracle@gurufl02:~> ps -ef|grep LOCAL
oracle   26358 26357  0 09:52 ?        00:00:00 oracleora9 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   27848 27810  0 10:41 pts/3    00:00:00 grep LOCAL
oracle@gurufl02:~> gdb $ORACLE_HOME/bin/oracle 26358

然后执行:print ksudss(10)
(gdb) print ksudss(10)
[Switching to Thread 4154533552 (LWP 26358)]
warning: Unable to restore previously selected frame.
$1 = 181773020
Current language:  auto; currently asm

这个时候在UDUMP或者BDUMP下会生成一个TRACE文件。里面包含SYSTEM STATE DUMP

除了通过print ksudss(10)进行systemstate dump,还可以进行下面的dump

  print ksdhng(3,1,0) 相当于oradebug hanganalyze 3

  print ksudps(10) 相当于oradebug dump processstate 10

  print curdmp() 相当于oradebug call curdmp(也就是oradebug dump cursordump)

  print ksdtrc(4) 相当于oradebug dump events 4(这里参数表示level,1–session,2–process,4–system)

  print ksdsel(10046,12) –相当于为attach的进程设置10046事件level 12

  print skdxipc() –相当于oradebug ipc

  print skdxprst() –相当于oradebug procstat

  当然如果能用oradebug,就应该使用oradebug,毕竟方便得多,也更安全。

2、10G下sqlplus -prelim

如果10G,可以使用sqlplus -prelim选项强制登录

export ORACLE_SID=ora9                              
sqlplus -prelim '/ as sysdba'
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 10

3、如果上述都不行,可以使用pstack把堆栈信息取出来,另外也可以使用truss, tusc 之类的工具看看到底在等什么

数据库HANG住是计较头痛的事情,如何找到HANG住的原因,是DBA必须面临的课题。当数据库HANG住的时候,大多数DBA往往是通过V$SESSION_WAIT视图来进行分析。实际上Oracle有一个十分有效的工具----hanganalyze。HANGANALYZE可以十分清晰的将HANG住的信息告诉DBA,便于DBA进行进一步分析。

Hanganalyze是从Oracle 8i r2(8.1.6)开始提供的,其用法十分简单:

ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level ';

或者

ORADEBUG hanganalyze

比如:

sql>oradebug setmypid;

sql>oradebug hanganalyze 3;

对于

      10     Dump all processes (IGN state)
      5      Level 4 + Dump all processes involved in wait chains (NLEAF state)
      4      Level 3 + Dump leaf nodes (blockers) in wait chains (LEAF,LEAF_NW,IGN_DMP state)
      3      Level 2 + Dump only processes thought to be in a hang (IN_HANG state)
    1-2    Only HANGANALYZE output, no process dump at all


你可能感兴趣的:(SQL,oracle,session,system,数据库,events,工具)