快速的殺掉Oracle的Session

來源:互聯網
上載者:User
 

一、問題的提出
很多的時候我們迅速的殺掉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

 

b、  找到這個session所對應的spid

 

 

c、  殺掉spid所標識的那個進程

如果你的Oracle是在Unix平台上的,可以用kill。

    $kill 13824

如果你的Oracle是在windown平台上的,有一些的不同,因為windown是以thead來代替process的,需要用到sid和spid兩個值,所用的命令也由kill替換為Orakill,格式為:orakill sid spid

       C:/>orakill 941 13824

d、  再查一下v$session,看會話在不在了。

2、  如何謀殺掉所有的Oracle的使用者的進程呢?

a、  windows的環境,執行如中的SQL,並把結果存成.bat的檔案,比如kill.bat, 執行一下kill.bat就可以了。

 

 

b、  Unix的環境相對來說就簡單多了,執行如下的命令就可以了

$ ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill

 然後你再shutdown immediate就很快的了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.