informix锁

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

244:Could not do a physical-order read to fetchnext 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 systableswhere 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 tofetch next row.

113: ISAM error: the file is locked.

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

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

标志位“L”),如:

c0000000379015e8 L--PR-- 4626 informix tJc0000000006e45f0 20 1 0 0

超时后报错:

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

154: ISAM error: Lock Timeout Expired

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

DATABASE sysmaster;

SELECT owner FROM syslocks WHEREtabname="表名";

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

包括是哪个用户、执行了什么SQL语句。还可以通过DBA身份使用onmode -z 命令杀断该会话。

不过方法真的不错,比我的好多了:

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

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

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

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

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

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

5.我有一个表,再用ISQL查询时,提示记录被锁定,查不出任可内容,用unlock table 表名,又提示我表未被我锁定。

确认为表中的某一记录被锁定了。在不重启数据库和表数据情况下,怎样解锁。

记录应该是被其他进程的数据库访问锁住了,

只能找出源头,释放锁才行。

解锁步骤:

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

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

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

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

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

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

6.怎样查看数据库现在用的是什么锁?怎样设置informix的锁? 我现在要把一个表从页级锁改为记录琐该怎么办啊?

1、看表的锁级别

(1)oncheck -ptdatabase_name:table_name

(2)select tabname, locklevel fromsystables where ...

2、设置锁级别

alter tablet_test lock mode (ROW)

时间: 2024-12-28 21:27:50

informix锁的相关文章

informix数据库锁表处理方法

此方法只针对已知被锁表名字: informix解除锁表的方法:select username ,sid,waiter,dbsname,tabname,rowidlk,keynum,typefrom sysmaster:syslocks a,sysmaster:syssessions bwhere b.sid=a.owner and a.tabname!='被锁的表名字'; 获得SID名称,一般为数字 然后进入Informix数据库服务器,执行如下:>onmode -z sid 如:onmode

Informix如何释放异常的锁资源

问题 在Informix数据库中,锁的使用和释放是自动完成的.但在某些异常情况下,当前台程序退出(正常或异常)后,相应在数据库中的会话没有终止,其占有的资源(主要是锁)没有被释放,影响了其他用户的使用. 这种情况可能出现在用户表或系统表中,一般都是由于产品的BUG或非常极端的情况引起的. 这时需要用手工的方式将有问题的会话终止,以释放其占有的资源,当然重新启动数据库自然就释放了所有的资源了,但有时业务上暂时不允许重新启动. 第一步,确定被锁住的资源 一般在遇到这种情况时,很容易确定被锁住的资源,

今天初步了解了informix的锁的概念

今天初步了解了informix的锁的概念 2005-06-12 01:07:05 分类: IT生活 在load的时候,碰到好几次"-134 ISAM Error :no more locks",原来是数据库中的锁的数量不够所致,后来到/informix/etc/下修改onconfig文件,把LOCKS的值增加到20000(原来400),问题解决. 但在网上还看到有人用事务独占的方式,没试过.原文是这样的:建议先打开事务处理begin work;然后使用lock table tablen

SuSE Linux 11 下informix数据库安装配置

Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族.现在用的人越来越少啦,各大运营商倒是还有用的,工作需要,还是要学习一下安装. 系统: SUSE Linux Enterprise Server 11 (x86_64) 一.安装 1.以root用户身份创建informix组和用户,假设informix用户的HOME目录为/opt/informix # groupadd  informix # useradd  -g  informix  -d  /opt/informix  

informix数据迁移工具使用介绍

一.dbschema USAGE:     dbschema [-q] [-t tabname] [-s user] [-p user] [-r rolename] [-f procname]              [-hd tabname] -d dbname [-w passwd] [-seq sequence] [-l [num]]              [-u [ia] udtname [all]] [-it [Type]] [-ss [-si]] [filename] EG:

Informix 11.5 SQL 语句性能监控方法及实现

我们知道,在数据库应用系统中,SQL 语句的性能好坏至关重要.如果 SQL 语句性能很差,可能会导致整个数据库应用系统的性能也非常差.那么,如何监控数据库系统中 SQL 语句的性能,导致 SQL 语句性能差的原因是什么? SQL 语句运行过程中对系统资源的使用情况如何?系统资源存在哪些瓶颈?在 Informix 11.5 中,主要提供了两个工具来解决上述问题.一个是 set explain 命令,我们可以通过查看数据库的查询计划来分析导致 SQL 语句性能差的原因并给予相应的调整,另一个是 SQ

Informix 系统表

------------------------------------------ sysusers 系统目录表描述了数据库中所授的每套权限.数据库中每个有权限的用户都对应有一行. sysusers系统目录表包括的列入下表所示. username NCHAR(8) 数据库的用户名或角色名.usertype   NCHAR(1) 指定库级权限:                       D=数据库管理员(所有权限)                       R=资源(创建永久表和索引)   

蜜果私塾:informix数据库学习合集[不断补充]

一.infomix使用备忘录     目录结构:     1. 启动与停止命令:      2. 修改数据库编码:      3. 查看informix占用的端口:      4. 使用dbaccess命令从文件导入建表信息:      5. 给某个用户赋予某个库的dba权限:      6. 连接informix库的用户的.bash_profile的配置      7. informix导出表数据      8. informix修改表字段属性      9. informix的小数类型二.i

JAVA synchronized关键字锁机制(中)

synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选. 下面总结其特性以及使用技巧,加深对其理解. 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.       2. 当一个线程同时访问object的一个synchronized(this)同步代码块时,其它线程仍然可以访问非修饰的方法或代码块.       3. 当多个线程同时访问object的synchronized(this)同步代码