快速的殺掉Oracle的Session

2021-04-19 23:48:49 字數 1243 閱讀 8076

一、問題的提出

很多的時候我們迅速的殺掉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 ''|xargs kill

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

殺掉oracle的死鎖

關閉oracle死鎖程序的具體步驟 有效關閉oracle死鎖程序的具體步驟 查哪個過程被鎖 查v db object cache檢視 select from v db object cache where owner 過程的所屬使用者 and locks 0 2.查是哪乙個sid,通過sid可知道是...

殺掉ORACLE會話的步驟

1.檢視被鎖的物件 select b.object name,machine,c.sid,c.serial b.status,d.pid,d.spid,d.addr from locked object a,dba objects b,session c,v process d where a.ob...

ORACLE殺掉沒有釋放的的sql

oracle殺掉沒有釋放的的sql程序分類 資料庫 mysql 文章 如何完全殺掉帶鎖的程序並釋放資源 oracle資料庫管理人員經常會遇到這樣的問題 狀態已被置為 killed 的程序長時間鎖定系統資源不釋放。通常的做法是重啟資料庫,但這樣就以為著資料庫服務的中斷。這裡介紹另外一種好用方便的方法 ...