select x.sid ,x.serial# ,x.username ,x.sql_id ,x.sql_child_number ,optimizer_mode ,hash_value ,address ,sql_text from v$sqlarea sqlarea ,v$session x where x.sql_hash_value = sqlarea.hash_value and x.sql_address = sqlarea.address and x.sid = 763 and x.username like '%CHOIMAL%' ; select sid, event, blocking_session, last_call_et from v$session where status = 'ACTIVE' and blocking_session is not null; select sid, seq#, EVENT, WAIT_CLASS, SECONDS_IN_WAIT from v$session_wait where sid='763'; SELECT ROUND(SOFAR*21411/TOTALWORK) FROM V$SESSION_LONGOPS WHERE username like '%MAL%' AND TIME_REMAINING > 0 1134 1430 select STATUS, WAIT_TIME, LOGON_TIME from v$session where username like '%CHOIMAL%' select sql_text from v$sqltext where sql_id=1134; select blocking_session, sid, serial#, wait_class, seconds_in_wait from v$session where username like '%CHOIMAL%'; select sid, serial#, username, program, event, p1, status, sql_id from v$session where username like '%CHOIMAL%'; select sid from v$session where username like '%CHOIMAL%'; select sql_id from v$session where username like '%CHOIMAL%'; FROM A SPECIFIC USERNAME -------------------This only we want ---------------------- SET LINSIZE 152 col spid for a10 col process_spid for a10 col user_name for a20 col form_name for a20 select a.pid,a.spid,a.process_spid, c.user_name,to_char(a.start_time,'DD-MON-YYYY HH24:MI:SS') "START_TIME" , d.user_form_name "FORM_NAME" from apps.fnd_logins a, apps.fnd_login_resp_forms b, apps.fnd_user c, apps.fnd_form_tl d where a.login_id=b.login_id and c.user_name like 'JROMO' and a.user_id=c.user_id and trunc(b.start_time) >trunc(sysdate -11) and trunc(b.end_time) is null and b.form_id=d.form_id and d.language='US'; Total Count of sessions ----------------------- select count(s.status) TOTAL_SESSIONS from gv$session s; Total Count of Inactive sessions --------------------------------- select count(s.status) INACTIVE_SESSIONS from gv$session s, v$process p where p.addr=s.paddr and s.status='INACTIVE'; SESSIONS WHICH ARE IN INACTIVE STATUS FROM MORE THAN 1HOUR select count(s.status) "INACTIVE SESSIONS > 1HOUR " from gv$session s, v$process p where p.addr=s.paddr and s.last_call_et > 3600 and s.status='INACTIVE'; COUNT OF ACTIVE SESSIONS -------------------------- select count(s.status) ACTIVE_SESSIONS from gv$session s, v$process p where p.addr=s.paddr and s.status='ACTIVE'; TOTAL SESSIONS COUNT ORDERED BY PROGRAM -------------------------------------- col program for a30 select s.program,count(s.program) Total_Sessions from gv$session s, v$process p where p.addr=s.paddr group by s.program; TOTAL COUNT OF SESSIONS ORDERED BY MODULE ---------------------------------------- col module for a30 prompt TOTAL SESSIONS select s.module,count(s.sid) Total_Sessions from gv$session s, v$process p where p.addr=s.paddr group by s.module; TOTAL COUNT OF SESSIONS ORDERED BY ACTION ---------------------------------------- col action for a30 prompt TOTAL SESSIONS select s.action,count(s.sid) Total_Sessions from gv$session s, v$process p where p.addr=s.paddr group by s.action; INACTIVE SESSIONS ----------------- prompt INACTIVE SESSIONS select p.spid, s.sid,s.last_call_et/3600 last_call_et ,s.status,s.action,s.module,s.program from gv$session s, v$process p where p.addr=s.paddr and s.status='INACTIVE'; INACTIVE --------- prompt INACTIVE SESSIONS select count(s.status) INACTIVE from gv$session s, gv$sqlarea t,v$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE'; INACTIVE PROGRAMS ------------------- col module for a40 prompt INACTIVE SESSIONS col INACTIVE_PROGRAMS FOR A40 select distinct (s.program) INACTIVE_PROGRAMS,s.module from gv$session s, v$process p where p.addr=s.paddr and s.status='INACTIVE'; INACTIVE PROGRAMS with disk reads ---------------------------------- prompt INACTIVE SESSIONS select distinct (s.program) INACTIVE_PROGRAMS,SUM(T.DISK_READS) from gv$session s, gv$sqlarea t,v$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' GROUP BY S.PROGRAM; INACTIVE SESSIONS COUNT WITH PROGRAM -------------------------------------- col program for a30 prompt TOTAL INACTIVE SESSIONS col INACTIVE_PROGRAMS FOR A40 select s.program,count(s.program) Total_Inactive_Sessions from gv$session s,v$process p where p.addr=s.paddr AND s.status='INACTIVE' group by s.program order by 2 desc; TOTAL INACTIVE SESSIONS MORE THAN 1HOUR --------------------------------------- col program for a30 col INACTIVE_PROGRAMS FOR A40 select s.program,count(s.program) Inactive_Sessions_from_1Hour from gv$session s,v$process p where p.addr=s.paddr AND s.status='INACTIVE' and s.last_call_et > (3600) group by s.program order by 2 desc; TOTAL INACTIVE SESSIONS GROUP BY MODULE col program for a60 COL MODULE FOR A30 prompt TOTAL SESSIONS col INACTIVE_PROGRAMS FOR A40 select s.module,count(s.module) Total_Inactive_Sessions from gv$session s,v$process p where p.addr=s.paddr AND s.status='INACTIVE' group by s.module; INACTIVE SESSION DETAILS MORE THAN 1 HOUR -------------------------------------------- set pagesize 40 col INST_ID for 99 col spid for a10 set linesize 150 col PROGRAM for a10 col action format a10 col logon_time format a16 col module format a13 col cli_process format a7 col cli_mach for a15 col status format a10 col username format a10 col last_call_et_Hrs for 9999.99 col sql_hash_value for 9999999999999col username for a10 set linesize 152 set pagesize 80 col "Last SQL" for a60 col elapsed_time for 999999999999 select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.last_call_et > (3600) order by last_call_et; INACTIVE PROGRAM --ANY-- ------------------------ select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' And s.program='&PROGRAM_NAME' order by last_call_et; INACTIVE MODULES --ANY--- -------------------------- select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr And s.module like '%order_cleanup_hazmat_v3.sql' order by last_call_et; INACTIVE JDBC SESSIONS ------------------------ set pagesize 40 col INST_ID for 99 col spid for a10 set linesize 150 col PROGRAM for a10 col action format a10 col logon_time format a16 col module format a13 col cli_process format a7 col cli_mach for a15 col status format a10 col username format a10 col last_call_et for 9999.99 col sql_hash_value for 9999999999999col username for a10 set linesize 152 set pagesize 80 col "Last SQL" for a60 col elapsed_time for 999999999999 select p.spid, s.sid,s.last_call_et/3600 last_call_et ,s.status,s.action, s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.program='JDBC Thin Client' and s.last_call_et > 3600 order by last_call_et; COUNT OF INACTIVE SESSIONS MORE THAN ONE HOUR --------------------------------------------- SELECT COUNT(P.SPID) from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.program='JDBC Thin Client' and s.last_call_et > 3600 order by last_call_et; FORMS TOTAL FORM SESSIONS ---------------------- SELECT COUNT(S.SID) INACTIVE_FORM_SESSIONS FROM V$SESSION S WHERE S.STATUS='INACTIVE' and s.action like ('%FRM%'); FORMS SESSIONS DETAILS ----------------------- col "Last SQL" for a30 select p.spid,s.sid,s.status,s.last_call_et/3600 last_call_et_hrs , s.sid,t.disk_reads, t.elapsed_time,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.action like ('FRM%') and s.last_call_et > 3600 order by spid; col machine for a15 col "Last SQL" for a30 select p.spid,s.sid,s.status,s.last_call_et/3600 last_call_et_hrs , S.ACTION,s.process Client_Process,s.machine from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.action like ('FRM%') and s.last_call_et > 3600; order by 4; INACTIVE FORMS SESSIONS DETAILS ------------------------------- col program for a15 col last_call_et for 999.99 select p.spid, s.sid, s.process,s.last_call_et/3600 last_call_et ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.action like 'FRM:%' and s.last_call_et > 3600 order by last_call_et desc; UNIQUE SPID ------------ select unique(p.spid) from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.action like 'FRM:%' and s.last_call_et > 3600; COUNT FORMS ------------ select COUNT(p.spid) from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.action like 'FRM:%' and s.last_call_et > 3600; ZERO HASH VALUE ----------------- select COUNT(p.spid) from gv$session s,gv$process p where p.addr=s.paddr and s.status='INACTIVE' and s.action like 'FRM:%' and s.last_call_et > 3600 AND S.SQL_HASH_VALUE=0; INACTIVE FORM BY NAME --------------------- select count(s.sid) from v$session S where s.action like ('%&ACTION%') AND S.STATUS='INACTIVE'; GROUP BY ACTION --------------- SELECT S.ACTION,COUNT(S.SID) FROM V$SESSION S WHERE S.STATUS='INACTIVE' and s.action like ('%FRM%') group by s.action; INACTIVE FORM ----------------- set pagesize 40 col INST_ID for 99 col spid for a10 set linesize 150 col PROGRAM for a10 col action format a10 col logon_time format a16 col module format a13 col cli_process format a7 col cli_mach for a15 col status format a10 col username format a10 col last_call_et for 9999.99 col sql_hash_value for 9999999999999col username for a10 set linesize 152 set pagesize 80 col "Last SQL" for a30 col elapsed_time for 999999999999 select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et , s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='INACTIVE' and s.action like ('FRM%') and s.last_call_et > (3600*3) order by last_call_et; INACTIVE FORM SESSIONS --------------------- col cli_proc for a9 COL AUDSID FOR A6 COL PID FOR A6 COL SID FOR A5 COL FORM_NAME FOR A25 COL USER_NAME FOR A15 col last_call_et for 9999.99 SELECT -- /*+ ORDERED FULL(fl) FULL(vp) USE_HASH(fl vp) */ ( SELECT SUBSTR ( fu.user_name, 1, 20 ) FROM apps.fnd_user fu WHERE fu.user_id = fl.user_id ) user_name,vs.status, TO_CHAR ( fl.start_time, 'DD-MON-YYYY HH24:MI' ) login_start_time, TO_CHAR ( fl.end_time, 'DD-MON-YYYY HH24:MI' ) login_end_time, vs.last_call_et/3600 last_call_et, SUBSTR ( fl.process_spid, 1, 6 ) spid, SUBSTR ( vs.process, 1, 8 ) cli_proc, SUBSTR ( TO_CHAR ( vs.sid ), 1, 3 ) sid, SUBSTR ( TO_CHAR ( vs.serial#), 1, 7 ) serial#, SUBSTR ( TO_CHAR ( rf.audsid ), 1, 6 ) audsid, SUBSTR ( TO_CHAR ( fl.pid ), 1, 3 ) pid, SUBSTR ( vs.module || ' - ' || ( SELECT SUBSTR ( ft.user_form_name, 1, 40 ) FROM apps.fnd_form_tl ft WHERE ft.application_id = rf.form_appl_id AND ft.form_id = rf.form_id AND ft.language = USERENV('LANG') ), 1, 40 ) form_name FROM apps.fnd_logins fl, gv$process vp, apps.fnd_login_resp_forms rf, gv$session vs WHERE fl.start_time > sysdate - 7 /* login within last 7 days */ AND fl.login_type = 'FORM' AND fl.process_spid = vp.spid AND fl.pid = vp.pid AND fl.login_id = rf.login_id AND rf.end_time IS NULL AND rf.audsid = vs.audsid and vs.status='INACTIVE' ORDER BY vs.process, fl.process_spid; ACTIVE ------- prompt ACTIVE SESSIONS select count(s.status) ACTIVE from gv$session s, gv$sqlarea t,v$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.status='ACTIVE'; MODULE ------- set pagesize 40 col INST_ID for 99 col spid for a10 set linesize 150 col PROGRAM for a10 col action format a10 col logon_time format a16 col module format a13 col cli_process format a7 col cli_mach for a15 col status format a10 col username format a10 col last_call_et for 9999.99 col sql_hash_value for 9999999999999col username for a10 set linesize 152 set pagesize 80 col "Last SQL" for a30 col elapsed_time for 999999999999 select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et , s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL" from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr and s.MODULE like ('&MODULE_NAME_1HR%') and s.last_call_et > ('&TIME_HRS' * 3600) order by last_call_et; select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et , s.status,s.action,s.module,s.program from gv$session s, gv$sqlarea t,gv$process p where s.sql_address =t.address and p.addr=s.paddr and s.MODULE like ('%TOAD%') Order by last_call_et; TOAD SESSIONS ------------- select p.spid, s.sid,s.process cli_process,s.last_call_et/3600 last_call_et , s.status,s.action,s.module,s.program from gv$session s, gv$process p where p.addr=s.paddr and s.MODULE like ('%TOAD%') Order by last_call_et; CLIENT MACHINE SESSIONS COUNT ----------------------------- select count(s.process) TOTAL from v$session S where s.machine like ('%&CLIENT_MACHINE%'); select count(s.process) INACTIVE from v$session S where s.machine like ('%&CLIENT_MACHINE%') and s.status='INACTIVE'; hash value=0 ------------- select count(s.process) from v$session S where s.machine like ('%&CLIENT_MACHINE%') AND S.SQL_HASH_VALUE=0; select count(s.process) from v$session S where s.machine like ('%&CLIENT_MACHINE%') AND S.SQL_HASH_VALUE=0 AND S.LAST_CALL_ET > 3600; Unique Actions --------------- col module for a40 prompt INACTIVE SESSIONS col INACTIVE_PROGRAMS FOR A40 select distinct (s.program) INACTIVE_PROGRAMS,s.module from gv$session s, gv$sqlarea t,v$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and s.machine like ('%&CLIENT_MACHINE%') AND p.addr=s.paddr and s.status='INACTIVE'; GROUP BY program ------------------ col program for a60 prompt TOTAL SESSIONS col INACTIVE_PROGRAMS FOR A40 select s.program,count(s.program) Total_Inactive_Sessions from gv$session s, gv$sqlarea t,v$process p where s.sql_address =t.address and s.sql_hash_value =t.hash_value and p.addr=s.paddr AND s.machine like ('%&CLIENT_MACHINE%') AND s.status='INACTIVE' group by s.program; alter system kill session 'sid,serial#' immediate; alter system kill session '2208, 37605' immediate; alter system kill session '1308,38903' immediate; alter system kill session '277,30355' immediate; ALTER SYSTEM DISCONNECT SESSION '304,3276' IMMEDIATE; select 'Alter system kill session '''||SID||','||SERIAL#||''';' from v$session where status ='INACTIVE' and username='H3G_ODS'; select 'Alter system kill session '''||SID||','||SERIAL#||''' immediate;' from v$session where username like 'NSISNW'; select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;' from v$session where sid=143; select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;', to_char(logon_time, 'hh24:mi:ss dd/mm/yy') login_time from v$SESSION where status='INACTIVE'; select SID,SERIAL#,status from v$session where sid=143; select status from v$session where SERIAL=53718 ---------------------------------------- Check how rollback is going after killing session Summary If you kill a session and has uncommited transactions you must wait until rollback. To find how rollback is going execute SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = ) where sid, is the sid of the killed session If there is a value there, this is the number of undo blocks used by the transaction. Wait one minute and again. If it is decreasing, a rollback is occuring and based on the difference between these values, you can "guesstimate" the time required to complete the rollback. Output will be like the below SQL> SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = 304); USED_UBLK ---------- 270265 SQL> / USED_UBLK ---------- 270244 where the USED_UBLK keeps reducing alter system kill session 'sid,serial#' immediate; alter system kill session '2208, 37605' immediate; alter system kill session '1308,38903' immediate; alter system kill session '277,30355' immediate; ALTER SYSTEM DISCONNECT SESSION '304,3276' IMMEDIATE; select 'Alter system kill session '''||SID||','||SERIAL#||''';' from v$session where status ='INACTIVE' and username='H3G_ODS'; select 'Alter system kill session '''||SID||','||SERIAL#||''' immediate;' from v$session where username like 'NSISNW'; select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;' from v$session where sid=143; select 'Alter system kill session '''||SID||','||SERIAL#||''' IMMEDIATE;', to_char(logon_time, 'hh24:mi:ss dd/mm/yy') login_time from v$SESSION where status='INACTIVE'; select SID,SERIAL#,status from v$session where sid=143; select status from v$session where SERIAL=53718 ---------------------------------------- Check how rollback is going after killing session Summary If you kill a session and has uncommited transactions you must wait until rollback. To find how rollback is going execute SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = ) where sid, is the sid of the killed session If there is a value there, this is the number of undo blocks used by the transaction. Wait one minute and again. If it is decreasing, a rollback is occuring and based on the difference between these values, you can "guesstimate" the time required to complete the rollback. Output will be like the below SQL> SELECT used_ublk FROM v$transaction WHERE ADDR IN (SELECT TADDR FROM v$session WHERE SID = 304); USED_UBLK ---------- 270265 SQL> / USED_UBLK ---------- 270244 where the USED_UBLK keeps reducing