ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle中已killed session的处理

oracle中已killed session的处理

原创 Linux操作系统 作者:xfxyxh 时间:2008-05-15 11:00:24 0 删除 编辑

        今天对数据库巡查的时候发现有个session已经killed但是oracle很久都没有把资源回收,session标志为killed肯定是有人用alter system kill session 'sid,serial#' 来杀进程了,被kill的进程由于其paddr发生变化,已经不能通过v$session和v$process视图关联来查找spid了,怎么办呢?
        首先通过下面sql查找在v$process中存在而不在v$session中存在的进程:
        select p.addr from v$process p where pid <> 1
        minus
        select s.paddr from v$session s;

        查询显示结果如下:
        ADDR
        ----------------
 
       C0000005C32975D8
        C0000005C3297AE0
        C0000005C3297FE8

        确认这些进程是否为重要的后台进程:
        select spid, username, terminal, program, background from v$process where addr in ('C0000005C32975D8', 'C0000005C3297AE0', 'C0000005C3297FE8');

         查询结果:
SPID     USERNAME TERMINAL              PROGRAM                          BACKGROUND
------------ -------- ------------------------------ -----------------------------------  ---------------------
6857         oracle   UNKNOWN                  
oracle@mgdev (S000)
6859         oracle   UNKNOWN                  
oracle@mgdev (D000)
9370         oracle   UNKNOWN                  
oracle@mgdev
(TNS V1-V3)

        可以看到都不是重要的后台进程,前两个是和共享服务器相关的进程,第3个就是要找的进程了,它正好也是通过TNS连上的,执行:
        kill -9 9370,然后查询:
        select sid, username, program, machine, status from v$session where status='KILLED';

        没有返回任何结果,至此处理完毕。

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-13

  • 博文量
    21
  • 访问量
    92412