informix锁表处理


可以通过Onmode -u 将数据库服务器强行进入单用户模式,来释放被锁的表。对于正式运行的设备,该方法就不可取了,必须找到锁表的session或进程,然后根据具体情况进行处理。这里简单介绍一下如何根据被锁表找到锁表的进程及其session id。

以INFORMIX用户登录后,具体操作步骤如下:

1、取得当前锁情况

[informix] :/opt/informix/etc>onstat -k



Informix Dynamic Server Version 7.31.UC4 -- On-Line -- Up 07:53:32 -- 101328 Kbyte

s



Locks

address wtlist owner lklist type tblsnum rowid key#/bsiz

c0f06c20 0 c60a363c 0 HDR+S 100002 204 0

c0f5f214 0 c60a363c c0f06c20 HDR+IX 200020 0 0

c0f64528 0 c60a363c c0f5f214 HDR+X 200020 100 0

3 active, 200000 total, 65536 hash buckets





根据tabnum(16进制的partnum)及查找systabnames表得到的partnum(10进制)和tabname的对应关系,可得到该锁的onwer,如 c60a363c ,实际上表示Userthread address。

0

2、根据Userthread address得到session id和其他信息。

[informix] :/opt/informix/etc>onstat -u

[informix] :/opt/informix>onstat -u |grep c60a363c

c60a363c Y-BP--- 322 informix ttyp1 c6203700 0 3 1 0



322 既为session id



3、根据ses id得到进程ID

[informix] :/opt/informix/etc>onstat -g ses 322



Informix Dynamic Server Version 7.31.UC4 -- On-Line -- Up 10:13:44 -- 93136 Kbytes



session #RSAM total used

Id user tty pid hostname threads memory memory

322 informix ttyp2 7817 smcp1 1 73728 63096



。。。。。



由此,可得到锁表进程的PID 7817。

4、 得到锁表进程

smcp1 [informix] :/opt/informix/etc>ps -ef |grep 7817

informix 12141 11613 0 19:09:51 ttyp3 0:00 grep 7817

informix 7817 7260 0 09:47:16 ttyp2 0:00 dbaccess test



由此,我们可得到锁表的进程,可根据实际锁表进程的重要程度的具体情况采取相映处理方法:

对于重要且该进程可以自动重联数据库的进程,可以用onmode -z 322(sesid)的方法杀掉锁表session,否则也可直接杀掉锁表的进程 kill 7817(PID)。

通过上述过程,也可以比较清楚的理解维护中使用工具Onstat 的几个基本命令的使用。




http://blog.chinaunix.net/u1/59737/article.php?frmid=91853&page=2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值