谁遇见过onmode杀不掉进程得问题?
有一表被锁住了。。。onstat -g sql得到sesid,可我用onmode -z一直杀不掉它,onstat -IBM Informix Dynamic Server Version 10.00.UC1 -- On-Line (Prim) -- Up 70 days 09:02:14 -- 260332 Kbytes
没有显示长事务。。。日志无任何报错。。。
谁来拯救我。。。?表被锁没法干活了 我遇到过,你查看session的ID可能是0吧。
可能那个session是由于HDR复制时网络中断而引起的, 我那时先把其他与这张表相关的SESSION都先kill掉,到第二天那个杀不掉的SESSION就消失了。
不知是不是你现在遇到的这种情况。 用ipcm和ipcrm试试? onmode -uy
后onmode -m快速恢复就ok了 就用 ipcrm 去杀吧.没有关系的.
在三层环境下,这种情况多的很.一般这种进程都是中间件产生.
比如:informix+tuxedo 的环境,
但看楼主的情况好象 是gzhu 所说.
IBM Informix Dynamic Server Version 10.00.UC1 -- On-Line (Prim) -- Up 70 days 09:02:14 -- 260332 Kbytes
[ 本帖最后由 fush76 于 2007-5-17 08:53 编辑 ] 可以用onstat -g ses sid 取得锁表进程pid,把该进程也中止了,锁也就解了. 楼主可以按以下步骤:
1。找到被锁表的partnum:selecthex(partnum) from systableswheretabname = ”tmp”;
2。onstat -k|grep partnum 找到该锁的owner;
3。onstat -u | grep owner 找到用户会话session号;
4。onmode -z sesid 杀掉该session;
5。如果第4步失败,则进一步onstat -g ses | grep sesid 找到该发起该会话的pid;
6。kill pid 或 kill -9 pid;
7。特殊情况:在第2步中,如果发现锁的owner为0,则检查:
onstat -x
onstat -G
看是否存在全局事务,若有全局事务,则继续以下步骤:
select hex(tx_addr) trans_addr,hex(tx_lklist) lock_addr from systrans where hex(tx_addr) like '%c000000007674c58%';
需要说明的是,c000000007674c58是全局事务的地址。
上面SQL语句提供出该全局事务对应的锁地址,这时如果得到的锁地址与锁表的锁地址相同的话,你就需要从应用端(通常是三层结构的中间件)发命令让该全局事务回滚或提交,否则该锁会被一直持有,直到你执行oninit -i。 楼上的回答够专业,佩服佩服。不知道那位可以友情提供一份informix数据库的巡检报告。我这里需要,先表示感谢了
页:
[1]