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...