zoukankan      html  css  js  c++  java
  • X 在Windows上使用orakill结束oracle会话的线程

    在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,请看下面实例。
    1)查oracle所有会话进程线程信息 SET pagesize 100 SET linesize 100 COLUMN Program format a20 SELECT s.sid AS “Sid”, s.serial# AS “Serial#”, p.spid AS “ThreadID”,s.osuser AS “OSUser”, s.program AS “Program” FROM v$process p, v$session s WHERE p.addr = s.paddr(+) ORDER BY s.sid; 2)查oracle系统会话进程线程信息 Select vb.name NAME, vp.program PROCESSNAME, vp.spid THREADID, vs.sid SID From v$session vs, v$process vp, v$bgprocess vb Where vb.paddr <>00and vb.paddr = vp.addr and vp.addr = vs.paddr; 3)查oracle非系统会话进程线程信息 SELECT s.sid AS “Sid”, s.serial# AS “Serial#”, p.spid AS “ThreadID”,s.osuser AS “OSUser”, s.program AS “Program” FROM v$process p, v$session s WHERE p.addr = s.paddr(+) and s.sid not in (select vs.sid SID From v$session vs, v$process vp, v$bgprocess vb Where vb.paddr <>00and vb.paddr = vp.addr and vp.addr = vs.paddr) ORDER BY s.sid; 4)使用orakill工具杀掉oracle非系统会话 SELECT ‘orakill tdb ‘||p.spid AS “ThreadID” FROM v$process p, v$session s WHERE p.addr = s.paddr(+) and s.sid not in (select vs.sid SID From v$session vs, v$process vp, v$bgprocess vb Where vb.paddr <>00and vb.paddr = vp.addr and vp.addr = vs.paddr) ORDER BY s.sid;

    SQL> SELECT 'orakill tdb '||p.spid AS "ThreadID" 2 FROM v$process p, v$session s 3 WHERE p.addr = s.paddr(+) 4 and s.sid not in (select vs.sid SID 5 From v$session vs, v$process vp, v$bgprocess vb 6 Where vb.paddr &lt;&gt; '00' and 7 vb.paddr = vp.addr and 8 vp.addr = vs.paddr) 9 ORDER BY s.sid;
    ThreadID
    ------------------------------------ orakill tdb 492 orakill tdb 2416 orakill tdb 1952 orakill tdb 360 orakill tdb 1204 orakill tdb 2656 orakill tdb 2244 orakill tdb 2020 orakill tdb 1512 orakill tdb 3948 orakill tdb 3744 orakill tdb 2192 orakill tdb 1612 orakill tdb 1240 orakill tdb 600 orakill tdb 1668

    ---其中tdb为数据库实例名

    关于kill session的研究请参考eygle博客:http://www.eygle.com/faq/Kill_Session.htm
  • 相关阅读:
    ios隐藏键盘的方式简单应用
    iosiOStextView实现文字高度自适应
    ios xcode中所有自带的字体如下(最好结合NSMutableAttributedString相结合使用)
    iosNSMutableAttributedString 简单操作
    ios电话监听状态
    iOS拨打电话
    iOS TextField输入框点击键盘时随着键盘上移
    Linux学习之CentOS(七)---常用基本操命令1
    Linux学习之CentOS(六)---mount挂载设备(u盘,光盘,iso等 )
    Linux学习之CentOS(五)--CentOS下VMware-Tools安装
  • 原文地址:https://www.cnblogs.com/chendian0/p/14845302.html
Copyright © 2011-2022 走看看