在windows上使用orakill结束oracle会话的线程

由于oracle在windows平台采用了单进程多线程的实现方式,unix/linux上的server process在windows上实际是一个thread。我们知道,在unix平台上,有时使用alter system kill的方式杀死一个用户会话后,可能会标记为killed而不是立即释放该会话所占有的所有资源,或者由于某些原因,某些会话处于假死状态,这时可能要在os级别强行kill对应的process。但在windows上,进程管理器中只能看到一个oracle进程,而无法看到并且杀死具体的线程。

这种情况下,我们当然可以借助第三方的线程管理工具来实现我们杀某个指定线程的目的,但实际上,oracle本身也是提供了这种的工具的。这就是orakill工具。orakill的用法很简单,两个参数,第一个是oracle_sid,第二个是线程号,也就是oracle的v$process中的spid:

D:>orakill

Usage: orakill sid thread

where sid = the Oracle instance to target
thread = the thread id of the thread to kill

The thread id should be retrieved from the spid column of a query such as:

select spid, osuser, s.program from
v$process p, v$session s where p.addr=s.paddr

如果强行使用orakill杀了某个会话的线程,则该会话再执行操作则会换回ora-03113:

SYS@ning>select * from v$version;
select * from v$version
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

这和使用alter system kill是不一样的,alter system kill session后:

SYS@ning>select * from v$version;
select * from v$version
*
ERROR at line 1:
ORA-00028: your session has been killed


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/193161/viewspace-50326/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/193161/viewspace-50326/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值