oracle kill 用戶進程的方法


一、問題的提出       
很多的時候我們迅速的殺掉Oralcle的一些session,理由大體如下:       
    
1、   一些時候,由於我們的數據量很大,相應的事務大並且多,在做shutdown   immediate的時候會花費好多的時間,而我們卻想用shutdown   immediate的方式,而又要把數據庫迅速的shutdown下來。       
    
2、   我們的應用可能使用了會話控制,即在應用的層面控制了一些用戶的連接的數量。但有時可能網絡發生的瞬斷,從而就產生了一些死進程,他們的狀態為Inactive的狀態。當我們用alter   system   kill   session   ‘sid,serial#’進行清除時,這些session的狀態又變成了killed,這些就由Pmon進程來慢慢進行清除了,而你恰恰又是個急脾氣。       
    
3、   系統忽然慢了現來,你發現是某個session在做怪,想迅速把它迅速結束掉。       
    
二、處理方法       
其實處理方法很簡單,是被一些人稱為“謀殺”的一種方法。因為一個session會對應着操作系統中相應的一個進程(process),我們不使用Alter   system   kill   session這種方式了,取而代之則是kill的方式,當session的后台進程被殺掉了,便會促使懶散的Pmon進程迅速進行清理工作。       
    
1、   以一個session做以示例,       
    
a、   找到你要殺掉的那個session,   並記下paddr       
    
select   sid,   username,   paddr,   status   from   v$session       
where   username   =   '用戶名 '   and       
status   =   'INACTIVE ';       
    
b、   找到這個session所對應的spid       
    
select   *   from   v$process   where   addr   =   '上面查尋的paddr ';       
c、   殺掉spid所標識的那個進程       
    
如果你的Oracle是在Unix平台上的,可以用kill。       
    
$kill   spid       
    
如果你的Oracle是在windown平台上的,有一些的不同,因為windown是以thead來代替process的,需要用到sid和spid兩個值,所用的命令也由kill替換為Orakill,格式為rakill   sid   spid       
    
C:\> orakill   sid    spid       
    
d、   再查一下v$session,看會話在不在了。       
    
2、   如何謀殺掉所有的Oracle的用戶的進程呢?       
    
a、windows的環境,執行如下圖中的SQL,並把結果存成.bat的文件,比如kill.bat,   執行一下kill.bat就可以了。       
    
select   'orakill   '||sid|| '   '||spid   as   thread   from       
sys.v_$process   p,   sys.v_$session   s       
where   sid   >   6   and       
p.addr   =   s.paddr   ;       
    
b、   Unix的環境相對來說就簡單多了,執行如下的命令就可以了       
    
$   ps   -ef|grep   $ORACLE_SID|grep   -v   ora_|grep   LOCAL=NO|awk   '{print   $2} '|xargs   kill       
    
然后你再shutdown   immediate就很快的了。       
    
有一些死鎖進程,異常退出后用       
alter   system   kill   session   'sid,   serial# ';無法釋放會話       
可從操作系統直接處理。    


免責聲明!

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



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