我的编程空间,编程开发者的网络收藏夹
学习永远不晚

informix锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

informix锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

shell 脚本操作informix数据库

shell 脚本操作informix数据库的简单模板:functionName(){ dbaccess << ! database 库名; sql语句;!} 栗子1:更新数据functionName(){ nameStr=$1 idSt
shell 脚本操作informix数据库
2018-06-19

Informix常用函数有哪些

Informix数据库中有许多常用的函数,用于处理数据和执行各种操作。以下是一些常用的Informix函数:1. 字符串函数:- LENGTH:返回字符串的长度。- SUBSTRING:返回字符串的子串。- CONCAT:将多个字符串连接在
2023-09-08

Linux系统中如何安装Informix

这篇“Linux系统中如何安装Informix”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“Linux系统中如何安装Informix”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢
2023-06-28

informix日期函数怎么使用

Informix日期函数可以用于处理日期和时间数据,以下是一些常用的日期函数及其用法:1. CURRENT: 返回当前日期和时间例如:SELECT CURRENT FROM systables2. TODAY: 返回当前日期例如:SELEC
2023-05-31

编程热搜

目录