-- 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