DB2启动异常

 

1、现象、问题描述

   DB2在正常使用,启动应用后,发现应用时间超长,最后整个机器都慢下来,相继应用也挂掉2个,DB2也挂掉。等再此启动DB2时,抛出错误

db2inst1@MY-PIM:~> db2start

SQL1072C  The database manager resources are in an inconsistent state.  The database manager might have been incorrectly terminated, or another application might be using system resources in a way that conflicts with the database manager's use of system resources.  System resource cleanup might be required.


2、关键过程、根本原因分析

   首先查看DB2运行日志db2diag.log, 只是打印出普通的内存分配失败信息,并没有太多的详细信息。

2010-04-16-21.13.23.690297+480 I667383G301        LEVEL: Event
PID     : 21123                TID  : 2955699920  PROC : db2start
INSTANCE: db2inst1             NODE : 000
FUNCTION: DB2 UDB, base sys utilities, sqleIssueStartStop, probe:21
DATA #1 : <preformatted>
Single node instance [0] is starting
 
2010-04-16-21.13.23.690770+480 I667685G1505       LEVEL: Event
PID     : 21123                TID  : 2955699920  PROC : db2start
INSTANCE: db2inst1             NODE : 000
FUNCTION: DB2 UDB, base sys utilities, sqleStartStopSingleNode, probe:1130
DATA #1 : String, 34 bytes
/home/db2inst1/sqllib/adm/db2star2
DATA #2 : Hexdump, 256 bytes
0xBFF80E10 : 2F68 6F6D 652F 6462 3269 6E73 7431 2F73    /home/db2inst1/s
0xBFF80E20 : 716C 6C69 622F 6164 6D2F 6462 3273 7461    qllib/adm/db2sta
0xBFF80E30 : 7232 0000 0000 0000 0000 0000 0000 0000    r2..............
0xBFF80E40 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80E50 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80E60 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80E70 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80E80 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80E90 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80EA0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80EB0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80EC0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80ED0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80EE0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80EF0 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
0xBFF80F00 : 0000 0000 0000 0000 0000 0000 0000 0000    ................
 
2010-04-16-21.13.24.425926+480 I669191G294        LEVEL: Event
PID     : 21123                TID  : 2955699920  PROC : db2start
INSTANCE: db2inst1             NODE : 000
FUNCTION: DB2 UDB, base sys utilities, sqleIssueStartStop, probe:190
DATA #1 : <preformatted>
Single node stopped [-1072].

 

    没有太多的信息,就是节点停止错误吗为1072。sqleIssueStartStop表示底层组件,红色部分e代表Database engine processes。也就是数据库引擎出现错误。在回过头来看错误信息,大概意思是数据库资源处理不一致状态,数据库可能被错误的终止,后者是例外一个进程与数据库管理者使用资源冲突。需要进行系统资源清理。

    一般出现这样的原因:

    DB2 不正确地终止(例如,在基于 UNIX 的系统上,若用 "kill"
    命令、而不是用停止数据库管理器命令终止了进程,则可能会发生此情 况) 。

 

     另一应用程序或用户可能已除去了数据库管理器资源(例如,在基于UNIX 的系统上,具有足够特权的用户可能无意中使用 "ipcrm"命令除去了数据库管理器所拥有的「进程间通信」(IPC) 资源)。

 

另一应用程序的系统资源使用与数据库管理器的系统资源使用相冲突(例如,在基于 UNIX的系统上,另一应用程序可能正在使用数据库管理器用来创建 IPC资源的相同关键词)。

 

数据库管理器的另一个实例可能正在使用相同的资源。 在基于 UNIX的系统上,若两个实例在不同的文件系统上,且 sqllib目录刚好有同一个 i 节点(i 节点用来获取 IPC关键词),则可能会发生此情况。

 

用户响应:  可能需要进行资源清理:

 

除去在该实例标识下运行的所有数据库管理器进程(在基于 UNIX的系统上,可使用 "ps -eaf -u <实例标识>; | grep db2"来列示在该实例标识下运行的所有数据库管理器进程,并使用 "kill -9 <进程标识>;" 命令来除去它们)。

 

确保没有其它应用程序正在该实例标识下运行,然后除去该实例标识所拥有的所有资源(在基于 UNIX 的系统上,可使用 "ipcs | grep <实例标识>;" 命令列示该实例标识拥有的所有 IPC资源,并使用 "ipcrm -[q|m|s] <id>;" 命令除去它们)。

 

如果有数据库管理器的另一个实例在运行,则可能会存在 inode冲突。如果您发现两个实例不能同时活动,但是可以单独启动,则可能就是 这种冲突情况。需要更改所使用的 inode以便为其中一个实例生成 IPC 密钥。对于单节点实例,作为实例所有者从 sqllib 目录执行下列操作:

删除 .ftok 文件

rm .ftok

创建新的 .ftok 文件touch .ftok

对于多节点实例,作为实例所有者执行下列操作:

在与 sqllib 相同的级别上创建另一个目录

将所有内容从 sqllib 中移至新目录

删除 sqllib将新目录重命名为 sqllib

 

    经过几个步骤问题解决了!

 

3、结论、解决方案及效果

   在解决类似问题时,应该仔细阅读DB2的错误提示信息,更具信息来做出响应的判断。

 

4、经验总结预防措施和规范建议

    在系统资源不足时,系统有可能会回收DB2的占用资源,导致DB2数据库异常,这样情况下一般进行系统清理就可以解决问题了。