溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

informix鎖

發(fā)布時間:2020-06-22 01:26:01 來源:網(wǎng)絡(luò) 閱讀:2043 作者:曼曼曼鰻魚 欄目:數(shù)據(jù)庫

 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 sesonstat -g sql可以通過SQL語句檢查那些用戶,那些SQL在操作這張表。

可以重點檢查onstat-g sqlUPDATE,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)程,找到rowid0的記錄(如果有的話)。

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、看表的鎖級別

1oncheck -ptdatabase_name:table_name

2select tabname, locklevel fromsystables where ...

2、設(shè)置鎖級別

   alter tablet_test lock mode (ROW)


向AI問一下細(xì)節(jié)

免責(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)容。

AI