SQLselect session_id from v$locked_object;
創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站設計、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元香坊做網(wǎng)站,已為上家服務,為香坊各地企業(yè)和個人服務,聯(lián)系電話:18982081108
49
SQLSELECT sid, serial#, username ?FROM v$session where sid = 49;
49 ?554 ?system
SQLALTER SYSTEM KILL SESSION '49, 554';
用的是客戶端登錄,直接關(guān)掉客戶端就可以了,因為你的客戶端也是個session
普通用戶也可以,因為是你這個用戶開啟這個進程,那么你也可以關(guān)閉這個進程。
3.盡量用dba權(quán)限的用戶操作,還有可以到主機上 kill -9 spid 會更快。
一、工具
pl/sql數(shù)據(jù)庫
二、操作步驟
首先通過pl/sql查詢到目前長時間活動的進程:
2.選擇sessions,得到界面:
3.得到某個SID和serialId.
然后切換到超級用戶下面,執(zhí)行下面下面:select?c.spid?from?v$process?c?where?c.addr=(select?b.paddr?from?v$session?b
where?b.sid=?'15'?and?b.serial#=?'16985')?得到spid.?然后登錄到數(shù)據(jù)庫的機器,執(zhí)行如下命令即完成殺掉oracle進程:
三、注意事項:如果是生產(chǎn)環(huán)境,要盡量減少停機時間,讓數(shù)據(jù)庫盡快恢復使用。
select session_id from v$locked_object;
SELECT sid, serial#, username, osuser FROM v$session where sid = 71;
ALTER SYSTEM KILL SESSION '71,1089';
方法/步驟\x0d\x0a1.查詢哪些對象被鎖:\x0d\x0aselect object_name,machine,s.sid,s.serial# \x0d\x0afrom v$locked_object l,dba_objects o ,v$session s\x0d\x0awhere l.object_id = o.object_id and l.session_id=s.sid;\x0d\x0a\x0d\x0a2.殺死進程:\x0d\x0aalter system kill session '137,233'; (其中137,223分別是上面查詢出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上兩步,可通過Oracle的管理控制臺來執(zhí)行。\x0d\x0a\x0d\x0a如果利用上面的方法殺死進程后,進程狀態(tài)雖被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在OS一級再殺死相應的進程(線程)\x0d\x0a\x0d\x0a1.首先獲得進程(線程)號:\x0d\x0aselect spid, osuser, s.program \x0d\x0afrom v$session s,v$process p\x0d\x0awhere s.paddr=p.addr and s.sid=137 (137是上面的sid)\x0d\x0a\x0d\x0a2.在OS上殺死這個進程(線程):\x0d\x0a\x0d\x0a1)在unix上,用root身份執(zhí)行命令: \x0d\x0a#kill -9 12345(即上面查詢出的spid)\x0d\x0a\x0d\x0a2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345\x0d\x0aorakill是oracle提供的一個可執(zhí)行命令,語法為:orakill sid thread\x0d\x0a其中:\x0d\x0asid:表示要殺死的進程屬于的實例名\x0d\x0athread:是要殺掉的線程號,即上面查詢出的spid。
方法/步驟
1.查詢哪些對象被鎖:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.殺死進程:
alter system kill session '137,233'; (其中137,223分別是上面查詢出的sid,serial#)
PS.以上兩步,可通過Oracle的管理控制臺來執(zhí)行。
如果利用上面的方法殺死進程后,進程狀態(tài)雖被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在OS一級再殺死相應的進程(線程)
1.首先獲得進程(線程)號:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=137 (137是上面的sid)
2.在OS上殺死這個進程(線程):
1)在unix上,用root身份執(zhí)行命令:
#kill -9 12345(即上面查詢出的spid)
2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345
orakill是oracle提供的一個可執(zhí)行命令,語法為:orakill sid thread
其中:
sid:表示要殺死的進程屬于的實例名
thread:是要殺掉的線程號,即上面查詢出的spid。
1.查哪個過程被鎖
查V$DB_OBJECT_CACHE視圖:SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER='過程的所屬用戶'ANDLOCKS!='0';
2. 查是哪一個SID,通過SID可知道是哪個SESSION.
查V$ACCESS視圖:SELECT*FROMV$ACCESSWHEREOWNER='過程的所屬用戶'ANDNAME='剛才查到的過程名';
3. 查出SID和SERIAL#
查V$SESSION視圖:SELECTSID,SERIAL#,PADDRFROMV$SESSIONWHERESID='剛才查到的SID'查V$PROCESS視圖:SELECTSPIDFROMV$PROCESSWHEREADDR='剛才查到的PADDR';
4. 殺進程(1).先殺ORACLE進程:ALTERSYSTEMKILLSESSION'查出的SID,查出的SERIAL#';(2).再殺操作系統(tǒng)進程:KILL-9剛才查出的SPID或ORAKILL剛才查出的SID剛才查出的SPID方法二:經(jīng)常在oracle的使用過程中碰到這個問題,所以也總結(jié)了一點解決方法:)1)查找死鎖的進程:sqlplus"/assysdba"SELECT
s.username,l.
OBJECT_ID
,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESSFROMV$LOCKED_OBJECTl,V$SESSIONSWHERE
l.SESSION_ID=
S.SID;2)kill掉這個死鎖的進程:altersystemkillsession‘sid,serial#’;(其中sid=
l.session_id)3)如果還不能解決,
selectpro.spidfromv$sessionses,v$processprowhereses.sid=XXandses.paddr=pro.addr;其中sid用死鎖的sid替換。