informix报错244_关于Informix锁表的问题

1.在将一个表unload时,出现:

244:Could not do a physical-order read to fetch next row

107:ISAM error:record is locked

在不重启动数据库情况下,如何解锁?

onstat -g ses和onstat -g sql可以通过SQL语句检查那些用户,那些SQL在操作这张表。

可以重点检查onstat -g sql中UPDATE,DELTE,INSERT语句。

onstat -k看锁的情况,通过输出的tblsnum一列检查是否这张表被锁了。

tblsnum可以通过下面的SQL去获得

select tabname,hex(partnum) from systables where tabname="tabname"

这个是我经常用得看谁锁表得小脚本,后面可以再加上onstat -g 得选项。看具体执行了什么东西。

代码:

onstat -k|grep X|awk '{print $3}'|sort -u >tmp1.txt

cat tmp1.txt|while read line

do

onstat -u|grep $line

done

rm tmp1.txt

2.近期我在对INFORMIX数据库的表进行UPDATE时,总也报-244的错误,我已经在配置文件中加大的锁的个数,

但还是不行,不知-244的错误还与什么有关系?

请查看该表的锁级别,有page,row之分

SQL code只能说明操作上的故障,最终要看ISAM错误代码。

只要索引没问题的前提下,估计是锁并发性的问题,而不是锁不够的问题。

可能通过走索引的方式去尽量避免。

3.在Informix里如果应用将某个表锁住了,如何查出是那个进程锁住的,又如何释放?

1、发现锁表(以tab_test为例)。

2、在systables中找出tab_test对应的partnum。

3、用计算器将此数转换成十六进制。

4、用onstat -k|grep [十六进制] 找到相应的锁,并记录相对应的owner号,此owner号表示进行此操作的用户进程,找到rowid为0的记录(如果有的话)。

5、用onstat -u|grep [owner号] 找到相应的用户进程。

6、如果想看看到底是哪个语句产生的锁,用:onstat -g ses [owner号] 查看语句。或者用onmode -z [owner号]杀之。

谢谢楼上的,解决了我找了很久的问题。不过最后一点是session id

4.如果您执行SQL语句时候出现下面的错误提示:

244: Could not do a physical-order read to fetch next row.

113: ISAM error: the file is locked.

毫无疑问,您要访问的表被别人锁住了。

如果您的使用了 set lock mode to wait 语句,onstat -u 命令可以报告出会话在等待锁资源的信息(

标志位“L”),如:

c0000000379015e8 L--PR-- 4626 informix tJ c0000000006e45f0 20 1 0 0

超时后报错:

244: Could not do a physical-order read to fetch next row.

154: ISAM error: Lock Timeout Expired

那么,怎么样找出是谁锁住了这个表呢?介绍一个小技巧,执行下面SQL语句:

DATABAS

E sysmaster;

SELECT owner FROM syslocks WHERE tabname="表名";

得到的owner就是加锁的会话号SID,于是我们就可以使用 onstat -g ses SID 命令查看该会话的信息,

包括是哪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值