Informix如何释放异常的锁资源
问题
在Informix数据库中,锁的使用和释放是自动完成的。但在某些异常情况下,当前台程序退出(正常或异常)后,相应在数据库中的会话没有终止,其占有的资源(主要是锁)没有被释放,影响了其他用户的使用。
这种情况可能出现在用户表或系统表中,一般都是由于产品的BUG或非常极端的情况引起的。
这时需要用手工的方式将有问题的会话终止,以释放其占有的资源,当然重新启动数据库自然就释放了所有的资源了,但有时业务上暂时不允许重新启动。
第一步,确定被锁住的资源
一般在遇到这种情况时,很容易确定被锁住的资源,如果是用户表,则一般会在操作这张表时报错,而如果是系统表,也会直接报告是哪张表,如:
211: Cannot read system catalog (sysprocplan).
144: ISAM error: key value locked
在以上的信息中,关于存储过程的系统表sysprocplan被锁住了。
在确定了相关表名后,需要查询出其在内部的表号,以便后续的处理,如下所示:
dbaccess <该表所在的数据库>
select hex(partnum) from systables where tabname="<表名>"
执行返回的是一个16进制表示的数,这是该表在IDS内部的标识。
第二步,查找上锁的用户线索
运行IDS锁的监控命令onstat -k,确定对该表上锁的用户线索,如下所示:
$ onstat -k
IBM Informix Dynamic Server Version 9.40.FC6 -- On-Line -- Up 18:13:12 -- 38912 Kbytes
Locks
address wtlist owner lklist type tblsnum rowid key#/bsiz
10a13a590 0 10afd30c8 0 HDR+S 100002 207 0
在输出中,查找tblsnum为第一步找到的表号的行,每行代表一个锁资源的情况,并找到相应的owner,即使用这个锁的用户线索号。
第三表,查找用户线索对应的会话
通过用户线索监控命令onstat -u进一步查找相应的会话以及用户情况。如下所示:
$ onstat -u IBM Informix Dynamic Server Version 9.40.FC6 -- On-Line -- Up 18:20:47 -- 38912 Kbytes Userthreads
address flags sessid user tty wait tout locks nreads nwrites
10afd1028 ---P--D 1 informix - 0 0 0 28 7
10afd1850 ---P--F 0 informix - 0 0 0 0 0
10afd2078 ---P--- 5 informix - 0 0 0 0 0
10afd28a0 ---P--B 6 informix - 0 0 0 0 0
10afd30c8 Y--P--- 17 informix 4 10b1f9548 0 1 157 0
10afd4118 ---P--D 9 informix - 0 0 0 0 0
10afd4940 Y--P--D 13 informix - 10a125f10 0 0 0 0
其中第一列为线索号,相对应的第三列为拥有该线索的会话号。
第四步,分析原因并采取措施
有了会话号之后,就可以进一步分析原因或采取相应的措施了,如:
onstat -g ses <会话号>,分析会话的状态
onstat -g sql <会话号>,查看会话的SQL情况
注意,如果在会话的database一项中出现的是“-”,说明该会话所对应的客户端程序已经退出,但数据库中的会话并未终止,
或通过onmode -z <会话号>直接终止该会话,其所占有的锁资源将全部释放。
管理建议
- 请关注异常锁的情况,如果频繁出现,应该是产
http://www.ithao123.cn/content-7724355.html
Informix如何释放异常的锁资源的更多相关文章
- 面试 LockSupport.park()会释放锁资源吗?
(手机横屏看源码更方便) 引子 大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问. 我:说说AQS的大致流程? 他:AQS包含一个状态变量,一个同步队列--bala ...
- 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。
访问频率比较高的app接口,在后台写的异常日志会偶尔出现以下错误. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 实所有的死锁最深层的原因就是一个 ...
- AQS源码探究之竞争锁资源
AQS源码探究---竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平锁的AQS的实现类 UnFa ...
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务
前言: 由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用“事务发布”模式实现主数据库和只读数据库的同步,其中: 发布服务器1 ...
- SQL SERVER 锁资源问题
1204: cannot obtain a LOCK resource 在sql server 锁资源的限制基本是自动优化调整.如果调整过参数,可能在系统大批量查询的时候出现以上错误,或者是 alwa ...
- Office开发必备知识----为什么要释放非托管Com资源
https://www.cnblogs.com/Charltsing/p/RealeaseComObject.html QQ:564955427 目前,国内Office插件开发的风头正盛,很多VBAe ...
- Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)
1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...
- EF 多线程TransactionScope事务异常"事务EFTransaction类定义:与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。"
解决方案代码一:使用lock锁定 //对于锁推荐使用静态私有静态变量 private readonly static object _MyLock = new object(); /// <su ...
- Java多线程之释放对象的锁
由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的.在以下情况下,持有锁的线程会释放锁: 1. 执行完同步代码块. 2. 在执行 ...
随机推荐
- QQ登入(4)QQ分享-内容转载
///////////////////QQ分享///////////// public void myclick3(View v){ //shareType : SHARE_TO_QQ_TYPE_IM ...
- C++ map详解
1.什么是mapmap是一个键值对容器.在处理一对一数据是,很有用. 2.map数据结构的特点map内部自建一颗红黑树,这棵树具有对数据自动排序的功能,因此,map内的数据都是按key的值排好序的. ...
- ABBYY PDF Transformer+从文件选项中创建PDF文档的教程
可使用OCR文字识别软件ABBYY PDF Transformer+从Microsoft Word.Microsoft Excel.Microsoft PowerPoint.HTML.RTF.Micr ...
- libc-glibc
glibc 和 libc 都是 Linux 下的 C 函数库. libc 是 Linux 下的 ANSI C 函数库:glibc 是 Linux 下的 GUN C 函数库. ANSI C 和 GNU ...
- unity, 查看.anim中的动画曲线(和帧)
在场景里建一个gameObject,添加一个Animation组件,将.anim文件添加到Animation组件的Animations中,然后在Animation组件面板中选中.anim,然后 菜单- ...
- OpenJudge计算概论-与7无关的数
/*========================================================== 与7无关的数 总时间限制: 1000ms 内存限制: 65536kB 描述 一 ...
- eclipse提交subversion+apache的中文路径问题解决过程
原文链接:http://cavenfeng.iteye.com/blog/1921400 .download & patch: # wget http://webdav.todo.gr.jp/ ...
- 算法篇——Cantor的数表
来源:<算法竞赛入门经典>例题5.4.1 题目:现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/ ...
- IOS开发-UITextField代理常用的方法总结
1.//当用户全部清空的时候的时候 会调用 -(BOOL)textFieldShouldClear:(UITextField *)textField: 2.//可以得到用户输入的字符 -(BOOL)t ...
- zend studio一些常用配置
zend studio 常用 配置 1.zend中添加注释是ctrl+slash,这个slash在哪里?如何来取消注释 slash是斜杠'/'那个键,就是在,.之后的那个. 进行注释是 ctrl+'/ ...