问题: DB2在使用过程中经常会遇到HANG死,本文旨在探讨如果整个库/DB2都HANG死的时候,应该收什么数据,如何处理,以便事后分析HANG住的原因。
1.) 最简单的命令是db2fodc -hang,是比较推荐的做法,优点是它收集的信息比较全,缺点是用的时间比较长。命令如下,
db2fodc -hang full -member all
或者
db2fodc -hang basic -member all
两者区别如下
basic The basic collection mode is run, without user interaction. Less data is collected than in the full mode, but with less resources used. full The full collection mode is run, without user interaction. This option requires more resources and time to run than basic collection mode, but gathers more data.更多资料,请参考信息中心
2.)如果实在等不及,需要立即重启系统,则最少需要收集以下数据,优点是用时相对较少,缺点是收到的数据很可能不足。
db2pd -db SAMPLE -app -tran -edu -dynamic >> app.out
db2pd -stack all -repeat 30 3
db2pd -latch -repeat 30 3 >> latch.out
db2pd -everything >> db2pd.everythingout
db2 get snapshot for all applications >> app.snap.out
db2 get snapshot for db on SAMPLE >> db.snap
注意
A.将上面的SAMPLE换成您自己的数据库的名子。
B. 隔一段时间之后,比如5分钟,再收集一次上面的数据,这个是十分必要的。
C. "-repeat 30 3",这里的30 3指的是每隔30S收集一次,一共收集3次,如果节点数很多的话,可能需要较多的时间,这时候可以缩小间隔,比如每2s收集一次,收集2次: db2pd -stack all -repeat 2 2
如果是分区数据库,则需要所有节点都收集,在catalog节点上执行,同样,需要收集两次:
db2_all "db2pd -db SAMPLE -app -tran -edu -dynamic" >> app.out
db2_all "db2pd -stack all -repeat 30 3"
db2_all "db2pd -latch -repeat 30 3" >> latch.out
db2_all "db2pd -everything" >> db2pd.everythingout
db2 "GET SNAPSHOT FOR ALL APPLICATIONS GLOBAL" >> app.snap.out
db2_all "db2 get snapshot for db on SAMPLE" >> db.snap
其中,stack的数据会在db2dump目录下。
1) 强制杀掉DB2进程
#su - db2_instance_name
$db2_kill
$ipclean
2) 验证没有DB2进程存在
#su - db2_instance_name
$ps –ef|grep db2
3) 启动DB2进程
#su - db2_instance_name
$db2start
4) 验证DB2数据库操作正常
#su - db2_instance_name
$db2 connect to db_name
$db2 “select * from syscat.bufferpools”
无论是哪一种数据收集的方式,重启完要收集一个db2support,连同收集的其他数据一并上传到IBM的服务器上(需要先拨打IBM技术支持热线开一个PMR):
收集db2support的命令如下,收集完成之后,会在当前目录下生成一个db2support.zip文件:
db2support . -d sample -c -s -f (将sample替换成您的数据库的名子)
如果是分区数据库:请用下面的命令收集:
db2support . -d sample -c -s -f -member all (将sample替换成您的数据库的名子)):