如何处理HANG住的DB


如何处理HANG住的DB

1. 生成 systemstate dump:
SQL>sqlplus -prelim / as sysdba
SQL> alter session set max_dump_file_size = unlimited;
SQL> alter session set events 'immediate trace name systemstate level 10';
Wait for some 30 seconds
SQL> alter session set events 'immediate trace name systemstate level 10';
Wait for some 30 seconds
SQL> alter session set events 'immediate trace name systemstate level 10;


2. 开一个新的SESSION:
SQL>sqlplus -prelim / as sysdba
SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump hanganalyze 3
Wait for 30 seconds
SQL>oradebug dump hanganalyze 3
Wait for 30 seconds
SQL>oradebug dump hanganalyze 3

对生成的文件进行分析。

附:system state dump when connection to the instance is not possible
There are several ways of getting more information when connection to an instance is not possible by sqlplus. It is useful to collect as much information about a hang before clearing the instance.

1.)  Using OS debuggers like dbx or gdb.
For example:
$ps -ef |grep $Oracle_SID                                    ## Use PID of any User Process instead of BG Process
$gdb $ORACLE_HOME/bin/oracle <PID_from_earlier_step>
print ksudss(10)
The systemstate dump will be in the bdump or udump depending on the PID chosen
2.) Using the new 10.1 sqlplus -prelim option. 
For example:
export ORACLE_SID=PROD                                ## Replace PROD with the SID you want to trace
sqlplus -prelim / as sysdba
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 10
3.) Finally if either option (1) or (2) is not doable, please remember to take stacks of all the Oracle Background process using pstack or gdb
For example:
script stack.log
pstack <pid_of_pmon>
pstack <pid_of_smon>
4.) Finally you may also want to collect some truss, tusc or strace of sqlplus
Note:  The recommended systemstate level for 10g is 266

相关内容