鎖表,相信大家都遇到過,解鎖的方法想必大家也都知道,但是一個個的殺進程難免有些低級,我們用預存程序來實現這一功能,就變得異常簡單了。
1.建立視圖,查詢進程資訊,注意要給目前使用者賦予系統許可權select any dictionary
create or replace view mysession as
select b.sid,b.serial# from v$lock a,v$session b where a.SID = b.SID and status='INACTIVE'
--and program<>'plsqldev.exe'
order by machine;
2.建立預存程序,迴圈上邊試圖中的資料,一一kill,注意需要目前使用者賦予系統許可權alter system
create or replace procedure kill_session is
v_sid varchar2(30);
v_serial varchar2(30);
v_sql varchar2(1000);
TYPE DyData IS REF CURSOR;
rows DyData;
begin
v_sql := 'select * from mysession ';
OPEN rows FOR v_sql;
LOOP
FETCH rows
into v_sid, v_serial;
v_sql := 'alter system kill session ''' || v_sid || ',' || v_serial || '''';
execute immediate v_sql;
--dbms_output.put_line(v_userid || '__' || v_user || '__' || v_pwd);
EXIT WHEN rows%NOTFOUND;
END LOOP;
end kill_session;
3.執行預存程序
begin
-- Call the procedure
kill_session;
end;
注意有時候可能會把自己的進程也殺掉,只需要自己修改一下第一步的視圖,把自己排除即可。
Oracle 10 DBMS_MONITOR跟蹤和分析其它session SQL
快速找到跟蹤其他session產生的trc檔案
Oracle 徹底 kill session
MySQL主從故障處理--session 層級參數複製錯誤
如何查看Oracle資料庫的session阻塞