关于Oracle 顽固的KILLED 状态的SESSION的处理

最近在执行一个大业务量的存储过程,中间中断,造成了对某个表的锁。这时我再想修改存储过程,则因为这个锁的存在,一直在等待。

在pl/sql developer中将这个session的状态设置为KILLED,结果等了半天也没有被PMON给清除掉,一直在那锁表。参考一些资料,可以用下面的方法解锁。

--下面这个sql语句,可以列出来各个脚本,需要录入sid,这个sid可以从pl/sql developer的session中查到。

SELECT 'alter system kill session ''' || ta.sid || ',' || ta.serial# || ''';',
       'alter system disconnect session ''' || ta.sid || ',' || ta.serial# || ''' immediate;',
       'host orakill ' || tc.instance_name || ' ' || tb.spid,
       'kill -9 ' || tb.spid,
       tb.spid,
       ta.osuser,
       tb.program,
       ta.terminal,
       ta.program
  FROM v$session ta, v$process tb, v$instance tc
 WHERE tb.addr = ta.paddr
   AND ta.sid = &yoursid;

-- 也可以用这个Metalink提供的脚本,其中的os thread就是在orakill 时写的spid

select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program
from v$process p, v$session s, v$bgprocess b
where p.addr = s.paddr
and p.addr = b.paddr UNION ALL
select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program
from v$process p, v$session s
where p.addr = s.paddr
and s.username is not null;

然后执行c:/>orakill oracle_sid os_thread,就可以杀掉killed的进程了。注意要避免杀系统进程,避免数据库宕机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值