informix資料庫鎖表處理步驟
阿新 • • 發佈:2019-01-27
時間:2016/5/3
1、onstat -ks|grep HDR+X //查詢是那個表被鎖
address wtlist owner lklist type tblsnum rowid key#/bsiz
c1809510 0 d656e774 c181cb3c HDR+X 6002e1 2c602 0
需要關注lklist和type項,從上面來看tblsnum為6002e1(6292193十六進位制轉換成十進位制)的表被鎖了。可以重查詢是那個表被鎖:
dbaccess :select * from systables wherepartnum='6292193'得到
tabname basetab_mvpn
owner smpmml
partnum 6292193
tabid 12813
rowsize 464
ncols 61
nindexes 1
nrows 2984
created 12/10/2002
version 839843846
tabtype T
locklevel R
npused 746
fextsize 16
nextsize 16
flags 0
2、onstat -u|grepd656e774,將owner(address)為d656e774的執行緒找出來
address flags sessid user tty wait tout locks nreads nwrites
d656e774 Y--P--- 4261 smp20 - d6ad2330 0 180 99620 16
3、onstat -g sql4261可以將這個執行緒執行過的sql語句打印出來。
4、只要用informix使用者執行onmode-zsessid幹掉執行緒
onmode-z 4261
重點說明:onstat -g ses sessid找個程序PID來,然後ps -ef|grep Pid; kill -9 pid
在處理這些問題時還會遇到表被鎖是因為該執行緒還沒有執行完畢,此時就不能簡單的 onmode -z殺執行緒