1. 程式人生 > >informix資料庫鎖表處理步驟

informix資料庫鎖表處理步驟

時間: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殺執行緒