SET LINES 150
SET PAGES 1000
SET VERIFY OFF
SET FEEDBACK OFF
SET HEADING ON
SET TRIMSPOOL ON
SET LONG 10000
SET LONGCHUNKSIZE 10000
PROMPT ===================================================
PROMPT Oracle RAC Session Monitor - Full Version
PROMPT ===================================================
-- Step 1: Input Method
PROMPT Choose input method:
PROMPT Enter 'U' for Username or 'S' for SID/SERIAL#
ACCEPT input_method CHAR DEFAULT 'U'
-- Variables Initialization
DEFINE sid = ''
DEFINE serial = ''
DEFINE instid = 1
DEFINE username = ''
DEFINE sqlid = ''
PROMPT
-- Step 2: If Username mode, accept username and list sessions
PROMPT Enter Username (leave blank if using SID/SERIAL#):
ACCEPT username CHAR
COLUMN inst_id_col NEW_VALUE instid
COLUMN sid_col NEW_VALUE sid
COLUMN serial_col NEW_VALUE serial
SELECT inst_id, sid, serial#, status, program, module, sql_id, event
FROM gv$session
WHERE username = UPPER('&username')
ORDER BY inst_id, sid;
PROMPT
-- Step 3: Accept SID, SERIAL#, and INST_ID
PROMPT Enter SID:
ACCEPT sid NUMBER
PROMPT Enter SERIAL#:
ACCEPT serial NUMBER
PROMPT Enter INST_ID (default 1):
ACCEPT instid NUMBER DEFAULT 1
-- Validation
BEGIN
IF '&sid' IS NULL OR LENGTH(TRIM('&sid')) = 0 THEN
DBMS_OUTPUT.PUT_LINE('No SID entered. Exiting.');
RAISE_APPLICATION_ERROR(-20001, 'Exiting script.');
END IF;
IF '&serial' IS NULL OR LENGTH(TRIM('&serial')) = 0 THEN
DBMS_OUTPUT.PUT_LINE('No SERIAL# entered. Exiting.');
RAISE_APPLICATION_ERROR(-20002, 'Exiting script.');
END IF;
END;
/
-- Step 4: Get SQL_ID(s) for session
COLUMN sql_id_col NEW_VALUE sqlid
SELECT DISTINCT sql_id
FROM gv$session
WHERE sid = &sid AND serial# = &serial AND inst_id = &instid
AND sql_id IS NOT NULL;
PROMPT SQL_ID(s) found for session &sid.&serial on instance &instid:
SEL