informix报错244_informix锁
1.在將一個(gè)表unload時(shí),出現(xiàn):
244:Could not do a physical-order read to fetchnext row
107:ISAM error:record is locked
在不重啟動(dòng)數(shù)據(jù)庫(kù)情況下,如何解鎖?
onstat -g ses和onstat -g sql可以通過(guò)SQL語(yǔ)句檢查那些用戶(hù),那些SQL在操作這張表。
可以重點(diǎn)檢查onstat-g sql中UPDATE,DELTE,INSERT語(yǔ)句。
onstat -k看鎖的情況,通過(guò)輸出的tblsnum一列檢查是否這張表被鎖了。
tblsnum可以通過(guò)下面的SQL去獲得
select tabname,hex(partnum) from systableswhere tabname="tabname"
這個(gè)是我經(jīng)常用得看誰(shuí)鎖表得小腳本,后面可以再加上onstat -g 得選項(xiàng)??淳唧w執(zhí)行了什么東西。
代碼:
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.近期我在對(duì)informix數(shù)據(jù)庫(kù)的表進(jìn)行update時(shí),總也報(bào)-244的錯(cuò)誤,我已經(jīng)在配置文件中加大的鎖的個(gè)數(shù),
但還是不行,不知-244的錯(cuò)誤還與什么有關(guān)系?
請(qǐng)查看該表的鎖級(jí)別,有page,row之分
SQL code只能說(shuō)明操作上的故障,最終要看ISAM錯(cuò)誤代碼。
只要索引沒(méi)問(wèn)題的前提下,估計(jì)是鎖并發(fā)性的問(wèn)題,而不是鎖不夠的問(wèn)題。
可能通過(guò)走索引的方式去盡量避免。
3.在Informix里如果應(yīng)用將某個(gè)表鎖住了,如何查出是那個(gè)進(jìn)程鎖住的,又如何釋放?
1、發(fā)現(xiàn)鎖表(以tab_test為例)。
2、在systables中找出tab_test對(duì)應(yīng)的partnum。
3、用計(jì)算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對(duì)應(yīng)的owner號(hào),此owner號(hào)表示進(jìn)行此操作的用戶(hù)進(jìn)程,找到rowid為0的記錄(如果有的話(huà))。
5、用onstat -u|grep [owner號(hào)] 找到相應(yīng)的用戶(hù)進(jìn)程。
6、如果想看看到底是哪個(gè)語(yǔ)句產(chǎn)生的鎖,用:onstat -g ses [owner號(hào)] 查看語(yǔ)句?;蛘哂胦nmode -z [owner號(hào)]殺之。
謝謝樓上的,解決了我找了很久的問(wèn)題。不過(guò)最后一點(diǎn)是session id
4.如果您執(zhí)行SQL語(yǔ)句時(shí)候出現(xiàn)下面的錯(cuò)誤提示:
244: Could not do a physical-order read tofetch next row.
113: ISAM error: the file is locked.
毫無(wú)疑問(wèn),您要訪問(wèn)的表被別人鎖住了。
如果您的使用了set lock mode to wait 語(yǔ)句,onstat -u 命令可以報(bào)告出會(huì)話(huà)在等待鎖資源的信息(
標(biāo)志位“L”),如:
c0000000379015e8 L--PR-- 4626 informix tJc0000000006e45f0 20 1 0 0
超時(shí)后報(bào)錯(cuò):
244: Could not do a physical-order read tofetch next row.
154: ISAM error: Lock Timeout Expired
那么,怎么樣找出是誰(shuí)鎖住了這個(gè)表呢?介紹一個(gè)小技巧,執(zhí)行下面SQL語(yǔ)句:
DATABASE sysmaster;
SELECT owner FROM syslocks WHEREtabname="表名";
得到的owner就是加鎖的會(huì)話(huà)號(hào)SID,于是我們就可以使用 onstat -g ses SID 命令查看該會(huì)話(huà)的信息,
包括是哪個(gè)用戶(hù)、執(zhí)行了什么SQL語(yǔ)句。還可以通過(guò)DBA身份使用onmode -z 命令殺斷該會(huì)話(huà)。
不過(guò)方法真的不錯(cuò),比我的好多了:
1、發(fā)現(xiàn)鎖表(以tea為例)。
2、在systables中找出tea對(duì)應(yīng)的partnum。
3、用計(jì)算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對(duì)應(yīng)的owner號(hào),此owner號(hào)表示進(jìn)行此操作的用戶(hù)進(jìn)程。
5、用onstat -u|grep [owner號(hào)] 找到相應(yīng)的用戶(hù)進(jìn)程。
6、如果想看看到底是哪個(gè)語(yǔ)句產(chǎn)生的鎖,用:onstat -g ses [owner號(hào)] 查看語(yǔ)句。或者用onmode -z [owner號(hào)]殺之。
5.我有一個(gè)表,再用ISQL查詢(xún)時(shí),提示記錄被鎖定,查不出任可內(nèi)容,用unlock table 表名,又提示我表未被我鎖定。
確認(rèn)為表中的某一記錄被鎖定了。在不重啟數(shù)據(jù)庫(kù)和表數(shù)據(jù)情況下,怎樣解鎖。
記錄應(yīng)該是被其他進(jìn)程的數(shù)據(jù)庫(kù)訪問(wèn)鎖住了,
只能找出源頭,釋放鎖才行。
解鎖步驟:
1、發(fā)現(xiàn)鎖表(以tpm_radio_bts為例)。
2、在systables中找出tpm_radio_bts對(duì)應(yīng)的partnum。
3、用計(jì)算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對(duì)應(yīng)的owner號(hào),此owner號(hào)表示進(jìn)行此操作的用戶(hù)進(jìn)程。
5、用onstat -u|grep [owner號(hào)] 找到相應(yīng)的用戶(hù)進(jìn)程。
6、如果想看看到底是哪個(gè)語(yǔ)句產(chǎn)生的鎖,用:onstat -g ses [owner號(hào)] 查看語(yǔ)句?;蛘哂胦nmode -z [owner號(hào)]殺之。
6.怎樣查看數(shù)據(jù)庫(kù)現(xiàn)在用的是什么鎖?怎樣設(shè)置informix的鎖? 我現(xiàn)在要把一個(gè)表從頁(yè)級(jí)鎖改為記錄瑣該怎么辦啊?
1、看表的鎖級(jí)別
(1)oncheck -ptdatabase_name:table_name
(2)select tabname, locklevel fromsystables where ...
2、設(shè)置鎖級(jí)別
alter tablet_test lock mode (ROW)
原文:http://bilingling.blog.51cto.com/11578217/1837201
總結(jié)
以上是生活随笔為你收集整理的informix报错244_informix锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: i3cpu驱动xp_Intel英特尔Co
- 下一篇: IPMSG(飞秋)源代码调试笔记