系統HANG住了,怎麼辦?

xz43發表於2010-12-22

如果系統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 進行跟蹤

 :~> 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
:~> 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

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-682423/,如需轉載,請註明出處,否則將追究法律責任。

相關文章