Oracle死鎖的檢視以及解決辦法

abin1703發表於2016-07-25
1、檢視死鎖是否存在

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、檢視死鎖的語句

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));

3、死鎖的解決辦法

1)查詢死鎖的程式:

sqlplus "/as sysdba" (sys/change_on_install)
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替換: exit
ps -ef|grep spid

  其中spid是這個程式的程式號,kill掉這個Oracle程式




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2122531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章