• 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
  • 相关阅读:
    foj 2111 Problem 2111 Min Number
    hdoj 1175 连连看
    poj 2377 Bad Cowtractors
    poj 3666 Making the Grade
    2018华南理工大学程序设计竞赛 H-对称与反对称
    hdoj 4293 Groups
    FOJ Problem 2273 Triangles
    poj 3411 Paid Roads
    Codeforces 235A. LCM Challenge
    离散对数二连 poj 2417 Discrete Logging & HDU 2815 Mod Tree
  • 原文地址:https://www.cnblogs.com/chendian0/p/14845302.html
Copyright © 2020-2023  润新知