select session_id from v$locked_object;
創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的玉環(huán)網(wǎng)站建設(shè)公司,玉環(huán)接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行玉環(huán)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
SELECT sid, serial#, username, osuser FROM v$session where sid = 71;
ALTER SYSTEM KILL SESSION '71,1089';
1.第一步:使用Linux的kill命令殺死所有與oracle有關(guān)的進(jìn)程。 1)查詢(xún)到與ORACLE_SID相關(guān)的oracle進(jìn)程 $ ps -ef |grep $ORACLE_SID oracle 7776 1 0 22:51 ? 00:00:00 ora_pmon_ora10g oracle 7778 1 0 22:51 ? 00:00:00 ora_psp0_ora10g oracle...
方法/步驟
1.查詢(xún)哪些對(duì)象被鎖:
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.殺死進(jìn)程:
alter system kill session '137,233'; (其中137,223分別是上面查詢(xún)出的sid,serial#)
PS.以上兩步,可通過(guò)Oracle的管理控制臺(tái)來(lái)執(zhí)行。
如果利用上面的方法殺死進(jìn)程后,進(jìn)程狀態(tài)雖被置為"killed",但是鎖定的資源很長(zhǎng)時(shí)間沒(méi)有被釋放,那么可以在OS一級(jí)再殺死相應(yīng)的進(jìn)程(線程)
1.首先獲得進(jìn)程(線程)號(hào):
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上殺死這個(gè)進(jìn)程(線程):
1)在unix上,用root身份執(zhí)行命令:
#kill -9 12345(即上面查詢(xún)出的spid)
2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345
orakill是oracle提供的一個(gè)可執(zhí)行命令,語(yǔ)法為:orakill sid thread
其中:
sid:表示要?dú)⑺赖倪M(jìn)程屬于的實(shí)例名
thread:是要?dú)⒌舻木€程號(hào),即上面查詢(xún)出的spid。
1.查哪個(gè)過(guò)程被鎖
查V$DB_OBJECT_CACHE視圖:
SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER='過(guò)程的所屬用戶'ANDLOCKS!='0';
2. 查是哪一個(gè)SID,通過(guò)SID可知道是哪個(gè)SESSION.
查V$Access視圖:
SELECT*FROMV$ACCESSWHEREOWNER='過(guò)程的所屬用戶'ANDNAME='剛才查到的過(guò)程名';
3. 查出SID和SERIAL#
查V$SESSION視圖:
SELECTSID,SERIAL#,PADDRFROMV$SESSIONWHERESID='剛才查到的SID'
查V$PROCESS視圖:
SELECTSPIDFROMV$PROCESSWHEREADDR='剛才查到的PADDR';
4. 殺進(jìn)程(1).先殺ORACLE進(jìn)程:
ALTERSYSTEMKILLSESSION'查出的SID,查出的SERIAL#';
(2).再殺操作系統(tǒng)進(jìn)程:
KILL-9剛才查出的SPID或ORAKILL剛才查出的SID剛才查出的SPID方法二:
經(jīng)常在oracle的使用過(guò)程中碰到這個(gè)問(wèn)題,所以也總結(jié)了一點(diǎn)解決方法:)
1)查找死鎖的進(jìn)程:
sqlplus"/assysdba"
SELECTs.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESSFROMV$LOCKED_OBJECTl,V$SESSIONSWHEREl.SESSION_ID=S.SID;
2)kill掉這個(gè)死鎖的進(jìn)程:
altersystemkillsession‘sid,serial#’;(其中sid=l.session_id)
3)假如還不能解決,
selectpro.spidfromv$sessionses,v$processprowhereses.sid=XXandses.paddr=pro.addr;
其中sid用死鎖的sid替換。
方法/步驟\x0d\x0a1.查詢(xún)哪些對(duì)象被鎖:\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.殺死進(jìn)程:\x0d\x0aalter system kill session '137,233'; (其中137,223分別是上面查詢(xún)出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上兩步,可通過(guò)Oracle的管理控制臺(tái)來(lái)執(zhí)行。\x0d\x0a\x0d\x0a如果利用上面的方法殺死進(jìn)程后,進(jìn)程狀態(tài)雖被置為"killed",但是鎖定的資源很長(zhǎng)時(shí)間沒(méi)有被釋放,那么可以在OS一級(jí)再殺死相應(yīng)的進(jìn)程(線程)\x0d\x0a\x0d\x0a1.首先獲得進(jìn)程(線程)號(hào):\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上殺死這個(gè)進(jìn)程(線程):\x0d\x0a\x0d\x0a1)在unix上,用root身份執(zhí)行命令: \x0d\x0a#kill -9 12345(即上面查詢(xún)出的spid)\x0d\x0a\x0d\x0a2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345\x0d\x0aorakill是oracle提供的一個(gè)可執(zhí)行命令,語(yǔ)法為:orakill sid thread\x0d\x0a其中:\x0d\x0asid:表示要?dú)⑺赖倪M(jìn)程屬于的實(shí)例名\x0d\x0athread:是要?dú)⒌舻木€程號(hào),即上面查詢(xún)出的spid。
SQLselect session_id from v$locked_object;
49
SQLSELECT sid, serial#, username ?FROM v$session where sid = 49;
49 ?554 ?system
SQLALTER SYSTEM KILL SESSION '49, 554';
用的是客戶端登錄,直接關(guān)掉客戶端就可以了,因?yàn)槟愕目蛻舳艘彩莻€(gè)session
普通用戶也可以,因?yàn)槭悄氵@個(gè)用戶開(kāi)啟這個(gè)進(jìn)程,那么你也可以關(guān)閉這個(gè)進(jìn)程。
3.盡量用dba權(quán)限的用戶操作,還有可以到主機(jī)上 kill -9 spid 會(huì)更快。