• Oracle_Kill_Session_终极篇


    GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
    https://cnsendnet.taobao.com
    来自森大科技官方博客
    http://www.cnsendblog.com/index.php/?p=1600

    Oracle Kill Session 终极篇

    环境:

             NLSRTL                                                                              10.2.0.2.0         Production

    Oracle Database 10g Enterprise Edition        10.2.0.2.0         64bi

    PL/SQL                                                                               10.2.0.2.0         Production

    TNS for IBM/AIX RISC System/6000:               10.2.0.2.0         Productio

    问题/解决:

             在用Toad 使用sys as dba用户登录,kill oracle session时,发现有一些session并杀不掉于是用命令行进行杀。

    用于查找有所有session的语句:

    select sid,serial#,username,status from v$session where status!='KILLED' and username is not null;

    kill session的语句:

             Alter system kill session ‘sid,serial#’;

    Kill session后,需要等待一段时间,执行以下语句,看看是否有还有没有杀掉的进程:

    select sid,serial#,username,status from v$session where status ='KILLED';

    发现过了1个小时,还有以下四个进程并没有被杀掉,于是就需要强行杀掉该进程了。

           SID    SERIAL# USERNAME                       STATUS 

    ---------- ---------- ------------------------------ --------

          1047        355 SYMBOLS                        KILLED 

          1059       1599 SYMBOLS                        KILLED 

          1103          1 SYS                            KILLED 

          1104          2 SYS                            KILLED 

    执行以下语句,此语句是为了获得进程地址:

    select * from (select s.username,s.serial#,s.sid,s.status,x.addr,x.ksllapsc,x.ksllapsn,x.ksllaspo,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) a,(select p.addr from v$process p where pid <> 1

     minus

    select s.paddr from v$session s where s.status='KILLED') b where a.addr = b.addr;

    结果如图所示:

    可以看到如上图所示,此处username、serial#、sid、status均为空的则是我们需要的已经被Killed的,我们可以通过此处的地址,在v$process中找到spid也就是我们需要杀的进程,下面没行后面跟的数字就是我查到的spid。

    select spid from v$process where addr ='070000004F7BDE78'; 2597048

    select spid from v$process where addr ='070000004F7B9798'; 2609252

    select spid from v$process where addr ='070000004F79C6F8'; 463032

    select spid from v$process where addr ='070000004F79CED8'; 352444

    select spid from v$process where addr ='070000004F7A0DD8'; 1142874

    select spid from v$process where addr ='070000004F7BA758'; 1519700

    select spid from v$process where addr ='070000004F7A05F8'; 1261676

    这里有一个问题,就是我们上面在被killed的session只有4个,而这里却有7个,于是,我们需要在服务器上面查找相关的进程,如下图所示:

    我发现在查找7个进程的时候,有4个后面明显带有f10001003ac24a0之类的地址,也就是f1000开头的,于是就kill掉这4个进程,在察看数据库中果然好了,哈哈。

    GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
    https://cnsendnet.taobao.com
    来自森大科技官方博客
    http://www.cnsendblog.com/index.php/?p=1600

  • 相关阅读:
    多机部署之定时任务完整方案
    老项目多机部署初步解决方案
    java多线程与线程池
    HotSpot项目结构
    调试HotSpot源代码
    在Ubuntu 16.04上编译OpenJDK8的源代码
    研究Java语言的编译器和虚拟机可参阅的资料
    我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了
    hotspot编译
    研究小技巧及专业术语
  • 原文地址:https://www.cnblogs.com/cnsend/p/15113487.html
Copyright © 2020-2023  润新知