如何杀掉(kill)Oracle中的会话(Session)

当Oracle中出现会话导致表被锁或异常退出时,可通过管理员权限执行特定命令来解除锁定并终止会话。首先查询被锁对象,然后使用`alter system kill session 'sid, serial#'`命令来结束会话。如果遇到ora-00031错误,可添加`immediate`关键字。此外,结合Linux系统操作可彻底杀死进程,解决死锁问题。" 104612775,8408635,操作系统全解析:从概念到实践,"['操作系统', 'Linux', '进程', '存储管理', '线程同步']
摘要由CSDN通过智能技术生成

有时,Oracle中造成一些表被死锁或者会话异常退出,如执行了更新记录操作后,既没有commit也没有rollback,网络就断开了,也会造表或记录被锁住,待到超时后才会被解开,那样都会造成应用操作被阻塞。

可以以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象,然后杀除指定的会话。

用下面的语句查询被锁的对象,可以带上更多约束条件,如schemaname等更精确的匹配。

  1. SELECT a.object_id, a.session_id, b.object_name, c.*  
  2.   FROM v$locked_object a, dba_objects b, v$session c  
  3. WHERE a.object_id = b.object_id  
  4.    AND a.SESSION_ID = c.sid(+)  

杀Seesion的 SQL语句语法如下:

  1. alter system kill session 'sid, serial#'  

如上面查出来的一条记录的sid是53, serial#为663,就执行以下的语句

  1. alter system kill session '53,663'  

如果要一次性杀死多个会话,一个一个填写sid和serial#十分的繁琐,应该在查询被锁对象的同时拼凑出多条的杀会话语句,以分号分隔,一起复制下来,然后就可以批量的执行了。

拼凑kill语句的方式如下,下面加了一个过滤条件和一个排序,杀除真正关心的表,并且着重注意超时时间过长的会话。

1.SELECT'alter system kill session '''|| c.sid ||''||','|| c.serial# ||''';',

2.       a.object_id, a.session_id, b.object_name, c.*

3.  FROMv$locked_object a, dba_objects b, v$session c

4. WHEREa.object_id = b.object_id

5.   ANDa.SESSION_ID = c.sid(+)

6.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值