Database Hang是很严重的系统故障。Oracle数据库是一个极其复杂的整体,多种功能、特性和属性在各种生产条件下运行的时候,经常会暴露出一些问题,由此一些Hang住现象就会出现。
最常见的Hang表现就是不对外服务、不支持连接、服务器资源负载较低。主要的根源在于内存资源、Latch/Lock锁定相互等待、后台进程僵死。发生Hang现象的时候,最简单、常用的处理方式是自认倒霉,关机重启(有时候重启库不支持)。
放任Hang现象是很危险的,主要在于其对于数据库可用性是及其严重的破坏效应。进行Hang分析,定位问题关键、尝试去解决问题其实是非常重要的。
根据Oracle官方分析策略,Hang发生的时候,需要用户将系统多个进程的状态以trace文件的方式Dump出来,发送给官方服务支持进行分析。Hang现象很多时候是不能刻意重现的,发生故障时快速定位问题,将状态迅速导出来是比较关键的。
传统上,我们使用过oradebug的hanganalyze配合dump systemstate将系统内存状态、各个进程情况。这种方法操作起来需要命令行支持,而且生成分析文件分布在多处。基于此,Oracle官方推荐了HangFG(Hang File Generator)来支持自动化Hang分析文件收集。本篇主要介绍HangFG安装和使用方法,留待不时之需。
1、环境说明
笔者使用Oracle 11gR2进行测试,具体版本为11.2.0.4。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production
下载HangFG要从Oracle官方MOS上,对应文章编号: ID 362094.1。下载后的文件是一个压缩格式文件,通过FTP上传到服务器。
[oracle@sicslife upload]$ ls -l
total 2625144
-rw-r--r-- 1 root root 51200 Aug 31 22:26 hangfg.tar
2、HangFG安装使用
解压tar文件,就完成安装过程。
[root@sicslife upload]# tar -xvf hangfg.tar
hangfg/
hangfg/haLevel.sh
hangfg/test_rconnection2.sh
hangfg/hangfg.sh
hangfg/test_rconnection.sh
hangfg/ssLocal.sh
hangfg/README
hangfg/test_connection.sh
hangfg/ss.sh
hangfg/haLocalLevel.sh
hangfg/hq.sh
同其他很多Oracle推出的工具一样,HangFG是一系列bash scripts构成的程序文件。
[root@sicslife upload]# ls -l
total 2625148
drwxr-xr-x 2 oracle oinstall 4096 Oct 25 2012 hangfg
[root@sicslife upload]# cd hangfg
[root@sicslife hangfg]# ls -l
total 72
-rwxr-xr-x 1 oracle oinstall 312 Apr 9 2007 haLevel.sh
-rwxr-xr-x 1 oracle oinstall 305 Apr 9 2007 haLocalLevel.sh
-rwxr-xr-x 1 oracle oinstall 30363 Oct 25 2012 hangfg.sh
-rwxr-xr-x 1 oracle oinstall 366 Apr 9 2007 hq.sh
-rw-r--r-- 1 oracle oinstall 4146 Oct 25 2012 README
-rwxr-xr-x 1 oracle oinstall 279 Oct 25 2012 ssLocal.sh
-rwxr-xr-x 1 oracle oinstall 285 Oct 25 2012 ss.sh
-rwxr-xr-x 1 oracle oinstall 86 Apr 9 2007 test_connection.sh
-rwxr-xr-x 1 oracle oinstall 69 Apr 9 2007 test_rconnection2.sh
-rwxr-xr-x 1 oracle oinstall 58 Apr 9 2007 test_rconnection.sh
调用方法上,hangfg是非常简单的,只包括一个参数作为输入,用于指定不同程度的分析级别。
分析级别参数:
ü 参数值1:对系统最小的影响级别。会持续收集两次level 3的hanganalyze数据,如果系统负载较轻的话,会继续收集一次level 4级别的hanganalyze;
ü 参数值2:系统默认取值。对系统性能有中等程度影响,首先要收集一次level 3的hanganalyze。之后如果系统负载可以接受,会进行两次Level 4级别的hanganalyze操作。如果系统负载过大,会进行一次Level 3级别的hanganalyze操作。系统也会收集一次258级别的系统状态;
ü 参数值3:连续进行两次Level 4的hanganalyze操作,同时进行一次258级别的系统状态收集;
如果在RAC环境下,hangfg可以自动对所有节点进行收集。
执行hangfg方法。
[root@sicslife hangfg]# su - oracle
[oracle@sicslife ~]$ cd /upload/hangfg
[oracle@sicslife hangfg]$ ./hangfg.sh 2
Starting Hang File Generator V 1.2.0 on Mon Aug 31 23:14:23 CST 2015
HANGFG - Written by Carl Davis, Center of Expertise, Oracle Corporation
rm: cannot remove `*.tmp': No such file or directory
Searching for udump/bdump...
/u01/app/oracle/diag/rdbms/sicsdb/sicsdb/trace
/u01/app/oracle/diag/rdbms/sicsdb/sicsdb/trace
Database connection established.
Skipping remote node file collection...
Treating collection as single node (non RAC).
Please wait. File operations in progress...
Processing Medium Impact Hang Trace Collection...
Starting HangAnalyze Trace. Please Wait...
Statement processed.
Statement processed.
Hang Analysis in /u01/app/oracle/diag/rdbms/sicsdb/sicsdb/trace/sicsdb_ora_19908.trc
HA Filename=/u01/app/oracle/diag/rdbms/sicsdb/sicsdb/trace/sicsdb_ora_19908.trc
blockers=
Blocker info missing. Cannot continue with level 4 dump.
Starting HangAnalyze Trace. Please Wait...
Statement processed.
Statement processed.
Hang Analysis in /u01/app/oracle/diag/rdbms/sicsdb/sicsdb/trace/sicsdb_ora_19923.trc
Starting Systemstate Trace. Please Wait...
SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 31 23:16:34 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> Connected.
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Statement processed.
SQL> Statement processed.
SQL> Statement processed.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Copying files to hangFileArchive...
Creating tarball of all hangfiles...
hangFileArchive/
hangFileArchive/sicsdb_ora_19980.trm
hangFileArchive/sicsdb_ora_19923.trc
hangFileArchive/sicsdb_dbrm_17833.trm
hangFileArchive/alert_sicsdb.log
hangFileArchive/sicsdb_ora_19980.trc
hangFileArchive/sicsdb_ora_19923.trm
hangFileArchive/sicsdb_ora_19908.trc
hangFileArchive/hangfiles.out
hangFileArchive/sicsdb_dbrm_17833.trc
hangFileArchive/sicsdb_ora_19908.trm
./hangfg.sh[1036]: compress: not found [No such file or directory]
Program hangfg terminated successfully.
More information contained in hangfg.log
3、结果解析
hangFG操作之后,Oracle实例在对应的dump目录中生成若干trc文件。重要的是,工具将数据文件收集在当前目录下。
[oracle@sicslife hangfg]$ ls -l
total 1192
-rw-r--r-- 1 oracle oinstall 0 Aug 31 23:14 conn.test
-rwxr-xr-x 1 oracle oinstall 312 Apr 9 2007 haLevel.sh
-rwxr-xr-x 1 oracle oinstall 305 Apr 9 2007 haLocalLevel.sh
-rw-r--r-- 1 oracle oinstall 127 Aug 31 23:16 hanganalyze.tmp
-rw-r--r-- 1 oracle oinstall 6642 Aug 31 23:16 hangfg.log
-rwxr-xr-x 1 oracle oinstall 30359 Aug 31 23:11 hangfg.sh
drwxr-xr-x 2 oracle oinstall 4096 Aug 31 23:16 hangFileArchive
-rw-r--r-- 1 oracle oinstall 1598 Aug 31 23:16 hangfiles.out
-rw-r--r-- 1 oracle oinstall 1116160 Aug 31 23:16 hfiles.tar
-rwxr-xr-x 1 oracle oinstall 366 Apr 9 2007 hq.sh
-rw-r--r-- 1 oracle oinstall 402 Aug 31 23:14 hq.tmp
-rw-r--r-- 1 oracle oinstall 1220 Aug 31 23:16 localhangfiles.tmp
-rw-r--r-- 1 oracle oinstall 4146 Oct 25 2012 README
-rwxr-xr-x 1 oracle oinstall 279 Oct 25 2012 ssLocal.sh
-rwxr-xr-x 1 oracle oinstall 285 Oct 25 2012 ss.sh
-rwxr-xr-x 1 oracle oinstall 82 Aug 31 23:12 test_connection.sh
-rwxr-xr-x 1 oracle oinstall 65 Aug 31 23:12 test_rconnection2.sh
-rwxr-xr-x 1 oracle oinstall 54 Aug 31 23:12 test_rconnection.sh
在目录hangFileArchive中,收集文件可以直接找到。
[oracle@sicslife hangfg]$ cd hangFileArchive/
[oracle@sicslife hangFileArchive]$ ls -l
total 1104
-rw-r----- 1 oracle oinstall 91177 Aug 31 23:16 alert_sicsdb.log
-rw-r--r-- 1 oracle oinstall 1598 Aug 31 23:16 hangfiles.out
-rw-r----- 1 oracle oinstall 17963 Aug 31 23:16 sicsdb_dbrm_17833.trc
-rw-r----- 1 oracle oinstall 550 Aug 31 23:16 sicsdb_dbrm_17833.trm
-rw-r----- 1 oracle oinstall 3224 Aug 31 23:16 sicsdb_ora_19908.trc
-rw-r----- 1 oracle oinstall 113 Aug 31 23:16 sicsdb_ora_19908.trm
-rw-r----- 1 oracle oinstall 3224 Aug 31 23:16 sicsdb_ora_19923.trc
-rw-r----- 1 oracle oinstall 113 Aug 31 23:16 sicsdb_ora_19923.trm
-rw-r----- 1 oracle oinstall 899566 Aug 31 23:16 sicsdb_ora_19980.trc
-rw-r----- 1 oracle oinstall 86711 Aug 31 23:16 sicsdb_ora_19980.trm
同时,压缩文件hfiles.tar。
-rw-r--r-- 1 oracle oinstall 1116160 Aug 31 23:16 hfiles.tar
4、结论
HangFG是一个快速进行hanganalyze的有用工具。借助HangFG,可以最快的进行数据收集工作,并且将其提交到官方支持。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-1787686/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-1787686/