AUTOMATIC KILL SNIPED SESSIONS IN RAC DATABASE

Muchas veces surge la necesidad de killear de manera automatica las sessiones en estado SNIPED basado en un periodo de tiempo, para lo cual podemos usar el siguiente procedure, el cual esta adaptado para BDs RAC.

1.-Procedure que killea todas las sessiones en estado SNIPED de una BD RAC.

CREATE OR REPLACE PROCEDURE KILL_SNIPED_SESSIONS AS
BEGIN
FOR cur_rec IN (select ‘alter system disconnect session ”’ || sid || ‘, ‘ || serial# || ‘, @’|| inst_id || ”’ immediate’ AS ddl
from gv$session
where status=’SNIPED’
)
LOOP
BEGIN
EXECUTE IMMEDIATE cur_rec.ddl;
EXCEPTION
WHEN OTHERS THEN
null;
RAISE;
END;
END LOOP;
END;
/

 

2.-Se schedula el procedure usando job scheduler para que se ejecute cada hora.

BEGIN
DBMS_SCHEDULER.create_job (
job_name => ‘KILL_SNIPED_SESSIONS_JOB’,
comments => ‘Mata sesiones en estado SNIPED cada hora by JP.’,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘BEGIN sys.KILL_SNIPED_SESSIONS; END;’,
start_date => SYSTIMESTAMP,
repeat_interval => ‘freq=HOURLY;interval=1’,
enabled => TRUE);
END;
/