oracle 批量殺死 死鎖程序

2021-08-14 04:19:50 字數 1943 閱讀 8788

有時候死鎖時需要殺死的程序有太多,乙個個殺會很麻煩。

因此考慮用語句進行批量殺

這裡要用到的是  單引號與變數拼接,我最初一直卡在這裡。在網上搜到後才解決

最初版:

declare cursor mycur is

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;

begin

for cur in mycur

loop

select count(1) into newcount from  v$locked_object a,v$session b

where a.session_id = b.sid and b.sid=cur.sid and b.serial#=cur.serial#  order by b.logon_time;

execute immediate ( 'alter system  kill session  '''||cur.sid || ','|| cur.serial# ||''' ');

end loop;

end;

提示會話id不存在,剛開始想不通,後來想通了,應該是select語句查出來的sid,serial#存在重複的情況,前面已經kill掉了以後,後面再對這個sid,serial#進行kill就會提示不存在了,所以考慮每次實時進行查詢是否還存在,在execute前加乙個判斷。

改版:declare cursor mycur is

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;

newcount number;

begin

for cur in mycur

loop

select count(1) into newcount from  v$locked_object a,v$session b

where a.session_id = b.sid and b.sid=cur.sid and b.serial#=cur.serial#  order by b.logon_time;

if newcount>=1 then

execute immediate ( 'alter system  kill session  '''||cur.sid || ','|| cur.serial# ||''' ');

end if;

end loop;

end;

執行後發現有效果,但是很慢。

所以想到直接避免迴圈中每次再去查詢:

[sql]

view plain

copy

declare

cursor

mycur 

isselect

b.sid,b.serial#  

from

v$locked_object a,v$session b  

where

a.session_id = b.sid 

group

byb.sid,b.serial#;  

begin

forcur 

inmycur  

loop    

execute

immediate ( 

'alter system  kill session  '

''||cur.sid || 

','|| cur.serial# ||

''' '

);  

endloop;  

end;  

Oracle殺死死鎖程序

oracle殺死死鎖程序 先檢視哪些表被鎖住了 select b.object name,a.session id,c.serial a.locked mode from v locked object a,dba objects b,v session c where b.object id a....

Oracle 殺死死鎖程序

oracle 殺死死鎖程序 利用pl sql developer工具可以很容易模擬死鎖現象。用同乙個資料庫的同乙個使用者登入2個pl sql developer。首先,在其中乙個pl sql developer隨便對資料庫的表執行乙個更新操作,不要提交,狀態為 待提交 然後,在另乙個pl sql d...

Oracle 殺死死鎖程序

利用pl sql developer工具可以很容易模擬死鎖現象。用同乙個資料庫的同乙個使用者登入2個pl sql developer。首先,在其中乙個pl sql developer隨便對資料庫的表執行乙個更新操作,不要提交,狀態為 待提交 然後,在另乙個pl sql developer執行同樣的操...