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

2021-10-10 18:07:32 字數 1490 閱讀 5104

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程序

以下親自實戰:

select username,lockwait,status,sid,serial#,machine,program from v$session where sid in

(select session_id from v$locked_object);

select s.username,s.lockwait,s.status,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;

以上兩條sql查詢死鎖的程序

alter system kill session '97,43'; 43後面不用加#,需要有dba的許可權

ORACLE死鎖的解決

死鎖是資料庫經常發生的問題,資料庫一般不會無緣無故產生死鎖,死鎖通常都是由於我們應用程式的設計本身造成的。產生死鎖時,如何解決呢,下面是常規的解決辦法 1 執行下面sql,先檢視哪些表被鎖住了 select b.owner,b.object name,a.session id,a.locked mo...

解決oracle死鎖

查哪個過程被鎖 查v db object cache檢視 select from v db object cache where owner 過程的所屬使用者 and locks 0 2.查是哪乙個sid,通過sid可知道是哪個session.查v access檢視 select from v ac...

oracle死鎖解決

自己實施測試成功步驟 a.查詢死鎖的使用者相關資訊 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 sess...