Friday, April 15, 2016

MWA PL/SQL Procedure to kill idle sessions longer than 12 hours

--This script is to be referenced by the Post:

Automatically Terminate old MWA sessions using PL/SQL and DBMS scheduler

**Note: Special thanks to Justin Hartman.  He made this procedure for other issues, but let me use and alter it for our MWA purposes.


CREATE OR REPLACE PROCEDURE XXX.XXX_MWA_STALE_SESSION_KILL
AS
   V_DB       VARCHAR2 (10);
   V_SQLERR   VARCHAR2 (255);
BEGIN
   SELECT NAME INTO V_DB FROM V$DATABASE;

   DECLARE
      CURSOR GET_MWA_SESSIONS_CUR
      IS
           SELECT A.SCHEMANAME,
                  A.INST_ID,
                  A.SID,
                  A.SERIAL#,
                  A.LOGON_TIME,
                  ROUND (A.last_call_et / 3600) "HOURS_INACTIVE",
                  A.MODULE,
                  LTRIM (A.ACTION, 'IDLE_LAST') "ACTION",
                  A.SQL_ID,
                     'ALTER SYSTEM DISCONNECT SESSION '
                  || ''''
                  || A.SID
                  || ', '
                  || A.SERIAL#
                  || ',@'
                  || A.INST_ID
                  || ''''
                  || ' IMMEDIATE'
                     KILL
             FROM GV$SESSION A
            WHERE     status = 'INACTIVE'
                  AND module = 'MWAJDBC'
                  AND action NOT LIKE '%GENERIC%'
                  AND last_call_et > (3600 * 12) ----INACTIVE FOR GREATER THAN 24 HOURS
         ORDER BY last_call_et DESC;
   BEGIN
      FOR X IN GET_MWA_SESSIONS_CUR
      LOOP
         UTL_MAIL.SEND (
            SENDER       => 'ABC@XYZ.com',
            RECIPIENTS   => 'ABC@XYZ.com',
            SUBJECT      => 'Stale MWA session was killed on ' || V_DB,
            MESSAGE      =>    'The Following MWA session was killed due to being idle longer than 24 hours:'
                            || CHR (13)
                            || CHR (13)
                            || CHR (10)
                            || CHR (13)
                            || CHR (10)
                            || 'Logon Time:     '
                            || TO_CHAR (X.LOGON_TIME,
                                        'DD-MON-YYYY HH24:MI:SS')
                            || CHR (13)
                            || CHR (10)
                            || 'Module:           '
                            || X.MODULE
                            || CHR (13)
                            || CHR (10)
                            || 'REPORT:         '
                            || X.ACTION
                            || CHR (13)
                            || CHR (10)
                            || 'SQL ID:           '
                            || X.SQL_ID);


         DBMS_OUTPUT.PUT_LINE ('EMAIL SENT');
      END LOOP;

      BEGIN
         FOR I IN GET_MWA_SESSIONS_CUR
         LOOP
            INSERT INTO XXX.XXX_KILLED_MWA_USER_SESSIONS
                 VALUES (I.SCHEMANAME,
                         I.INST_ID,
                         I.SID,
                         I.SERIAL#,
                         I.LOGON_TIME,
                         I.HOURS_INACTIVE,
                         I.MODULE,
                         I.ACTION,
                         SYSDATE,
                         I.SQL_ID);

            COMMIT;

            EXECUTE IMMEDIATE I.KILL;

            DBMS_OUTPUT.put_line ('# of rows inserted: ' || SQL%ROWCOUNT);
         END LOOP;
      END;
   END;
EXCEPTION
   WHEN OTHERS
   THEN
      V_SQLERR := SQLERRM;

      BEGIN
         UTL_MAIL.SEND (SENDER       => 'ABC@XYZ.com',
                        RECIPIENTS   => 'ABC@XYZ.com',
                        SUBJECT      => 'MWA_USER check error ' || V_DB,
                        MESSAGE      => V_SQLERR);
      EXCEPTION
         WHEN OTHERS
         THEN
            RAISE;
      END;
END XXX_MWA_STALE_SESSION_KILL;
/

SHOW ERRORS;

1 comment:

  1. Harrah's Casino Hotel & Spa Las Vegas, NV - Mapyro
    Find all information and best deals of Harrah's Casino Hotel 포천 출장안마 & 경상북도 출장안마 Spa, Las Vegas in Las Vegas, NV. 이천 출장안마 Hotel, profile 여수 출장샵 picture. 대전광역 출장마사지 Find the reviews and ratings to know better.

    ReplyDelete