当前位置: 代码迷 >> Informix >> 为啥informix数据库锁表重启后就坏了
  详细解决方案

为啥informix数据库锁表重启后就坏了

热度:2193   发布时间:2013-02-26 00:00:00.0
为什么informix数据库锁表重启后就坏了
我的informix数据库是装载windows下的
因为之前的数据库是用oracle,现在换成informix,老是遇到锁表的问题,有的可以抛出来,然后改改应用就OK了,问题是有些锁表直接就死掉了,怎么也连不上,onmode -z杀不掉session,oninit说实例仍然在运行,onmode -m半天没反应,进去select数据库报no connections are allowed in quiescent mode ,去重启服务失败,然后整个重启就说一些服务启动后又停止了,没什么可做的之类,搞的现在一锁表就要配置一个新的服务,然后再建数据库,搞的我都快疯掉了,网上查了很多,都说重启数据库就OK了,可是根本就重启不了,等半天再启动就不行了,进去什么也没有,有木有牛人能告诉我这个问题到底是怎么回事,该怎样解决,小弟先谢谢各位了。
------最佳解决方案--------------------------------------------------------
应该将锁表的SQL语句合出来看看,看看能否优化
转:
锁表处理步骤:
1、onstat -ks
------其他解决方案--------------------------------------------------------
1、要找到在执行什么操作时锁表,SQL语句?才能避免;
2、错误日志(系统日志)中有无信息;
3、锁表后强行退出?数据库被破坏?。
------其他解决方案--------------------------------------------------------
onmode -ky 
------其他解决方案--------------------------------------------------------
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 where partnum='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,将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 sql d656e774可以将这个线程执行过的sql语句打印出来。
4、只要用informix用户执行onmode-z sessid干掉线程
onmode-z 4261
重点说明:onstat -g ses sessid找个进程PID来,然后ps -ef
------其他解决方案--------------------------------------------------------
grep Pid; kill -9 pid
在处理这些问题时还会遇到表被锁是因为该线程还没有执行完毕,此时就不能简单的 onmode -z杀线程
------其他解决方案--------------------------------------------------------
这个不行,等了半天直接告诉我超时了。
引用:
onmode -ky

------其他解决方案--------------------------------------------------------
大哥,我是windows下的,没有grep命令。。。
引用:
应该将锁表的SQL语句合出来看看,看看能否优化
转:
锁表处理步骤:
1、onstat -ks
------其他解决方案--------------------------------------------------------
grep HDR+X //重查询是那个表被锁
address wtlist owner lklist type tblsnum rowid key#/bsiz
c1809510 0 d656e774 c181cb3c HDR+X 6002e1 2c602 0
  相关解决方案