oracle如何查詢死鎖

oracle中,可以利用dba用戶執行“select username,lockwait,status,machine,program from v$Session where sid in”語句來查詢死鎖,若有結果則會顯示死鎖。

oracle如何查詢死鎖

本教程操作環境: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
喜歡就支持一下吧
點贊15 分享