一、問題的提出
很多的時候我們迅速的殺掉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 的程序長時間鎖定系統資源不釋放。通常的做法是重啟資料庫,但這樣就以為著資料庫服務的中斷。這裡介紹另外一種好用方便的方法 ...