ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 解了一个informix表锁

解了一个informix表锁

原创 Linux操作系统 作者:casper0511 时间:2009-06-15 20:02:20 0 删除 编辑
1。找到被锁表的partnum:select  hex(partnum) from systables  where  tabname = ”tmp”;

2。onstat -k|grep partnum 找到该锁的owner;

3。onstat -u | grep owner 找到用户会话session号;

4。onmode -z sesid 杀掉该session;

5。如果第4步失败,则进一步onstat -g ses | grep sesid 找到该发起该会话的pid;

6。kill pid 或 kill -9 pid;

7。特殊情况:在第2步中,如果发现锁的owner为0,则检查:
    
    onstat -x
    onstat -G
    看是否存在全局事务,若有全局事务,则继续以下步骤:

           select hex(tx_addr) trans_addr,hex(tx_lklist) lock_addr from systrans where hex(tx_addr) like '%c000000007674c58%';
           需要说明的是,c000000007674c58是全局事务的地址。
           上面SQL语句提供出该全局事务对应的锁地址,这时如果得到的锁地址与锁表的锁地址相同的话,你就需要从应用端(通常是三层结构的中间件)发命令让该全局事务回滚或提交,否则该锁会被一直持有,直到你执行oninit -i。


结论:如果指定无限制的锁等待(set lock mode to not wait) 这并不是一个好方法。这会加剧锁冲突和死锁现象的出现,这是一个不好的编程习惯。

我设置成这样,set lock mode to wait 10;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11517198/viewspace-606435/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-14400
请登录后发表评论 登录
全部评论

注册时间:2008-12-08

  • 博文量
    34
  • 访问量
    69427