philein 发表于 2007-04-14 01:47

谁遇见过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
没有显示长事务。。。日志无任何报错。。。
谁来拯救我。。。?表被锁没法干活了

gzhu 发表于 2007-04-15 10:02

我遇到过,你查看session的ID可能是0吧。
可能那个session是由于HDR复制时网络中断而引起的, 我那时先把其他与这张表相关的SESSION都先kill掉,到第二天那个杀不掉的SESSION就消失了。
不知是不是你现在遇到的这种情况。

shanshl 发表于 2007-04-16 13:13

用ipcm和ipcrm试试?

snow2sun 发表于 2007-05-16 16:51

onmode -uy
后onmode -m快速恢复就ok了

czw1413_cn 发表于 2007-05-16 23:49

fush76 发表于 2007-05-17 08:48

就用 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 编辑 ]

ccb_bee 发表于 2007-05-17 14:44

可以用onstat -g ses sid 取得锁表进程pid,把该进程也中止了,锁也就解了.

cdcd007 发表于 2007-05-21 14:22

楼主可以按以下步骤:

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。

a-kuei 发表于 2007-05-22 08:48

楼上的回答够专业,佩服佩服。不知道那位可以友情提供一份informix数据库的巡检报告。我这里需要,先表示感谢了
页: [1]
查看完整版本: 谁遇见过onmode杀不掉进程得问题?