plsql下批量KILL进程

declare 
  v_minutes NUMBER:=1000;
  v_Str VARCHAR2(100);
  CURSOR C_users(v_minutes number) IS
   SELECT s.username, 
         s.status, s.machine, 'alter system kill session ' 
         ||''''||s.sid||','||s.serial# ||'''' operates
   FROM v$session s, v$process p
   WHERE TYPE = 'USER'
   AND p.addr = s.paddr
   AND status != 'KILLED'
   and exists
       (select 1
        from dba_ddl_locks a,
             v$session b
        where a.session_id=b.SID
        and b.USERNAME NOT IN ('IFSAPP','AUTOS','THK')  --
        and b.sid = s.sid)
   ORDER BY last_call_et desc;
BEGIN
   FOR T_users IN C_users(v_minutes) LOOP
     v_Str := T_USERS.OPERATES;
     BEGIN
     EXECUTE IMMEDIATE v_str;
     EXCEPTION 
      WHEN OTHERS THEN
       NULL;
     END;
   END LOOP;
END;

猜你喜欢

转载自blog.csdn.net/delphi1234/article/details/51546761