您好,登錄后才能下訂單哦!
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)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。