当前位置:  数据库>oracle

Oracle 彻底 kill session

    来源: 互联网  发布时间:2017-05-23

    本文导语: kill session 是DBA经常碰到的事情之一。如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生。同时也应当注意,如果kill 的session属于Oracle 后台进程,则容易导致数据库实例宕机。 通常情况下,并不需...

kill session 是DBA经常碰到的事情之一。如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生。同时也应当注意,如果kill 的session属于Oracle 后台进程,则容易导致数据库实例宕机。

通常情况下,并不需要从操作系统级别杀掉Oracle会话进程,但并非总是如此,下面的描述中给出了在Oracle级别杀掉会话以及操作系统级别杀掉进程。 
 
一、获得需要kill session的信息(使用V$SESSION 和 GV$SESSION视图) 
 
 
  SET LINESIZE 180
 
  COLUMN spid FORMAT A10
 
  COLUMN username FORMAT A10
 
  COLUMN program FORMAT A40
 
 

  SELECT s.inst_id,
 
        s.sid,
 
        s.serial#,
 
        p.spid,
 
        s.username,
 
        s.program,
 
        s.paddr,
 
        s.STATUS
 
  FROM  gv$session s
 
        JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
 
  WHERE  s.type != 'BACKGROUND';
 
 

    INST_ID        SID    SERIAL# SPID      USERNAME  PROGRAM                                      PADDR    STATUS
 
  ---------- ---------- ---------- ---------- ---------- --------------------------------------------- -------- --------
 
          1        146        23 27573      TEST      sqlplus@oracle10g (TNS V1-V3)                4C621950 INACTIVE
 
          1        160        17 27610      SYS        sqlplus@oracle10g (TNS V1-V3)                4C624174 ACTIVE
 
          1        144        42 27641      SCOTT      sqlplus@oracle10g (TNS V1-V3)                4C624730 INACTIVE
 
       

二、使用ALTER SYSTEM KILL SESSION 命令实现
 
  语法:
 
      SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';
 
      SQL> ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
 
   

    对于RAC环境下的kill session ,需要搞清楚需要kill 的session 位于哪个节点,可以查询GV$SESSION视图获得。
 
    kill session 的时候仅仅是将会话杀掉。在有些时候,由于较大的事务或需要运行较长的SQL语句将导致需要kill的session并不能立即杀掉。对于这种情
 
    况将收到 "marked for kill"提示(如下),一旦会话当前事务或操作完成,该会话被立即杀掉。
 
   

    alter system kill session '4730,39171'
 
    *
 
    ERROR at line 1:
 
    ORA-00031: session marked for kill
 
 
 
 
 
  在下面的操作中将杀掉会话146,144
 
    sys@AUSTIN> alter system kill session '146,23';
 
   

    System altered.
 
   

    sys@AUSTIN> alter system kill session '144,42';
 
   

    System altered.
 
   

    sys@AUSTIN> select inst_id,saddr,sid,serial#,paddr,username,status,program from gv$session where username is not null;
 
   

      INST_ID SADDR          SID    SERIAL# PADDR    USERNAME  STATUS  PROGRAM
 
    ---------- -------- ---------- ---------- -------- ---------- -------- ---------------------------------------------
 
            1 4C70BF04        144        42 4C6545A0 SCOTT      KILLED  sqlplus@oracle10g (TNS V1-V3)
 
            1 4C70E6B4        146        23 4C6545A0 TEST      KILLED  sqlplus@oracle10g (TNS V1-V3)
 
            1 4C71FC84        160        17 4C624174 SYS        ACTIVE  sqlplus@oracle10g (TNS V1-V3)
 
                 

    注意:在查询中可以看到被杀掉的会话的PADDR地址发生了变化,参照查询结果中的红色字体。如果多个session被kill 掉,则多个session的PADDR
 
    被改为相同的进程地址。
 
 
 
  通过下面的语句来找回被kill 掉的ADDR先前的地址
 
    SELECT s.username,s.status,
 
    x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP,
 
    decode(bitand (x.ksuprflg,2),0,null,1)
 
    FROM x$ksupr x,v$session s
 
    WHERE s.paddr(+)=x.addr
 
    and bitand(ksspaflg,1)!=0;     

   

    USERNAME  STATUS  ADDR      KSLLAPSC  KSLLAPSN KSLLASPO      KSLLID1R KS D
 
    ---------- -------- -------- ---------- ---------- ------------ ---------- -- -
 
              ACTIVE  4C623BB8        99          4 27468              275 EV 1
 
              ACTIVE  4C623040          9        24 27444                0    1
 
              ACTIVE  4C622A84        101          4 27480              274 EV 1
 
              ACTIVE  4C6224C8          1        48 27450                0    1
 
              ACTIVE  4C621F0C          1        48 27450                0    1
 
              ACTIVE  4C6235FC          2          4 27468                0    1
 
    SYS        ACTIVE  4C624174          2        15 27442                0
 
              ACTIVE  4C62081C          1        48 27440                0    1
 
              ACTIVE  4C621394          1        48 27440                0    1
 
              ACTIVE  4C620DD8        11        24 27476                0    1
 
              ACTIVE  4C61F6E8        15          4 27610                0    1
 
              ACTIVE  4C620260        222        24 27450                0    1
 
              ACTIVE  4C61FCA4          7        25 27573                0    1
 
              ACTIVE  4C61F12C          6        25 27573                0    1
 
              ACTIVE  4C61EB70          4        24 27458                0    1
 
              ACTIVE  4C61E5B4          1        48 27440                0    1
 
              ACTIVE  4C61DFF8          2        24 27444                0    1
 
                        4C624730          0          0                      0
 
                        4C621950          0          0                      0
 
                        4C61DA3C          0          0                      0
 
                   

 
 
  或者根据下面的语句来获得发生变化的addr
 
    sys@AUSTIN> select p.addr from v$process p where pid 1
 
      2  minus
 
      3  select s.paddr from v$session s;
 
   

    ADDR
 
    --------
 
    4C621950
 
    4C624730     


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,