Email: service@parnassusdata.com 7 x 24 online support!
诊断Oracle数据库挂起(HANG)事件
请具体表述问题。并询问用户是否能“解冻”数据库?如何做到的?
1) 使用以下命令生成HANGANALYZE追踪文件 ==>
$ sqlplus "/ as sysdba"
SQL> oradebug hanganalyze 3
... Wait 90 seconds (to 2 minutes) to give time to identify process state changes.
SQL> oradebug hanganalyze 3 (level 4 dumps leaf nodes as well and may be useful, but there is more impact on the system)
使用以下语法在执行簇级HANGANALYZE:
ORADEBUG setmypid
ORADEBUG setinst all
ORADEBUG -g all hanganalyze 3
**请注意: Hanganalyze above level 3仅应该在Oracle支持或开发的相关指导下执行。 parnassusdata.com
2) 在运行Hanganalyze之后,登入一个新SQL会话来生成系统状态转储(dump)文件==>
$ sqlplus "/ as sysdba"
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug dump systemstate 266
... wait 90 seconds
SQL> oradebug dump systemstate 266
... wait 90 seconds
SQL> oradebug dump systemstate 266
Levels 266 and 267 will include short stack information. Level 266 is for single instance and level 267 is for cluster-wide systemstate dumps. See Note:300870.1 on event 10998 for more information.
Level 266和267包含了一些堆信息。Level 266是对单实例的信息转储,而Level 267则是对簇系统systemstate转储。请看Note:300870.1对事件10998了解更多信息。 parnassusdata.com
**请注意,我们同样可以通过使用Hang File Generator (HANGFG) 工具来完成以上1)和2)中使用hanganalyze和systemstate收集信息的操作。HANGFG工具提供了一系列UNIX shell脚本命令来自动化收集和生成hanganalyze和sysemstate追踪文件。在使用HANGFG生成并收集追踪文件时需要考虑到需要在已处于性能退化的系统中进行诊断的影响。由于影响级别作为此工具参数被传给HANGFG,所以用户需要做出决定在启用此工具时,何种级别的影响是可接受的。当用户选择轻度影响或中等影响(选项1 或2)作为参数时, HANGFG工具同样有能力做出调整以适应用户做出的决定。HANGFG是RAC自识别的,并且能在RAC和非RAC环境中运行。请看Note:362094.1 (the HANGFG User Guide)以了解其相关信息。
3) 当hang事件发生后,获取到的Statspack或AWR/ASH(10g/11g)报告是否具有时效性取决于做Statspack快照频繁程度。举个例子,如果你每隔1小时做一次快照,在下一次快照前发生了5分钟的数据库挂起事件。那么快照由于显得时间跨度太长而很难用于分析当时5分钟发生的情况。
AWR/ASH报告上的其他相关信息可以在“数据库性能”章节中找到。
有时在尝试连接数据库时,你的调试会话也会挂起在那里。这时留给你3种可选方法==>
1) 找一个之前已连上的可用会话。
2) 如果你正在使用10g/11g,那么你可以使用-prelim选项来登录数据库:
SQL*Plus. Eg:
sqlplus -prelim / as sysdba
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 266;
3) 使用操作系统调试器来查看运行进程
- 获取服务器oracle先关影子进程ID (请注意并非oracle后台进程,调试后台进程可能导致数据库奔溃)…”ps –ef | grep ora”
- 使用当前系统级调试器(如dbx, adb, gdb等)来获取systemstate:
$ gdb $ORACLE_HOME/bin/oracle <process ID>
(gdb) print ksudss(267)
括号中的数字(267)是你希望转储systemstate的级别.
**对于RAC挂起事件请看“RAC性能”部分中对于racdiag脚本的使用**
通过以下systemstate命令可在同一时点转储所有RAC节点状态:
SQL> oradebug -g all dump systemstate 267
总结,你可以上传以下文件:
- Hanganalyze输出
- Systemstate 转储(dumps)
- hangfiles.out (如果使用 HANGFG工具命令)
- alert.log
- 在一个很短时间内的Statspack/AWR/ASH 报告
- 可用的系统调试监控输出
更多信息,请查阅以下文档:
Ø Note:61552.1 - Diagnosing Database Hanging Issues
Ø Note:118527.1 - How to get a SYSTEMSTATE dump when unable to connect to the database
Ø Note:175006.1 - Steps to generate HANGANALYZE trace files
Ø Note 121779.1 - Taking Systemstate Dumps when You cannot Connect to Oracle
Ø Note:452358.1 - Database Hangs: What to collect for support.
Ø Note:362094.1 - HANFG User Guide