ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 删除不活动会话进程

oracle 删除不活动会话进程

原创 Linux操作系统 作者:jinyuhuahan 时间:2009-04-01 09:45:42 0 删除 编辑
在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博客 ” ,链接:http://blog.itpub.net/14870673/viewspace-582687/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle 面试题
请登录后发表评论 登录
全部评论

注册时间:2009-03-17

  • 博文量
    19
  • 访问量
    24911