Oracle檢視死鎖

2021-04-22 22:46:49 字數 2568 閱讀 5747

檢視有哪些表被鎖住

select b.owner,b.object_name,a.session_id,a.locked_mode

from v$locked_object a,dba_objects b

where b.object_id = a.object_id

select b.username,b.sid,b.serial#,logon_time

from v$locked_object a,v$session b

where a.session_id = b.sid order by b.logon_time

殺程序中的會話

alter system kill session 'sid,serial#';

e.galter system kill session '29,5497';

如果有ora-00031錯誤,則在後面加immediate;alter system kill session '29,5497' immediate;

如何殺死oracle死鎖程序

1.查哪個過程被鎖:

查v$db_object_cache檢視:

select * from v$db_object_cache where owner='過程的所屬使用者' and clocks!='0';

2. 查是哪乙個sid,通過sid可知道是哪個session:

查v$access檢視:

select * from v$access where owner='過程的所屬使用者' and name='剛才查到的過程名';

3. 查出sid和serial#:

查v$session檢視:

select sid,serial#,paddr from v$session where sid='剛才查到的sid';

查v$process檢視:

select spid from v$process where addr='剛才查到的paddr';

4. 殺程序:

(1)先殺oracle程序:

alter system kill session '查出的sid,查出的serial#';

(2)再殺作業系統程序:

kill -9 剛才查出的spid或orakill 剛才查出的sid 剛才查出的spid。

oracle的死鎖

查詢資料庫死鎖:

select t2.username||'  '||t2.sid||' 

'||t2.serial#||'  '||t2.logon_time||' 

'||t3.sql_text

from v$locked_object t1,v$session t2,v$sqltext t3

where t1.session_id=t2.sid

and t2.sql_address=t3.address

order by t2.logon_time;

查詢出來的結果就是有死鎖的session了,下面就是殺掉,拿到上面查詢出來的sid和serial#,填入到下面的語句中:

alter system kill session 'sid,serial#';

一般情況可以解決資料庫存在的死鎖了,或通過session id 查到對應的作業系統程序,在unix中殺掉作業系統的程序。

select a.username,c.spid as os_process_id,c.pid

as oracle_process_id from v$session a,v$process c

where c.addr=a.paddr and a.sid= and a.serial#= ;

然後採用kill (unix) 或 orakill(windows )。

在unix中:

ps -ef|grep os_process_id

kill -9 os_process_id

ps -ef|grep os_process_id

經常在oracle的使用過程中碰到這個問題,所以也總結了一點解決方法。

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

檢視死鎖p lockinfo

set quoted identifier on go set ansi nulls on go exec proc p lockinfo 0,0 alter proc p lockinfo kill lock spid bit 1,是否殺掉死鎖的程序,1 殺掉,0 僅顯示 show spid if...

GDB 檢視死鎖

死鎖 一種情形,此時執行程式中兩個或多個執行緒發生永久堵塞 等待 每個執行緒都在等待被 其他執行緒占用並堵塞了的資源。例如,如果執行緒a鎖住了記錄1並等待記錄2,而執行緒b鎖住了記錄2並等待記錄1,這樣兩個執行緒就發生了死鎖現象。gdb除錯死鎖的方法 gdb attach pid 找到 lll lo...

SQL Server 檢視死鎖

use master goselect top 100 session id request id start time as 開始時間 status as 狀態 command as 命令 dest.text as sql語句 db name database id as 資料庫名 blockin...