Search This Blog

Saturday, 24 October 2020

Auto Kill INACTIVE Sessions for more Then 1 Hour

 -- A procedure to disconnect INACTIVE sessions


CREATE OR REPLACE PROCEDURE SYS.DISCONNECT_INACTIVE AS 

BEGIN

  FOR SESSION IN (

         SELECT SID,

                SERIAL#

         FROM

                V$SESSION

         WHERE

                STATUS='INACTIVE' AND 

                USERNAME IS NOT NULL AND LAST_CALL_ET > 3600

                -- [Optional]. 

                -- Only sessions that are in INACTIVE status

                -- longer than 1 hour (or whatever you want)

                -- AND LAST_CALL_ET > 3600

                  )

  LOOP

    EXECUTE IMMEDIATE Q'[ALTER SYSTEM KILL SESSION ']' || SESSION.SID || ',' || SESSION.SERIAL# || Q'[' IMMEDIATE]';

  END LOOP;

END;

/


-- A job to run the procedure on a regular basis


SET SERVEROUTPUT ON

VARIABLE JOB_NUMBER NUMBER;

BEGIN

  DBMS_JOB.SUBMIT(JOB  => :JOB_NUMBER,

                  WHAT => 'SYS.DISCONNECT_INACTIVE;',

                  NEXT_DATE => SYSDATE,           -- Run now

                  INTERVAL  => 'SYSDATE +1/24');  -- Execute every hour

  COMMIT;

END;

/

No comments:

Post a Comment