【原】殺掉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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM