我想爲Oracle寫kill_inactive會話存儲過程。
像Oracle殺死非活動會話存儲過程
create or replace procedure kill_inactive_sessions as
begin
for rec in (select sid, serial# from sys.v_$session where status = 'INACTIVE')
loop
execute immediate 'alter system kill session '''|| rec.sid || ',' || rec.serial# || ''' IMMEDIATE';
end loop;
end kill_inactive_sessions;
上不起作用(表或視圖不存在)。
但接下來的選擇工作完全適用於相同的用戶:
select sid, serial# from sys.v_$session where status = 'INACTIVE';
什麼我失蹤?
首先,定義「不起作用」。它會拋出一個錯誤嗎?什麼錯誤?它沒有做你期望的事嗎?其次,你爲什麼要這樣做?你是否意識到絕大多數時間大多數會議都不活動?你會殺死每個不在該特定時刻運行SQL語句的會話。這將導致大量用戶出錯並立即立即登錄。 – 2014-09-18 23:04:58
我受限於用戶連接的數量。我非常確定,在非正常關閉應用程序之後,大部分會話將不會被使用(在運行單元測試之後,應用程序被終止)。所以我試圖釋放那些不會被使用的會話。 – 2014-09-18 23:09:43
你「如何限制用戶連接的數量」?你是指某種數據庫限制嗎?我假設你的應用程序是一個三層應用程序,所以「非正常關機」意味着應用程序服務器崩潰了。通常,我會在數據庫中啓用無連接檢測,以便數據庫可以清理客戶端更有效終止的連接。但在特定情況下,您肯定只想要終止特定用戶的會話,但並非所有非活動用戶。 – 2014-09-18 23:17:16