oracle inactive死鏈接

  oracle 鏈接一般分爲三種Active 代表當前鏈接的session正在進行處理, inactive 代表當前鏈接正在等待進行處理(不是一般理解上的執行完畢) 如何處理inactive 鏈接,防止過多佔用資源,由於inactive 一般是由應用程序在關鏈接之間致使的問題。特別是有些鏈接未在finally 中進行關閉。kill 表示當前sql處理已取消,等特rollback. 這裏可進行以下處理:  
1. 命令行處理     
 windows 系統下oracle 提供orakill  進行殺,注意不能經過plsql 進行kill那種kill
select A.SID,B.SPID,A.SERIAL#,a.lockwait,A.USERNAME,A.OSUSER,a.logon_time,a.last_call_et/3600 LAST_HOUR,A.STATUS, 'orakill '||sid||' '||spid HOST_COMMAND,'alter system kill session '''||A.sid||','||A.SERIAL#||'''' SQL_COMMANDfrom v$session A,V$PROCESS B where A.PADDR=B.ADDR AND a.type!='BACKGROUND' and a.status='INACTIVE' and a.last_call_et>7200 and a.username='NETFORCE' and a.machine='imep1'
經過這樣查詢出來的語句進行手工kill
另外一種是經過存儲過程定時
CREATE OR REPLACE PROCEDURE "PROC_KILL_SESSION" AS  v_sid number;  v_serial number;  killer varchar2(1000);  CURSOR cursor_session_info is  select sid,serial# from v$session where type!='BACKGROUND' and status='INACTIVE' and last_call_et>7200 and username='NETFORCE' and machine='imep1'; BEGIN  open cursor_session_info;  loop  fetch cursor_session_info into v_sid,v_serial;  exit when cursor_session_info%notfound;
 killer:='alter system disconnect session '''||v_sid||','||v_serial||''' post_transaction immediate'; -- killer:='alter system kill session '''||v_sid||','||v_serial||'''  immediate';  execute immediate killer;  end loop;  dbms_output.PUT_LINE(cursor_session_info%rowcount||' users with idle_time>7200s have been killed!');  close cursor_session_info; END; /
再經過編寫一個job進行
BEGIN DBMS_JOB.SUBMIT( job => job, what => 'kill_session;', next_date => SYSDATE, interval => 'sysdate + 120/1440'); --120minutes
commit; END; /-
相關文章
相關標籤/搜索