您好,登錄后才能下訂單哦!
1.在將一個表unload時,出現(xiàn):
244:Could not do a physical-order read to fetchnext row
107:ISAM error:record is locked
在不重啟動數(shù)據(jù)庫情況下,如何解鎖?
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"
這個是我經(jīng)常用得看誰鎖表得小腳本,后面可以再加上onstat -g 得選項??淳唧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.近期我在對informix數(shù)據(jù)庫的表進(jìn)行update時,總也報-244的錯誤,我已經(jīng)在配置文件中加大的鎖的個數(shù),
但還是不行,不知-244的錯誤還與什么有關(guān)系?
請查看該表的鎖級別,有page,row之分
SQL code只能說明操作上的故障,最終要看ISAM錯誤代碼。
只要索引沒問題的前提下,估計是鎖并發(fā)性的問題,而不是鎖不夠的問題。
可能通過走索引的方式去盡量避免。
3.在Informix里如果應(yīng)用將某個表鎖住了,如何查出是那個進(jìn)程鎖住的,又如何釋放?
1、發(fā)現(xiàn)鎖表(以tab_test為例)。
2、在systables中找出tab_test對應(yīng)的partnum。
3、用計算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對應(yīng)的owner號,此owner號表示進(jìn)行此操作的用戶進(jìn)程,找到rowid為0的記錄(如果有的話)。
5、用onstat -u|grep [owner號] 找到相應(yīng)的用戶進(jìn)程。
6、如果想看看到底是哪個語句產(chǎn)生的鎖,用:onstat -g ses [owner號] 查看語句?;蛘哂?/span>onmode -z [owner號]殺之。
謝謝樓上的,解決了我找了很久的問題。不過最后一點是session id
4.如果您執(zhí)行SQL語句時候出現(xiàn)下面的錯誤提示:
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 命令可以報告出會話在等待鎖資源的信息(
標(biāo)志位“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
那么,怎么樣找出是誰鎖住了這個表呢?介紹一個小技巧,執(zhí)行下面SQL語句:
DATABASE sysmaster;
SELECT owner FROM syslocks WHEREtabname="表名";
得到的owner就是加鎖的會話號SID,于是我們就可以使用 onstat -g ses SID 命令查看該會話的信息,
包括是哪個用戶、執(zhí)行了什么SQL語句。還可以通過DBA身份使用onmode -z 命令殺斷該會話。
不過方法真的不錯,比我的好多了:
1、發(fā)現(xiàn)鎖表(以tea為例)。
2、在systables中找出tea對應(yīng)的partnum。
3、用計算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對應(yīng)的owner號,此owner號表示進(jìn)行此操作的用戶進(jìn)程。
5、用onstat -u|grep [owner號] 找到相應(yīng)的用戶進(jìn)程。
6、如果想看看到底是哪個語句產(chǎn)生的鎖,用:onstat -g ses [owner號] 查看語句?;蛘哂?/span>onmode -z [owner號]殺之。
5.我有一個表,再用ISQL查詢時,提示記錄被鎖定,查不出任可內(nèi)容,用unlock table 表名,又提示我表未被我鎖定。
確認(rèn)為表中的某一記錄被鎖定了。在不重啟數(shù)據(jù)庫和表數(shù)據(jù)情況下,怎樣解鎖。
記錄應(yīng)該是被其他進(jìn)程的數(shù)據(jù)庫訪問鎖住了,
只能找出源頭,釋放鎖才行。
解鎖步驟:
1、發(fā)現(xiàn)鎖表(以tpm_radio_bts為例)。
2、在systables中找出tpm_radio_bts對應(yīng)的partnum。
3、用計算器將此數(shù)轉(zhuǎn)換成十六進(jìn)制。
4、用onstat -k|grep [十六進(jìn)制] 找到相應(yīng)的鎖,并記錄相對應(yīng)的owner號,此owner號表示進(jìn)行此操作的用戶進(jìn)程。
5、用onstat -u|grep [owner號] 找到相應(yīng)的用戶進(jìn)程。
6、如果想看看到底是哪個語句產(chǎn)生的鎖,用:onstat -g ses [owner號] 查看語句。或者用onmode -z [owner號]殺之。
6.怎樣查看數(shù)據(jù)庫現(xiàn)在用的是什么鎖?怎樣設(shè)置informix的鎖? 我現(xiàn)在要把一個表從頁級鎖改為記錄瑣該怎么辦啊?
1、看表的鎖級別
(1)oncheck -ptdatabase_name:table_name
(2)select tabname, locklevel fromsystables where ...
2、設(shè)置鎖級別
alter tablet_test lock mode (ROW)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。