【原】杀掉oracle僵死进程

作者:david_zhang@sh 【转载时请以超链接形式标明文章】

链接:http://www.cnblogs.com/david-zhang-index/archive/2012/03/01/2375466.html

1.用oracle命令杀掉

在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:alter system kill session 'sid,serial#';

•获得SID,SERIAL#

select s.username,s.sid,s.serial# from v$session s where username='BOND'

可以根据sid和serial用oracle命令杀掉相应进程

example.

USERNAME                              SID    SERIAL#
------------------------------ ---------- ----------
ORACLE                                  400      45085
ORACLE                                  767      29118

2.操作系统命令杀掉会话

由于Oracle系统忙, PMON没有来的及释放被Kill掉的会话资源,就需要通过操作系统来释放相应的资源

在UNIX或LINUX上系统采用的是线程的,可用KILL命令直接将对应的线程杀掉。基本命令如下:Kill -9 SPID

•获得线程ID

select s.sid,s.serial#,s.MACHINE,s.PROGRAM,p.SPID from v$session s,v$process p where s.PADDR = p.ADDR  and s.username='ORACLE';

可以根据spid用系统命令杀掉相应进程

example.

       SID    SERIAL#   MACHINE     PROGRAM        SPID
---------- ----------   ----------   ----------    ------------------------
       767      29118    UCMSDB03                   17287
       400      45085    UCMSDB03                   19380
       101      37916    UCMSDB03                   20066

由于部分线程,已经使用Oracle的alter  system 命令杀掉了,但实际上资源没有释放。通过上面的语句得不到对应的线程ID,但是可以用下面的方法得到。

select p.spid from v$process  p where not exists (select spid from v$session where paddr=p.addr)

再根据spid用系统命令杀掉相应进程

example.

SPID
------------------------

31662
31664

posted @ 2012-03-01 14:09  david_zhang@sh  阅读(6844)  评论(0编辑  收藏  举报