首页 > Linux操作系统 > Linux操作系统 > oracle 删除不活动会话进程
|
在oracle中,如果仅用alter system kill session 的话, session 会被标识为killed, 并将session的paddr值修改,让v$session和v$process不能通信。然后由pmon进行定时清理。或者当客户端重连时,立即调用pmon清理,但一般不活动的会话要等客户端重连再进行清理的话,时间难以估计。并且让pmon定时清理也是不知何年何月。(自行做过测试,将一个会话kill后,等了两个小时,oracle仍未清理) 在这种情况下,可以通过下面的脚本快速kill 不活动会话进程. #!/bin/bash tmpfile=/tmp/tmp.$$ sqlplus ' / as sysdba' << EOF set heading off spool on spool $tmpfile select p.SPID from v\$session s,v\$process p where s.paddr= p.addr and s.STATUS='SNIPED' ; spool off set serveroutput on ; declare v_sid number; v_serial number; v_sql varchar2(200) ; CURSOR cur_session is select sid, serial# from v\$session where STATUS='SNIPED'; begin open cur_session ; fetch cur_session into v_sid , v_serial ; while cur_session%found loop dbms_output.put_line('kill!') ; v_sql:= 'alter system kill session '||''''||v_sid||','||v_serial||''''; execute immediate v_sql ; fetch cur_session into v_sid , v_serial ; end loop ; close cur_session ; end ; / EOF |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14870673/viewspace-582687/ ,如需转载,请注明出处,否则将追究法律责任。