在oracle中,可以利用dba用戶執行“select username,lockwait,status,machine,program from v$Session where sid in”語句來查詢死鎖,若有結果則會顯示死鎖。
本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。
oracle如何查詢死鎖
1、查看死鎖
1)用dba用戶執行以下語句
select?username,lockwait,status,machine,program?from?v$session?where?sid?in (select?session_id?from?v$locked_object)
如果有輸出的結果,則說明有死鎖,且能看到死鎖的機器是哪一臺。字段說明:
Username:死鎖語句所用的數據庫用戶;
Lockwait:死鎖的狀態,如果有內容表示被死鎖。
Status: 狀態,active表示被死鎖
Machine: 死鎖語句所在的機器。
Program: 產生死鎖的語句主要來自哪個應用程序
2)用dba用戶執行以下語句,可以查看到被死鎖的語句。
select?sql_text?from?v$sql?where?hash_value?in (select?sql_hash_value?from?v$session?where?sid?in (select?session_id?from?v$locked_object))
2、死鎖的解決方法
1)查找死鎖的進程:
SELECT?s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#, l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM?V$LOCKED_OBJECT?l,V$SESSION?S?WHERE?l.SESSION_ID=S.SID;
2)kill掉這個死鎖的進程:alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果還不能解決:
select?pro.spid?from?v$session?ses, v$process?pro where ses.sid=XX and?ses.paddr=pro.addr;
其中sid用死鎖的sid替換:
推薦教程:《Oracle視頻教程》
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦