PL/SQL 查询session杀不掉,强制终止线程的解决方法

      前几天用PL/SQL跨库查询批量插入另一张表时出现卡住情况,十几分钟了没有反应。解决方法:

1.查询出锁表session的SID,SERIAL#

SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT Null

2.然后强制终止进程,sql如下,注意自己的计算机名称,不要误杀。

alter system kill session 'SID,SERIAL#' 

3.执行了几分钟之后提示杀不了,进程已经排在队列中。由于事务要回滚,暂时结束不了。解决办法:根据sid查询出spid。sql如下:

select spid, osuser, s.program 
from v$session s,v$process p 
where s.paddr=p.addr and s.sid=30; 
4.在OS上杀死这个进程(线程): 
1)在unix上,用root身份执行命令: 
#kill -9 12345(即第3步查询出的spid)
执行过之后pl/SQL断开连接。查询终止。 
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为: 
orakill sid thread 
其中: 
sid:表示要杀死的进程属于的实例名 
thread:是要杀掉的线程号,即第3步查询出的spid。 
例:c:>orakill orcl 12345 


参照:http://blog.chinaunix.net/uid-261392-id-2942772.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值