诊断Oracle数据库Hanging问题
注意:当数据库是集群数据库的时候,如果需要诊断挂起的问题,则需要在每个节点上都执行systemstate dump操作,建议做3次左右,以便能够确定数据库或者进程是否是真的挂起还是激活状态。 对于Oracle 8.0.5.x to 8.1.7.x的版本:
$ svrmgrl
svrmgr> connect internal
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME HANGANALYZE LEVEL
3';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME HANGANALYZE LEVEL
3';
EXIT ... then reconnect
svrmgr>ALTER SESSION SET MAX_DUMP_;
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL
10';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL
10';
wait 90 seconds
svrmgr>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL
10';
对于Oracle 9.2.0.1或者更高的版本:
$ sqlplus /nolog connect / as sysdba oradebug setmypid oradebug unlimit oradebug hanganalyze 3
wait 90 seconds oradebug hanganalyze 3 oradebug dump systemstate 10
wait 90 seconds
oradebug dump systemstate 10
wait 90 seconds
oradebug dump systemstate 10
获取STATPACK的输出报告
对于如何得到和分析statpack的输出报告,可以参考eygle的个人网站上的文章。 获取PROCESSSTATE的dump
9 / 10
诊断Oracle数据库Hanging问题
获取processstate dump,可以使用如下命令,建议执行三遍,将可以在user_dump_dest目录下找到生成的跟踪文件。
$ sqlplus \ oradebug setospid
oradebug unlimit
如果要获取errorstacks dump,可以使用如下命令,建议执行三遍,同样可以在user_dump_dest目录下找到生成的跟踪文件。
$ sqlplus \oradebug setospid
oradebug unlimit oradebug dump errorstack 3
10 / 10