在Informix数据库中释放异常的锁资源

在Informix数据库中释放异常的锁资源,第1张

在Informix数据库中释放异常的锁资源,第2张

Informix数据库释放异常锁资源:

问题

在Informix数据库中,锁的使用和释放是自动完成的。但在某些异常情况下,当前程序退出(正常或异常)后,数据库中相应的会话没有终止,其占用的资源(主要是锁)没有释放,影响了其他用户的使用。

这种情况可能出现在用户表或系统表中,通常是由产品BUG或非常极端的情况引起的。

此时,需要手动终止有问题的会话,以释放其占用的资源。当然,重启数据库自然会释放所有资源,但有时会暂时禁止业务重启。

第一步是确定锁定的资源。

通常,在这种情况下,很容易确定锁定的资源。如果是用户表,操作该表时会报错。如果是系统表,也会直接报告是哪个表,比如:

211:无法读取系统目录(sysprocplan)。

144: ISAM错误:键值被锁定

在上面的信息中,关于存储过程的系统表sysprocplan被锁定。

确定相关表名后,需要查询其内部表号,以便后续处理,如下图:

数据库访问

从systables中选择hex(partnum ),其中tabname= " "

返回的是一个十六进制数,它是IDS中表的ID。

第二步,找到被锁定的用户线索。

运行IDS lock的监控命令onstat -k,确定锁定表的用户线索,如下所示:

$ onstat -k

IBM Informix动态服务器版本9.40.FC6 -在线运行18:13:12 - 38912千字节

地址wtlist所有者lklist类型tblsnum rowid key#/bsiz

10 a13 a590 0 10 AFD 30 c8 0 HDR+S 100002 207 0

在输出中,查找第一步中找到的表号为tblsnum的行。每一行代表一个锁资源的情况,找到对应的所有者,也就是使用这个锁的用户的线索号。

第三步:找到用户线索对应的会话。

通过用户线程监控命令onstat -u进一步搜索对应的会话和用户情况,如下:

$ onstat -u

IBM Informix动态服务器版本9.40.FC6 -在线运行18:20:47 - 38912千字节用户线程

地址标志sessid用户tty等待外出锁n读取n写入

10afd1028 - P - D 1 informix - 0 0 0 28 7

10 AFD 1850-P-F 0 Informix-0 0 0 0 0 0

10afd2078 - P - 5 informix - 0 0 0 0 0

10afd28a0 - P - B 6 informix - 0 0 0 0 0

10 AFD 30 c8 Y-P-17 Informix 4 10 b1f 9548 0 1 157 0

10afd4118 - P - D 9 informix - 0 0 0 0 0

10 AFD 4940Y-P-D 13 Informix-10a 125 F10 0 0 0 0 0

第一列是线索号,对应的第三列是拥有线索的会话号。

第四步,分析原因,采取措施。

有了会话号,你可以进一步分析原因或采取相应的措施,如:

Onstat -g ses,分析会话状态

Onstat -g sql,检查会话的sql状态。

注意,如果会话的数据库项中出现“--”,则表示该会话对应的客户端程序已经退出,但数据库中的会话尚未终止。

或者直接通过onmode -z终止会话,它占用的锁资源全部释放。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在Informix数据库中释放异常的锁资源

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情