Search This Blog

Total Pageviews

Saturday 3 September 2016

Oracle session count info and with kill statement


Oracle session count info and with kill statement  ..


show parameter spfile
my session

select spid,pid from v$process where addr = ( select paddr from v$session where sid=(select distinct sid from v$mystat));


spfile info ..

set lines 200
col name  for a30
col value for a70
select i.INSTANCE_NAME "INSTANCE", NAME , VALUE  from gv$instance i, gv$parameter p 
where i.inst_id=p.inst_id and upper(p.name)='SPFILE';




set linesize 150 pages 0
select
'kill .................................................: '||''''||x.sid ||','|| x.serial#||',@'||x.inst_id ||'''',
--'SID ................................................: '||x.sid,
--'Serial .............................................: '||x.serial#,
'con_id .............................................: '||x.con_id,
'Username ...........................................: '||x.username,
'SQLID ..............................................: '||x.sql_id,
'PHV ................................................: '||plan_hash_value,
'DISK_READS .........................................: '||st.DISK_READS,
'BUFFER_GETS ........................................: '||st.BUFFER_GETS,
'ROWS_PROCESSED ..... ...............................: '||st.ROWS_PROCESSED,
'Event  .............................................: '||x.event,
'OSUser .............................................: '||x.osuser,
'Status .............................................: '||x.status,
'BLOCKING_SESSION_STATUS ............................: '||x.BLOCKING_SESSION_STATUS,
'BLOCKING_INSTANCE ..................................: '||x.BLOCKING_INSTANCE,
'BLOCKING_SESSION ...................................: '||x.BLOCKING_SESSION,
'PROCESS ............................................: '||x.process,
'MACHINE ............................................: '||x.machine,
'PROGRAM ............................................: '||x.program,
'MODULE .............................................: '||x.module,
'ACTION .............................................: '||x.action,
'LOGONTIME ..........................................: '||TO_CHAR(x.LOGON_TIME, 'MM-DD-YYYY HH24:MI:SS') logontime,
'LAST_CALL_ET .......................................: '||x.LAST_CALL_ET,
'SECONDS_IN_WAIT ....................................: '||x.SECONDS_IN_WAIT,
'STATE ..............................................: '||x.state,
'RUNNING_SINCE ......................................: '||ltrim(to_char(floor(x.LAST_CALL_ET/3600), '09')) || ':' || ltrim(to_char(floor(mod(x.LAST_CALL_ET, 3600)/60), '09')) || ':' || ltrim(to_char(mod(x.LAST_CALL_ET, 60), '09')) RUNNING_SINCE,
'SQLTEXT ............................................: '||sql_text
from   gv$sqlstats st
,gv$session x
-- ,gv$sqlarea st
where  1=1
and x.sql_id = st.sql_id
and x.inst_id = st.inst_id
-- and x.sql_hash_value = st.hash_value
-- and    x.sql_address    = st.address
-- and x.SQL_ADDRESS    = st.ADDRESS
-- and x.SQL_HASH_VALUE = st.HASH_VALUE
and    x.status='ACTIVE'
and    sql_text not like '%kill%'
--and x.USERNAME  Not  in  ( 'SYS ' ,  'SYSTEM' ,  'DBSNMP' , 'SYSMAN' , 'OUTLN' , 'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' )
-- and buffer_gets   > 10000000000   or disk_reads   > 10000000000   or elapsed_time > 10000000000
order by RUNNING_SINCE desc
;

set linesize 80 pages 80







set linesize 300 col SERVICE_NAME for a20 SELECT * FROM ( select inst_id, machine, service_name from gv$session where 1=1 and status ='ACTIVE' -- and service_name like '%oltp%' --group by inst_id, machine, service_name ) PIVOT ( COUNT(inst_id) FOR inst_id IN (1, 2, 3,4) ) ORDER BY machine;

col name  for a20
col VALUE for a15
select INSTANCE_NAME,NAME,VALUE from gv$parameter p, gv$instance i  
where p.INST_ID=i.INST_ID 
and p.name in ('processes', 'sessions')
order by instance_name;

col name   for a20
col VALUE  for a15
col SID    for a10
select INSTANCE_NAME,sp.SID, NAME,VALUE from gv$spparameter sp, gv$instance i
where sp.INST_ID=i.INST_ID 
and sp.name in ('processes', 'sessions')
order by instance_name;

-- Current session info set linesize 300 col LIMIT_VALUE for a15 col "%" for 9999999 col INITIAL_ALLOCATION for a20 col ATTENTION for a30
col RESOURCE_NAME for a20
select INST_ID,RESOURCE_NAME,current_utilization,MAX_UTILIZATION,INITIAL_ALLOCATION,LIMIT_VALUE,(ROUND(((CURRENT_UTILIZATION/TO_NUMBER(LIMIT_VALUE)))*100)) "%"
, case when ((ROUND(( (CURRENT_UTILIZATION/to_number(LIMIT_VALUE)) )*100))>85.00) then '---(>85.00)% full ##'
else 'Good'
end as ATTENTION
from gv$resource_limit
WHERE resource_name in ('processes', 'sessions');

 INST_ID RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE % ATTENTION
---------- ------------------------------ ------------------- --------------- -------------------- --------------- -------- -----------
 1 processes 152 179 600 600 25 Good
 1 sessions 121 153 928 928 13 Good
 2 processes 150 172 600 600 25 Good
 2 sessions 125 151 928 928 13 Good


set linesize 500  pages 500
col sql_text format a100 wrap
col username for a20
col kill for a15
col osuser format a12
col machine format a12
col module format a12
col EVENT for a25
alter session set nls_Date_format='dd-MON-yyyy hh24:mi';
select
''''||ses.sid ||','|| ses.serial#||',@'||ses.inst_id ||'''' kill  ,
	ses.username, ses.status,
	ses.osuser, ses.machine, ses.module, 
	ses.EVENT, ses.logon_time, ses.curr_prev,
	sql.sql_id, sql.child_number, sql.sql_text
from	
	(
	select
		ses1.sid, ses1.serial#, ses1.username, ses1.status,
		ses1.osuser, ses1.machine, ses1.module, 
		'Current' curr_prev,
		ses1.event, ses1.logon_time,
		ses1.sql_id, ses1.sql_child_number, ses1.sql_address,ses1.inst_id
	from	gv$session	ses1
	union all
	select
		ses2.sid, ses2.serial#, ses2.username, ses2.status,
		ses2.osuser, ses2.machine, ses2.module, 
		'Previous' curr_prev,
		ses2.event, ses2.logon_time,
		ses2.prev_sql_id, ses2.prev_child_number, ses2.prev_sql_addr,ses2.inst_id
	from gv$session	ses2
	)		ses,
	gv$sql	sql
where 1=1
and	ses.sql_address != '00'
--and	ses.status	 = 'ACTIVE'
and	sql.sql_id	 = ses.sql_id
and	sql.child_number = ses.sql_child_number
and	sql.inst_id	 = ses.inst_id
and ses.username not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' ,'WK_TEST', 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON','FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC','SI_INFORMTN_SCHEMA','LBACSYS','DBVISIT7')
order by ses.sid, ses.curr_prev
;


SET PAGESIZE 1000
col MACHINE for a40
SELECT machine,
       NVL(active_count, 0) AS active,
       NVL(inactive_count, 0) AS inactive,
       NVL(killed_count, 0) AS killed 
FROM   (SELECT machine, status, count(*) AS quantity
        FROM   v$session
        GROUP BY machine, status)
PIVOT  (SUM(quantity) AS count FOR (status) IN ('ACTIVE' AS active, 'INACTIVE' AS inactive, 'KILLED' AS killed))
ORDER BY machine;




set lines 200 pages 999
col osuser FOR a25
col username FOR a28
col machine FOR a50
col status FOR a9
col min_date FOR a20
col max_date FOR a20
col cnt FOR 9999
break ON status skip 1
compute SUM OF cnt ON status
SELECT inst_id,
       osuser,
       username,
       machine,
       status,
       To_char(Min(logon_time), 'dd-MON-YYYY:HH24:mi:ss') MIN_DATE,
       To_char(Max(logon_time), 'dd-MON-YYYY:HH24:mi:ss') MAX_DATE,
       Count(*) "CNT"
FROM   gv$session
GROUP  BY inst_id,
          osuser,
          username,
          status,
          machine
ORDER  BY status,
          To_char(Min(logon_time), 'dd-MON-YYYY:HH24:mi:ss'),
          To_char(Max(logon_time), 'dd-MON-YYYY:HH24:mi:ss');
		  
		  
		  

set lines 200 pages 999
col OSUSER    for a20
col USERNAME  for a20
col MACHINE   for a30
col STATUS    for a9
col MIN_DATE  for a20
col MAX_DATE  for a20
col CNT       for 999
break on status skip 1
compute sum of CNT on status
SELECT 
inst_id,
OSUSER,
USERNAME,
MACHINE,
STATUS,
to_char(min(logon_time),'dd-MON-YYYY:HH24:mi:ss') MIN_DATE,
to_char(max(logon_time),'dd-MON-YYYY:HH24:mi:ss') MAX_DATE,
/* rpad(COUNT(*),3,' ') "CNT" */
COUNT(*) "CNT"
FROM GV$SESSION
GROUP BY inst_id,OSUSER,USERNAME,STATUS,MACHINE
ORDER BY STATUS,to_char(min(logon_time),'dd-MON-YYYY:HH24:mi:ss'),to_char(max(logon_time),'dd-MON-YYYY:HH24:mi:ss')
/


 INST_ID OSUSER USERNAME MACHINE STATUS MIN_DATE MAX_DATE CNT
---------- -------------------- -------------------- ------------------------------ --------- -------------------- -------------------- ----
 1 oracle SYS **************************** ACTIVE 03-SEP-2016:01:00:19 03-SEP-2016:12:02:39 3
 2 oracle SYS **************************** 03-SEP-2016:12:02:39 03-SEP-2016:12:02:39 1
 1 oracle **************************** 13-JUL-2016:13:42:11 15-AUG-2016:23:03:09 75
 2 oracle **************************** 18-JUL-2016:03:27:13 01-SEP-2016:00:05:06 81
 ********* ----
 sum 160

 1 oracle SYS **************************** INACTIVE 13-JUL-2016:13:42:29 02-SEP-2016:12:05:55 5
 2 oracle SYS **************************** 18-JUL-2016:03:27:33 18-JUL-2016:03:27:33 1
 ********* ----
 sum 6


6 rows selected.



---Total session count on RAC 

select dbname ,active, inactive, system, killed
from (select name dbname     from v$database ) 
 , (select count(*) total    from gv$session)
 , (select count(*) system   from gv$session where type = 'BACKGROUND')
 , (select count(*) active   from gv$session where status = 'ACTIVE' and username is not null)
 , (select count(*) inactive from gv$session where status = 'INACTIVE')
 , (select count(*) killed   from gv$session where status = 'KILLED') ;


DBNAME ACTIVE INACTIVE SYSTEM KILLED
--------- ---------- ---------- ---------- ----------
AJRAC 4 6 157 0


-- session count RAC1
select INSTANCE_NUMBER,INSTANCE_NAME, total,total, active, inactive, system, killed from (select INSTANCE_NUMBER ,INSTANCE_NAME from gv$instance where INST_ID=1) , (select count(*) total from gv$session where INST_ID=1) , (select count(*) system from gv$session where username is null and INST_ID=1) , (select count(*) active from gv$session where status = 'ACTIVE' and username is not null and INST_ID=1) , (select count(*) inactive from gv$session where status = 'INACTIVE' and INST_ID=1) , (select count(*) killed from gv$session where status = 'KILLED' and INST_ID=1) ; INSTANCE_NUMBER INSTANCE_NAME TOTAL TOTAL ACTIVE INACTIVE SYSTEM KILLED --------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- 1 AJRAC1 82 82 2 5 75 0
--session count RAC2
select INSTANCE_NUMBER,INSTANCE_NAME,total, active, inactive, system, killed
from (select INSTANCE_NUMBER ,INSTANCE_NAME from gv$instance where INST_ID =2 )
 , (select count(*) total    from gv$session where INST_ID =2 )
 , (select count(*) system   from gv$session where username is null and INST_ID=2)
 , (select count(*) active   from gv$session where status = 'ACTIVE' and username is not null and INST_ID=2)
 , (select count(*) inactive from gv$session where status = 'INACTIVE' and INST_ID=2)
 , (select count(*) killed   from gv$session where status = 'KILLED' and INST_ID=2);


INSTANCE_NUMBER INSTANCE_NAME TOTAL ACTIVE INACTIVE SYSTEM KILLED
--------------- ---------------- ---------- ---------- ---------- ---------- ----------
 2 AJRAC2 83 1 1 81 0

With Union 
set linesize 300
compute sum of cnt on report
compute sum of INACTIVE on report
compute sum of ACTIVE on report
compute sum of killed on report
compute sum of SYSTEM  on report
 break on report
set linesize 300
select INSTANCE_NUMBER,INSTANCE_NAME, total, active, inactive, system, killed
from (select INSTANCE_NUMBER ,INSTANCE_NAME from gv$instance where INST_ID=1)
 , (select count(*) total    from gv$session where INST_ID=1)
 , (select count(*) system   from gv$session where username is null and INST_ID=1)
 , (select count(*) active   from gv$session where status = 'ACTIVE' and username is not null and INST_ID=1)
 , (select count(*) inactive from gv$session where status = 'INACTIVE' and INST_ID=1)
 , (select count(*) killed   from gv$session where status = 'KILLED' and INST_ID=1) 
union all 
--session count RAC2
select INSTANCE_NUMBER,INSTANCE_NAME,total, active, inactive, system, killed
from (select INSTANCE_NUMBER ,INSTANCE_NAME from gv$instance where INST_ID =2 )
 , (select count(*) total    from gv$session where INST_ID =2 )
 , (select count(*) system   from gv$session where username is null and INST_ID=2)
 , (select count(*) active   from gv$session where status = 'ACTIVE' and username is not null and INST_ID=2)
 , (select count(*) inactive from gv$session where status = 'INACTIVE' and INST_ID=2)
 , (select count(*) killed   from gv$session where status = 'KILLED' and INST_ID=2);

col kill for a70
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill,username,sql_id from GV$SESSION 
where 1=1
-- and username='username'
and status = 'INACTIVE'
and type != 'BACKGROUND'
--and USERNAME not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' , 'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' ) ;


-- to make a kill session script 

set heading off feedback off 
col kill for a70
spool kill.sql
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill from GV$SESSION 
where 1=1
-- and username='user'
and status = 'INACTIVE'
and type != 'BACKGROUND'
--and USERNAME not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' , 'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' ) ;
spool off
set heading on feedback on 


===
alter session set nls_date_format='dd-mm-yyyy hh24:mi';
set linesize 500 pagesize 100
clear columns
col username    for a15
col osuser 		for a16
col program 	for a10 trunc
col Locked 		for a6
col status 		for a1 trunc print
col "hh:mm:ss" 	for a8
col SQL_ID 		for a15
col seq# 		for 99990 --Sequence number that uniquely identifies the wait. Incremented for each wait
col module 		for a25
col ACTION 		for a20
col kill 		for a15
col event heading 'Current/LastEvent' for a25 trunc
col state head 'State (sec)' for a14
select ''''||sid ||','|| serial#||',@'||inst_id ||''''  kill
--,con_id --12c
, username
, ltrim(substr(osuser, greatest(instr(osuser, '\', -1, 1)+1,length(osuser)-14))) osuser
, substr(program,instr(program,'/',-1)+1,decode(instr(program,'@'),0,decode(instr(program,'.'),0,length(program),instr(program,'.')-1),instr(program,'@')-1)) program,
 decode(lockwait,NULL,' ','L') locked, status,
to_char(to_date(mod(last_call_et,86400), 'sssss'), 'hh24:mi:ss') "hh:mm:ss" , sql_id,prev_sql_id, seq# , event,
decode(state,'WAITING','WAITING '||lpad(to_char(mod(SECONDS_IN_WAIT,86400),'99990'),6),'WAITED SHORT TIME','ON CPU','WAITED KNOWN TIME','ON CPU',state) state
, substr(module,1,25) module,final_blocking_session_status,sql_exec_start
-- substr(action,1,20) action
from GV$SESSION
where type = 'USER'
and STATUS!='INACTIVE'
and audsid != 0 -- to exclude internal processess
--and USERNAME='USERNAME'
--and SQL_ID='1mavr84vthn3s'
-- and s.event like 'enq: TX%'
order by inst_id, status, last_call_et desc, sid
/

==

set linesize 300  pagesize 80
col INST_ID 			for 99
col spid 				for a10
col PROGRAM 			for a25
col action 				for a10
col logon_time 			for a16
col module 				for a25
col cli_process 		for a7
col cli_mach 			for a15
col status 				for a10
col username 			for a10
col last_call_et 		for 9999.99
col sql_hash_value 		for 9999999999999
col username 			for a10
col kill for a15
col s.username for a15
col "Last SQL" for a60
col elapsed_time for 999999999999
select distinct ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,s.username,
 -- p.spid,
 s.last_call_et/3600 last_call_et ,s.sql_id,
s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,50) "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
and s.sid not in (select sid from V$SESSION where AUDSID = userenv('SESSIONID') )
and s.username not in ('SYS')
order by last_call_et;

====
Active Sql_id with sql text 

set pages 400 lines 500
col host_name 	for a20
col event 		for a40
col machine 	for a30
col sql_text 	for a50
col username 	for a15
col kill 		for a15
select ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||''''  kill,a.sql_id,s.username
--,i.host_name
,machine,s.event,s.seconds_in_wait sec_wait,
to_char(logon_time,'DD-MON-RR HH24:MI') login,a.sql_text
from gv$session s,gv$sqlarea a,gv$instance i
where s.username is not null
and s.status='ACTIVE'
and s.sql_address=a.address
and s.inst_id=a.inst_id 
and i.inst_id = a.inst_id
--and sql_text not like '%from gv$session s,gv$sqlarea a,gv$instance i%'
and  ( s.sid,s.serial#) not in (SELECT sid, serial# FROM SYS.V_$SESSION  WHERE SID = (SELECT DISTINCT SID FROM SYS.V_$MYSTAT))
/


===========
-- Oracle 12C session info 

set linesize 300 pagesize 300
--set pagesize 0 set linesize 300
col kill     for a60
col USERNAME for a12
col PDB_NAME for a15
col EVENT    for a50
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ; -- ' kill,username,s.con_id,pdb_name,sql_id,event from gv$session s ,dba_pdbs p
where 1=1
-- and username='username'
-- and status = 'INACTIVE'
-- and USERNAME not in ( 'SYS','SYSTEM','DBSNMP','SYSMAN','OUTLN','MDSYS','ORDSYS','EXFSYS','DMSYS','WMSYS','CTXSYS','ANONYMOUS','XDB','ORDPLUGINS','OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM' )
and type != 'BACKGROUND'
and  s.con_id=p.CON_ID(+);


KILL                                                         USERNAME         CON_ID PDB_NAME        SQL_ID        EVENT
------------------------------------------------------------ ------------ ---------- --------------- ------------- --------------------------------------------------
alter system kill session '34,44188,@1' immediate ; --       ANUJ                  4 ORDS                          SQL*Net message from client
alter system kill session '61,56196,@1' immediate ; --       SYS                   1                 59p1yadp2g6mb Streams AQ: waiting for messages in the queue
alter system kill session '68,3229,@1' immediate ; --        SYS                   1                 59p1yadp2g6mb Streams AQ: waiting for messages in the queue
alter system kill session '73,53368,@1' immediate ; --       SYS                   1                 3t479j8hhqt0t SQL*Net message to client


to remove everything after ";" !!!! 
sed 's/;.*/;/' out.txt
=====================================

To Kill Pluggable database ( ANUJ)  session only

set linesize 300 pagesize 300
--set pagesize 0 set linesize 300
col kill     for a60
col USERNAME for a12
col PDB_NAME for a15
col EVENT    for a50
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ; -- ' kill,username,s.con_id,pdb_name,sql_id,event from gv$session s ,dba_pdbs p
where 1=1
-- and username='username'
-- and status = 'INACTIVE'
-- and USERNAME not in ( 'SYS','SYSTEM','DBSNMP','SYSMAN','OUTLN','MDSYS','ORDSYS','EXFSYS','DMSYS','WMSYS','CTXSYS','ANONYMOUS','XDB','ORDPLUGINS','OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM' )
and type != 'BACKGROUND'
and  s.con_id=p.CON_ID
and pdb_name='ANUJ'; -----<<<<<<<<<<Pluggable database name


--Session count from history 

set linesize 200 pagesize 200
col SNAP_BEGIN format a20
SELECT
to_char(TRUNC(s.begin_interval_time,'HH24'),'DD-MON-YYYY HH24:MI:SS') snap_begin,
r.instance_number instance,
r.current_utilization sessions 
FROM dba_hist_resource_limit r,dba_hist_snapshot s
WHERE ( TRUNC(s.begin_interval_time,'HH24'),s.snap_id ) IN
( 
--Select the Maximum of the Snapshot IDs within an hour if all of the snapshot IDs
--have the same number of sessions
SELECT TRUNC(sn.begin_interval_time,'HH24'),MAX(rl.snap_id)
FROM dba_hist_resource_limit rl,dba_hist_snapshot sn
WHERE TRUNC(sn.begin_interval_time) >= TRUNC(sysdate-4)
AND rl.snap_id = sn.snap_id
AND rl.resource_name = 'sessions'
AND rl.instance_number = sn.instance_number
AND ( TRUNC(sn.begin_interval_time,'HH24'),rl.CURRENT_UTILIZATION ) IN
(
--Select the Maximum no.of sessions for a given begin interval time
SELECT TRUNC(s.begin_interval_time,'HH24'),MAX(r.CURRENT_UTILIZATION) "no_of_sess"
FROM dba_hist_resource_limit r,dba_hist_snapshot s
WHERE r.snap_id = s.snap_id
AND TRUNC(s.begin_interval_time) >= TRUNC(sysdate-4)
AND r.instance_number=s.instance_number
AND r.resource_name = 'sessions'
GROUP BY TRUNC(s.begin_interval_time,'HH24')
)
GROUP BY TRUNC(sn.begin_interval_time,'HH24'),CURRENT_UTILIZATION
)
AND r.snap_id = s.snap_id
AND r.instance_number = s.instance_number
AND r.resource_name = 'sessions'
ORDER BY snap_begin,instance


SNAP_BEGIN INSTANCE SESSIONS
-------------------- ---------- ----------
01-SEP-2016 00:00:00 1 131
01-SEP-2016 00:00:00 2 130
01-SEP-2016 01:00:00 1 129
01-SEP-2016 01:00:00 2 131
01-SEP-2016 02:00:00 1 127
01-SEP-2016 02:00:00 2 129
01-SEP-2016 03:00:00 1 126
01-SEP-2016 03:00:00 2 129
01-SEP-2016 04:00:00 1 122
01-SEP-2016 04:00:00 2 129
01-SEP-2016 05:00:00 1 127
01-SEP-2016 05:00:00 2 129
01-SEP-2016 06:00:00 1 125
01-SEP-2016 06:00:00 2 129





alter session set nls_date_format='dd-mm-yyyy hh24:mi' ;
set linesize 300 pagesize 200
col EVENT    for a30
col USERNAME for a20
col KILL     for a52
select 
 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill,
 -- ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill ,
 s.status status,
 s.username ,
 s.logon_time "Logon Time",
 s.sql_id,
 sysdate - s.last_call_et/86400 latime,
 round((sysdate-s.logon_time)*1440) etime,
 s.last_call_et ,
 floor(last_call_et / 60*60 ) "Hr since active" ,
 (last_call_et / 60*60*24 ) "Days since active" ,
 ROUND((SYSDATE - LOGON_TIME)*(24*60),1) LOGON_TIME,
 EVENT
from gv$session s
where 1=1 
and s.username is not null
-- and ROUND((SYSDATE - LOGON_TIME)*(24*60),1) > 60*24 --- 1 hr
and last_call_et/60*60*24 > 1 ---- min*hr*24 one day
and s.type != 'BACKGROUND'
-- and USERNAME='ANUJ'
order by 3, 7, 8;




KILL STATUS USERNAME Logon Time SQL_ID LATIME ETIME LAST_CALL_ET Hr since active Days since active LOGON_TIME EVENT
---------------------------------------------------- --------- -------------------- ---------------- ------------- ---------------- ---------- ------------ --------------- ----------------- ---------- ------------------------------
alter system kill session '183,25864,@1' immediate ; INACTIVE SYS 02-09-2016 12:05 03-09-2016 12:58 1511 1090 1090 26160 1511.1 SQL*Net message from client
alter system kill session '239,31544,@1' immediate ; SYS 26-08-2016 10:24 26-08-2016 10:59 11692 699437 699436 16786488 11692.3 SQL*Net message from client
alter system kill session '407,56366,@2' immediate ; SYS 18-07-2016 03:27 03-09-2016 13:17 68270 1 1 24 68269.5 SQL*Net message from client
alter system kill session '643,63640,@1' immediate ; SYS 13-07-2016 13:44 18-07-2016 03:27 74853 4096170 4096170 98308080 74852.9 SQL*Net message from client
alter system kill session '877,35540,@1' immediate ; SYS 13-07-2016 13:42 03-09-2016 13:16 74855 9 9 216 74854.6 SQL*Net message from client
alter system kill session '293,50579,@1' immediate ; SYS 13-07-2016 13:42 03-09-2016 13:12 74855 272 272 6528 74854.6 SQL*Net message from client


set serveroutput on size 100000 echo off feedback off lines 300

declare

 cursor sessinfo is
 SELECT NVL(s.username, '(oracle)') AS username,
 s.osuser,
 s.sid,
 s.serial#,
 p.spid,
 s.status,
 s.module,
 s.machine,
 s.program,
 TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time,
 s.last_call_et/3600 last_call_et_Hrs,
 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) 
 and s.type != 'BACKGROUND'
order by last_call_et;

 sess sessinfo%rowtype;

 sql_string1 Varchar2(2000);
 sql_string2 Varchar2(2000);


begin

 open sessinfo;

 loop
 fetch sessinfo into sess;
 exit when sessinfo%notfound;

 sql_string1 := ' sid= ' || sess.sid ||
 ' serail#= ' || sess.serial# ||
 ' machine= ' || sess.machine ||
 ' program= ' || sess.program ||
 ' username= ' || sess.username ||
 ' Inactive_Hr=' || trunc(sess.last_call_et_Hrs) || 
 ' OS_USER= ' || sess.osuser;

 sql_string2 := 'alter system kill session ' || chr(39) || sess.sid || ',' || chr(39) || sess.serial# || ';';


 dbms_output.put_line(sql_string1);
 dbms_output.put_line(sql_string2);
 end loop;

 close sessinfo;
end;
/


sid= 761 serail#= 7301 machine= *********************************= oracle@********************************* (W00E) username= (oracle) Inactive_Hr=1061 OS_USER= oracle
alter system kill session '761,'7301;
sid= 703 serail#= 54582 machine= *********************************= oracle@********************************* (W00D) username= (oracle) Inactive_Hr=1069 OS_USER= oracle
alter system kill session '703,'54582;
sid= 703 serail#= 54582 machine= *********************************= oracle@********************************* (W00D) username= (oracle) Inactive_Hr=1069 OS_USER= oracle
alter system kill session '703,'54582;

=====
col Instance for a40
col  Machine for a45	
select gi.iname "Instance", case grouping(gi.iname) when 1 then 'Total' else case grouping(gs.machine) 
when 1 then 'Total '||gi.iname else gs.machine end end "Machine", count(1) "Sessions" 
from gv$session gs, ( select inst_id, instance_name||'@'||host_name iname from gv$instance ) gi 
where gs.username is not null 
and gs.inst_id = gi.inst_id 
group by rollup(gi.iname,gs.machine)

============

Session information on known SID basis

set echo off linesize 132 verify off feedback off serveroutput on
declare
 SID number := 0 ;
 SERIAL number := 0 ;
 username varchar(20) := '';
 Status varchar(8) := '';
 machine varchar(10) := '';
 terminal varchar(25) := '';
 program varchar(30) := '';
 Module varchar(30) := '';
 Action varchar(20) := '';
 sql_hash_value number := 0 ;
 logontime varchar(30) := '';
 last_call_et number := 0 ;
 proc number := 0 ;
 spid number := 0 ;
 event varchar(30) := '';
 state varchar(30) := '';
 sql_text varchar(1000) := '';
cursor cur1 is
select
 a.sid sid,
 a.serial# serial,
 a.username username,
 a.status status ,
 a.machine machine,
 a.terminal terminal,
 a.program program,
 a.module module,
 a.action action,
 a.sql_hash_value sql_hash_value,
 to_char(a.logon_time,'DD-Mon-YYYY HH:MI:SS') logontime,
 a.last_call_et last_call_et,
 a.process proc,
 b.spid spid,
 sw.event event,
 sw.state state
 from gv$session a, gv$process b, gv$session_wait sw
 where a.paddr=b.addr
 and a.inst_id=b.inst_id
 and a.sid ='&sid'
 and a.inst_id=sw.inst_id
 and a.sid=sw.sid;
begin
 DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' Database session detail for the shadow process ');
 DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');
 for m in cur1 loop
 DBMS_OUTPUT.ENABLE(50000);
 DBMS_OUTPUT.PUT_LINE(' ');
 DBMS_OUTPUT.PUT_LINE('SID............ : ' || m.sid);
 DBMS_OUTPUT.PUT_LINE('SERIAL#........ : ' || m.serial);
 DBMS_OUTPUT.PUT_LINE('USERNAME....... : ' || m.username);
 DBMS_OUTPUT.PUT_LINE('STATUS......... : ' || m.status);
 DBMS_OUTPUT.PUT_LINE('Machine........ : ' || m.machine);
 DBMS_OUTPUT.PUT_LINE('Terminal....... : ' || m.terminal);
 DBMS_OUTPUT.PUT_LINE('Program........ : ' || m.program);
 DBMS_OUTPUT.PUT_LINE('Module......... : ' || m.module);
 DBMS_OUTPUT.PUT_LINE('Action......... : ' || m.action);
 DBMS_OUTPUT.PUT_LINE('SQL Hash Value. : ' || m.sql_hash_value);
 DBMS_OUTPUT.PUT_LINE('Logon Time..... : ' || m.logontime);
 DBMS_OUTPUT.PUT_LINE('Last Call Et... : ' || m.last_call_et);
 DBMS_OUTPUT.PUT_LINE('Process ID..... : ' || m.proc);
 DBMS_OUTPUT.PUT_LINE('SPID........... : ' || m.spid);
 DBMS_OUTPUT.PUT_LINE('Session Waiting for event:'||m.event);
 DBMS_OUTPUT.PUT_LINE('Session state ...........:'||m.state);
 for rec in ( select distinct(sql_text) sql_text from v$session s,v$sql v where
 s.sql_hash_value=v.hash_value and s.sql_address=v.address and s.sid=m.sid)
 loop
 dbms_output.put_line(substr('SQL_TEXT is..........:'||rec.sql_text,1,255));
 end loop;
 DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' ');
 end loop;
end;
/


set echo off linesize 132 verify off feedback off serveroutput on
declare
 SID      number := 0 ;
 SERIAL   number := 0 ;
 username varchar(20) := '';
 Status   varchar(8) := '';
 machine  varchar(10) := '';
 terminal varchar(25) := '';
 program  varchar(30) := '';
 Module   varchar(30) := '';
 Action   varchar(20) := '';
 sql_hash_value number := 0 ;
 logontime varchar(30) := '';
 last_call_et number := 0 ;
 proc number := 0 ;
 spid number := 0 ;
 event varchar(30) := '';
 state varchar(30) := '';
 sql_text varchar(1000) := '';
cursor cur1 is
select
 a.sid sid,
 a.serial# serial,
 a.username username,
 a.status status ,
 a.machine machine,
 a.terminal terminal,
 a.program program,
 a.module module,
 a.action action,
 a.sql_hash_value sql_hash_value,
 to_char(a.logon_time,'DD-Mon-YYYY HH:MI:SS') logontime,
 a.last_call_et last_call_et,
 a.process proc,
 b.spid spid,
 b.event event,
 b.state state
 from gv$session a, gv$process b, gv$session_wait sw
 where a.paddr=b.addr
 and a.inst_id=b.inst_id
 and b.spid='&1'
 and a.inst_id=sw.inst_id
 and a.sid=sw.sid;
begin
 DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' Database session detail for the shadow process ');
 DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');
 for m in cur1 loop
 DBMS_OUTPUT.ENABLE(50000);
 DBMS_OUTPUT.PUT_LINE(' ');
 DBMS_OUTPUT.PUT_LINE('SID............ : ' || m.sid);
 DBMS_OUTPUT.PUT_LINE('SERIAL#........ : ' || m.serial);
 DBMS_OUTPUT.PUT_LINE('USERNAME....... : ' || m.username);
 DBMS_OUTPUT.PUT_LINE('STATUS......... : ' || m.status);
 DBMS_OUTPUT.PUT_LINE('Machine........ : ' || m.machine);
 DBMS_OUTPUT.PUT_LINE('Terminal....... : ' || m.terminal);
 DBMS_OUTPUT.PUT_LINE('Program........ : ' || m.program);
 DBMS_OUTPUT.PUT_LINE('Module......... : ' || m.module);
 DBMS_OUTPUT.PUT_LINE('Action......... : ' || m.action);
 DBMS_OUTPUT.PUT_LINE('SQL Hash Value. : ' || m.sql_hash_value);
 DBMS_OUTPUT.PUT_LINE('Logon Time..... : ' || m.logontime);
 DBMS_OUTPUT.PUT_LINE('Last Call Et... : ' || m.last_call_et);
 DBMS_OUTPUT.PUT_LINE('Process ID..... : ' || m.proc);
 DBMS_OUTPUT.PUT_LINE('SPID........... : ' || m.spid);
 DBMS_OUTPUT.PUT_LINE('Session Waiting for event:'||m.event);
 DBMS_OUTPUT.PUT_LINE('Session state ...........:'||m.state);
 DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' ');
 end loop;
end;
/
===

col kill for a100
-- Kill all sessions specific events 
select       'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill
,'-- ' ,username,s.con_id,sql_id,event
from gv$session s
where 1=1 
-- and (event='latch: shared pool' or event='library cache lock') 
--and s.USERNAME='DBSNMP'
-- and s.sql_id='0vj44a7drw1rj'
--and s.USERNAME not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' , 'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' ) 
and s.USERNAME is not null 
--and CON_ID !=0
;

===
set lines 300 pagesize 200
col MACHINE for a35                                                     
col PROGRAM for a30
select sum(case when status = 'ACTIVE' then 1 else 0 end) as ACTIVE_COUNT
 , sum(case when status = 'INACTIVE' then 1 else 0 end) as INACTIVE_COUNT
 , count(*) as TOTAL_COUNT
 , username, machine,osuser,program
 from gv$session
 where type <> 'BACKGROUND' 
 and username not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' ,'WK_TEST', 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON','FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC','SI_INFORMTN_SCHEMA','LBACSYS','DBVISIT7')
 group by username, machine,osuser,program
 order by username, machine,osuser,program;
==========

to connect pluggable database ...

sqlplus "system/sys@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.77)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=anuj)))"

=========
select 'alter system kill session ' || '''' || sid || ',' || serial# ||',@'|| inst_id || '''' || ' immediate;' from gv$session where sid='&sid';


====
to kill processes 
select 'echo '||inst_id||';kill -9 '||spid from gv$process where (addr,inst_id) in (select paddr,inst_id from gv$session where module like '%ANUJ%') order by inst_id;
===============
Session Info ....



SET    PAGES   0       -
       NEWP    0       -
       LINES   150     -
       TERM    Off     -
       HEAD    Off

Col     X form a150
--spool  all_session.log
TTitle  T Skip 2

select  ' ' x
, lpad( 'SADDR', 24, ' ')			||' : '||s.saddr x
, lpad( '_', 43, '_') x
, lpad( 'SID', 24, ' ')				||' : '||s.sid x
, lpad( 'Sid_serial', 24, ' ')			||' : '||''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' x
, lpad( 'SERIAL#', 24, ' ')			||' : '||s.serial# x
, lpad( 'AUDSID', 24, ' ')			||' : '||s.audsid x
, lpad( 'PADDR', 24, ' ')			||' : '||s.paddr x
, lpad( 'USER#', 24, ' ')			||' : '||s.user# x
, lpad( 'USERNAME', 24, ' ')			||' : '||s.username x
, lpad( 'COMMAND', 24, ' ')			||' : '||s.command x
, lpad( 'TADDR', 24, ' ')			||' : '||s.taddr x
, lpad( 'LOCKWAIT', 24, ' ')			||' : '||s.lockwait x
, lpad( 'STATUS', 24, ' ')			||' : '||s.status x
, lpad( 'SERVER', 24, ' ')			||' : '||s.server x
, lpad( 'SCHEMA#', 24, ' ')			||' : '||s.schema# x
, lpad( 'SCHEMANAME', 24, ' ')			||' : '||s.schemaname x
, lpad( 'OSUSER', 24, ' ')			||' : '||s.osuser x
, lpad( 'Client Process', 24, ' ')		||' : '||s.process x
, lpad( 'Server Process', 24, ' ')		||' : '||p.spid x
, lpad( 'MACHINE', 24, ' ')			||' : '||s.machine x
, lpad( 'TERMINAL', 24, ' ')			||' : '||s.terminal x
, lpad( 'PROGRAM', 24, ' ')			||' : '||s.program x
, lpad( 'TYPE', 24, ' ')			||' : '||s.type x
, lpad( 'SQL_ID', 24, ' ')			||' : '||s.sql_id x
, lpad( 'PREV_SQL_ID', 24, ' ')			||' : '||s.prev_sql_id x
, lpad( 'SQL_ADDRESS', 24, ' ')			||' : '||s.sql_address x
, lpad( 'SQL_HASH_VALUE', 24, ' ')		||' : '||s.sql_hash_value x
, lpad( 'PREV_SQL_ADDR', 24, ' ')		||' : '||s.prev_sql_addr x
, lpad( 'PREV_HASH_VALUE', 24, ' ')		||' : '||s.prev_hash_value x
, lpad( 'MODULE', 24, ' ')			||' : '||s.module x
, lpad( 'MODULE_HASH', 24, ' ')			||' : '||s.module_hash x
, lpad( 'ACTION', 24, ' ')			||' : '||s.action x
, lpad( 'ACTION_HASH', 24, ' ')			||' : '||s.action_hash x
, lpad( 'CLIENT_INFO', 24, ' ')			||' : '||s.client_info x
, lpad( 'FIXED_TABLE_SEQUENCE', 24, ' ')        ||' : '||s.fixed_table_sequence x
, lpad( 'ROW_WAIT_OBJ#', 24, ' ')		||' : '||s.row_wait_obj# x
, lpad( 'ROW_WAIT_FILE#', 24, ' ')		||' : '||s.row_wait_file# x
, lpad( 'ROW_WAIT_BLOCK#', 24, ' ')		||' : '||s.row_wait_block# x
, lpad( 'ROW_WAIT_ROW#', 24, ' ')		||' : '||s.row_wait_row# x
, lpad( 'LOGON_TIME', 24, ' ')			||' : '||to_char( s.logon_time, 'dd mon yyyy hh24:mi:ss') x
, lpad( 'LAST_CALL_ET', 24, ' ')		||' : '||s.last_call_et x
, lpad( 'SQL FIRST_LOAD_TIME', 24, ' ')	        ||' : '||sql.first_load_time x
, lpad( 'FINAL_BLOCKING* ..', 24, ' ')	        ||' : '||s.final_blocking_session_status x
, lpad( 'EVENT ..', 24, ' ')			||' : '||s.event x
, lpad( 'SQL', 24, ' ')				||' : '||sql.sql_text x
from    gv$sqlarea sql,gv$process p,gv$session s
where 1=1
and     p.addr             = s.paddr
and	    p.inst_id          = s.inst_id
and     nvl( s.sql_address, 'FFFFFFFF') = sql.Address
and     s.inst_id = sql.inst_id
And     Nvl( s.SERIAL#, 0) > 1
--and schemaname not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' ,'WK_TEST', 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON','FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
-- 'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC','SI_INFORMTN_SCHEMA','LBACSYS','DBVISIT7')
/


============




SET LINES 300 pagesize 300
col kill for a15
col UNAM2 format a20  word  heading "Oracle User/OS User"
col PROG format a15 word heading "Program|Terminal"
col SID  format a10 word heading "SID/|Serial#"
col STAT format A7 Heading "Status"
col LTIM format a20 word heading "Logon Time/|Last Activy time"
col TIMI format a20 word heading "Start time/|Last Update time|remaining->elapsed|[%done end time]"
col STMT format a64 heading "Statement" WORD
col OPNA format a10 WORD PRINT HEADING "Long Op"
col WORK format a12 WORD PRINT HEADING "Target|So far|Total Work"
col MESS format a50 WORD PRINT HEADING "Long op message" wrap
--NEWLINE
SELECT   
''''||ses.sid ||','|| ses.serial#||',@'||ses.inst_id ||'''' kill
,ses.sql_id
,lo.opname opna
        ,NVL(ses.username,lo.username)||' / '||ses.osuser||DECODE(ses.audsid,userenv('SESSIONID'),'**','')  unam2
        ,NVL(ses.status,'unknown') stat
--      ,TO_CHAR(ses.logon_time,'DD-MON-YYYY:HH24:MI:SS')||'  '
--        ||to_char(sysdate - (ses.last_call_et)/86400,'DD-MON-YYYY:hh24:mi:ss') ltim
         ,NVL(LPAD(TO_CHAR(target),11,'_'),'___________')||','
         ||LPAD(TO_CHAR(sofar),11,'_')||','
         ||LPAD(TO_CHAR(totalwork),11,'_')||' ('||units||') ['
         ||DECODE(0,totalwork,'n/a',CEIL(100*sofar/(totalwork)))||'%]'
         work
        ,start_time||' '
         ||last_update_time
         ||' '||TO_CHAR(time_remaining)||''
         ||'->'||elapsed_seconds||' ['||
         DECODE(0,time_remaining+elapsed_seconds,'n/a',CEIL(100*elapsed_seconds/(time_remaining+elapsed_seconds)))||'% eta '
         ||TO_CHAR(sysdate+(time_remaining/(60*60*24)),'HH24:MIpm')||']' timi
        ,DECODE(ses.program,'','',ses.program||' '||ses.terminal)  prog
--      ||'('||RTRIM(ses.machine)||')'
--        ,lo.sid||'/'||lo.serial#||' ['||ses.audsid||']' sid
        ,message mess
		,REPLACE(s.sql_text,CHR(10),' ') stmt
--,context
FROM     gv$sql s   ,gv$session_longops lo  ,gv$session ses
WHERE   lo.sql_address=s.address
and     lo.inst_id=s.inst_id
AND     lo.sql_hash_value=s.hash_value
AND     lo.time_remaining!=0
AND     lo.sid=ses.sid(+)
AND     lo.serial#=ses.serial#(+)
/


===================

Kill Script 
 
 set serveroutput on long 99999 lines 131 pages 2000 feedback off head off pagesize 0 linesize 200 long 99999
 
DECLARE
B_USERNAME 		GV$SESSION.USERNAME%TYPE;
B_SID 			GV$SESSION.SID%TYPE;
B_SERIAL 		GV$SESSION.SERIAL#%TYPE;
B_INST_ID 		GV$SESSION.INST_ID%TYPE;
B_LAST_CALL_ET 	GV$SESSION.LAST_CALL_ET%TYPE;
B_SQL_ID 		GV$SESSION.SQL_ID%TYPE;
B_SQLFULLTEXT 	GV$SQLAREA.SQL_FULLTEXT%TYPE;
 
/** This query will pick all the long running sessions **/
 
CURSOR LONGRUNNING_SESS
IS
SELECT distinct s.username,Q.SQL_ID,round(s.last_call_et / 60,2) Time_in_mins,s.sid,s.serial#,s.inst_id
    FROM gv$session s
         JOIN gv$sqltext_with_newlines q ON s.sql_address = q.address
   WHERE 1=1
  -- and status = 'ACTIVE' 
   --AND username like '%ANUJ%' 
   AND TYPE <> 'BACKGROUND'
ORDER BY s.inst_id;
cursor killcurs(v_username in varchar, v_sid in number) 
is select SID ,serial# SERIAL,inst_id ,username ,to_char(logon_time,'''DD-MON-YYYY HH24-MI-SS''') OTIME,
event,status ,machine ,round(LAST_CALL_ET/60,2) OMIN 
FROM gv$session 
where username is not null 
and username=v_username 
and sid=v_sid 
order by inst_id;
 
BEGIN
        BEGIN
                OPEN LONGRUNNING_SESS;
                LOOP
                FETCH LONGRUNNING_SESS INTO B_USERNAME,B_SQL_ID,B_LAST_CALL_ET,B_SID,B_SERIAL,B_INST_ID;
                EXIT WHEN LONGRUNNING_SESS%NOTFOUND;
                                IF B_LAST_CALL_ET >=1  --(1 Minutes for this example)  <<<<<<<<<<<<<<<<<<<<
                                THEN
                                        FOR v_rec in killcurs(B_USERNAME,B_SID)
                                        LOOP
                                        IF killcurs%ROWCOUNT > 0
                                        THEN
                                        DBMS_OUTPUT.PUT_LINE('********************************************************');
                                        DBMS_OUTPUT.PUT_LINE(' Started Executing to KILL LONG RUNNING Session : '||v_rec.SID|| CHR(10));
                                        dbms_output.put_line('Long Running Session details --> B_USERNAME - '||B_USERNAME||' B_SQL_ID - '||B_SQL_ID
                                        ||' B_LAST_CALL_ET - '||B_LAST_CALL_ET||' B_SID - '||B_SID||' B_SERIAL - '||B_SERIAL
                                        ||' B_INST_ID - '||B_INST_ID);
                                        DBMS_OUTPUT.PUT_LINE('********************************************************');
                                        SELECT SQL_FULLTEXT INTO B_SQLFULLTEXT from GV$SQLAREA WHERE SQL_ID=B_SQL_ID and INST_ID=B_INST_ID;
                                        DBMS_OUTPUT.PUT_LINE('**** SQL TEXT *****');
                                        DBMS_OUTPUT.PUT_LINE(B_SQLFULLTEXT);
                                        DBMS_OUTPUT.PUT_LINE('********************************************************');
          dbms_output.put_line('alter system kill session '''||v_rec.SID|| ',' || v_rec.SERIAL||',@'||v_rec.inst_id
                || ''' immediate; '||v_rec.username||' '||v_rec.OTIME||' '|| v_rec.event||' '||v_rec.status||' '||v_rec.machine||' '||v_rec.OMIN);
        --   EXECUTE IMMEDIATE 'alter system kill session '''||v_rec.SID|| ',' || v_rec.SERIAL||',@'||v_rec.inst_id||'''immediate ;'  ;
                                        DBMS_OUTPUT.PUT_LINE('********************************************************');
                                        DBMS_OUTPUT.PUT_LINE('Ended Executing to KILL LONG RUNNING Session : '||B_SQL_ID|| CHR(10));
                                        DBMS_OUTPUT.PUT_LINE('********************************************************');
                                        END IF;
                                        END LOOP;
                                END IF;
                DBMS_OUTPUT.PUT(CHR(10));
                DBMS_OUTPUT.PUT(CHR(10));
                END LOOP;
                CLOSE LONGRUNNING_SESS;
                EXCEPTION
                WHEN OTHERS THEN
               dbms_output.put_line('Error : '|| dbms_utility.format_error_stack() || CHR(10) || dbms_utility.format_error_backtrace());
        END;
end;
 
/
       
==================
 
set lines 300 pagesize 300 long 50000
clear column
col username         	for A20 WRAP
col prog       			for A40 WRAP
col run_time         	for A10 JUSTIFY RIGHT
col sid 				for A4  NEW_VALUE sid
col status           	for A16
col kill 				for a15
col "Event/P1/P2/P3" 	for a70
-- ACCEPT search_string PROMPT "Search for: "
SELECT  ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||''''  as kill
,       s.username || chr(10) || s.osuser AS username
,       s.status   || chr(10) || 'PID:' || p.spid AS status
,       lpad( to_char( trunc(24*(sysdate-s.logon_time))) || to_char( trunc(sysdate) + (sysdate-s.logon_time),':MI:SS' ), 10, ' ') AS run_time
,       s.program AS prog
--||  chr(10) || s.event AS prog_event
, s.sql_id,PREV_SQL_ID,s.type,BLOCKING_SESSION_STATUS,EVENT||' | '||P1TEXT||'='||ltrim(to_char(P1,'999999999999'))||decode(P2,0,'',P1,'=P1',' | '||P2TEXT||'='||ltrim(to_char(P2,'999999999999')))
||decode(P3,0,'',' | '||P3TEXT||'='||ltrim(to_char(P3,'999999999999'))) "Event/P1/P2/P3"
FROM   gv$session s  JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE   1=1
-- and schemaname not in ('DBVISIT7', 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' )
-- and s.type != 'BACKGROUND'
AND     audsid != sys_context('USERENV','SESSIONID')
/* AND     upper(  s.osuser || '|' ||
                s.program  || '|' ||
                s.event    || '|' ||
                s.sid      || '|' ||
                s.username || '|' ||
                p.spid
        ) LIKE upper('%search_string.%') */
ORDER BY  3
/ 

=========================
-- With waits 
set linesize 500 pagesize 300
col event  			for a30
col client_identifier  	        for a10 
col wait_class  		for a10 
col module 			for a10 
col program  			for a10 
col kill 			for a15
col action 			for a10 
col machine 			for a30
col osuser 			for a15 
col username  			for a14
select 
 ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,s.username,
 s.status,
(select value from gv$sesstat natural join v$statname where name = 'physical reads' and sid=s.sid and INST_ID=s.inst_id)disk_reads,
(select value from gv$sesstat natural join v$statname where name = 'session logical reads' and sid=s.sid and INST_ID=s.inst_id) logical_reads,
 (select value/100 cpu_sec from gv$sesstat natural join v$statname where name = 'CPU used by this session' and sid=s.sid and INST_ID=s.inst_id)cpu_sec,
 s.logon_time,
 --s.program,
 s.osuser,
 s.machine,
-- p.pid,
-- p.spid,
 s.client_identifier,
-- s.client_info,
 s.module,
 s.action,
 s.event,
 s.wait_class,
 case
 when s.status = 'ACTIVE' then
 s.last_call_et
 else
 null
 end wait_sec,
 s.blocking_session_status,
 s.blocking_instance,
 s.blocking_session,
 s.sql_id,
 s.sql_hash_value,
 s.sql_address,
 s.prev_sql_id,
 s.prev_hash_value,
 s.prev_sql_addr,
 s.sql_child_number,
 s.prev_child_number,
 s.server
 from gv$session s join gv$process p on (s.inst_id = p.inst_id and s.paddr = p.addr)
 where s.type = 'USER' 
 and s.status='ACTIVE'
and schemaname not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' ,'WK_TEST', 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON','FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
   'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC','SI_INFORMTN_SCHEMA','LBACSYS')
order by 6;

-- with pdb
set linesize 500 pagesize 300
col event  			for a30
col client_identifier  	        for a10 
col wait_class  		for a10 
col module 			for a10 
col program  			for a10 
col kill 			for a15
col action 			for a10 
col machine 			for a30
col osuser 			for a15 
col username  			for a14
col pdb_name for a15
select 
 ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,s.username,
 s.status,
(select value from gv$sesstat natural join v$statname where name = 'physical reads' and sid=s.sid and INST_ID=s.inst_id)disk_reads,
(select value from gv$sesstat natural join v$statname where name = 'session logical reads' and sid=s.sid and INST_ID=s.inst_id) logical_reads,
 (select value/100 cpu_sec from gv$sesstat natural join v$statname where name = 'CPU used by this session' and sid=s.sid and INST_ID=s.inst_id)cpu_sec,
s.con_id,
(select distinct NAME from gv$pdbs where CON_ID=s.con_id) pdb_name,
 s.logon_time,
 --s.program,
 s.osuser,
 s.machine,
-- p.pid,
-- p.spid,
 s.client_identifier,
-- s.client_info,
 s.module,
 s.action,
 s.event,
 s.wait_class,
 case
 when s.status = 'ACTIVE' then
 s.last_call_et
 else
 null
 end wait_sec,
 s.blocking_session_status,
 s.blocking_instance,
 s.blocking_session,
 s.sql_id,
 s.sql_hash_value,
 s.sql_address,
 s.prev_sql_id,
 s.prev_hash_value,
 s.prev_sql_addr,
 s.sql_child_number,
 s.prev_child_number,
 s.server
 from gv$session s join gv$process p on (s.inst_id = p.inst_id and s.paddr = p.addr)
 where s.type = 'USER' 
 and s.status='ACTIVE'
--and schemaname not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' ,'WK_TEST', 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON','FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
 --  'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC','SI_INFORMTN_SCHEMA','LBACSYS')
order by 6;



undefine spid
set linesize 300 pagesize 300
col spid for a6
col sid for 99999

col action 		for a20
col logon_time 		for a24
col module 		for a13
col cli_process 	for a7
col cli_mach 		for a25
col status 		for a10
col username 		for a10
col kill 		for a16
col PKill 		for a15
select ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,p.spid,s.sql_id, PREV_SQL_ID,s.status, s.username, s.action,to_char(s.logon_time, 'DD-MON-YY, HH24:MI') logon_time,s.module,s.last_call_et/3600,s.process cli_process,s.machine cli_mach,s.type,'kill -9 '||spid PKill
from gv$session s, gv$process p
where p.addr=s.paddr 
and  s.type != 'BACKGROUND' 
-- and p.spid=
--and s.process = 'cli_process'
-- s.sid=
;
====


-- Cpu Info 

col kill for a15
col CLIENT_INFO for a20
col USERNAME  for a20 
select * from
(
select username,''''||sid ||','|| serial#||',@'||inst_id ||'''' kill,sid,sql_id,prev_sql_id,
       round((cpu_usage/(
                        select sum(value) total_cpu_usage
                          from gv$sesstat t
                         inner join gv$session  s on ( t.sid = s.sid )
                         inner join gv$statname n on ( t.statistic# = n.statistic# )
                         where n.name like '%CPU used by this session%'
                           and nvl(s.sql_exec_start, s.prev_exec_start) >= sysdate-1/24
                        ))*100,2) cpu_usage_per_cent,
       module_info,client_info 
  from
(
select nvl(s.username,'Oracle Internal Proc.') username,s.sid,s.serial#,s.inst_id,t.value cpu_usage, nvl(s.module, s.program) module_info, decode(s.osuser,'oracle', s.client_info, s.osuser) client_info,
sql_id,prev_sql_id
  from gv$sesstat t
       inner join gv$session  s on ( t.sid = s.sid )
       inner join gv$statname n on ( t.statistic# = n.statistic# )
 where n.name like '%CPU used by this session%'
   and nvl(s.sql_exec_start, s.prev_exec_start) >= sysdate-1/24
) s1
)
order by cpu_usage_per_cent desc;

===


set linesize 600 pagesize 300 
 col kill for a15
 col program for a15
 col client_identifier for a15
 col MACHINE for a15
 col ACTION    for a10                                                        
 col EVENT for a15
 col WAIT_CLASS for a12
 col MODULE for a12
 col USERNAME for a12
 select /*+ parallel(4) */ s.username,
 ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,
 s.status,
 (select value from gv$sesstat natural join v$statname where name = 'physical reads' and sid=s.sid and inst_id=s.inst_id) disk_reads,
 (select value from gv$sesstat natural join v$statname where name = 'session logical reads' and sid=s.sid and inst_id=s.inst_id ) logical_reads,
(select value/100 cpu_sec from gv$sesstat natural join v$statname where name = 'CPU used by this session' and sid=s.sid and inst_id=s.inst_id)cpu_sec,
 s.logon_time,
 --s.program,
 --s.osuser,
 --s.machine,
 p.pid,
 p.spid,
 --s.client_identifier,
 --s.client_info,
 s.module,
 s.action,
 s.event,
 s.wait_class,
 case
 when s.status = 'ACTIVE' then
 s.last_call_et
 else
 null
 end wait_sec,
 s.blocking_session_status,
 s.blocking_instance,
 s.blocking_session,
 s.sql_id,
 s.sql_hash_value,
 s.sql_address,
 s.prev_sql_id,
 s.prev_hash_value,
 s.prev_sql_addr,
 s.sql_child_number,
 s.prev_child_number,
 s.server
 from gv$session s join gv$process p on (s.inst_id = p.inst_id and s.paddr = p.addr)
 where s.type = 'USER' 
 and s.status='ACTIVE'
 order by disk_reads desc
 
====


set lines 300 pages 2000
--col "SID,SERIAL@INST_ID" for a20
col name format a26
col username format a45
col program format a40
col SESS_CPU_SECS wra for 99999999999
col LAST_CPU_SECS wra for 99999999999
col LOGON_MIN wra for 999999999
col "CPU USAGE %" wra for 999.99
col service_name for a20
col kill for a17
SELECT * FROM (select sess_cpu.spid,
--sess_cpu.sid||','||sess_cpu.serial#||'@'||call_cpu.inst_id as "SID,SERIAL@INST_ID",
''''||sess_cpu.sid ||','|| sess_cpu.serial#||',@'||call_cpu.inst_id ||''''  as kill,
 NVL(sess_cpu.username, program) username,sess_cpu.service_name,
sess_cpu.status,sess_cpu.LAST_CALL_ET, to_char(sess_cpu.logon_time,'dd/mm/yyyy hh24:mi:ss') "LOGON TIME",
round((sysdate - sess_cpu.logon_time)*1440*60/60) LOGON_MIN,
sess_cpu.value/100 SESS_CPU_SECS, (sess_cpu.value - call_cpu.value)/100 LAST_CPU_SECS,
round ((sess_cpu.value/100)/round((sysdate - sess_cpu.logon_time)*1440*60)*100,2) "CPU USAGE %",
 --round ((sess_cpu.value/100)/round((sysdate - sess_cpu.logon_time)*1440*60)*100,2) Percent,
sess_cpu.sql_id 
from
(select se.inst_id,se.sql_id ,ss.statistic#,pr.spid,se.sid,se.serial#, se.username,se.service_name,se.status,se.last_call_et, se.program, se.logon_time, sn.name, ss.value 
from gv$session se,gv$process pr, gv$sesstat ss,v$statname sn
where se.sid=ss.sid
and se.inst_id=ss.inst_id
and pr.inst_id=se.inst_id
and sn.statistic#=ss.statistic#
and pr.addr=se.paddr
and sn.name in ('CPU used by this session') ) sess_cpu,
(select se.inst_id,ss.statistic#,se.sid, ss.value, value/100 seconds from gv$session se, gv$sesstat ss, v$statname sn
where se.sid=ss.sid
and se.inst_id=ss.inst_id
and sn.statistic#=ss.statistic#
and sn.name in ('CPU used when call started') ) call_cpu
where sess_cpu.sid=call_cpu.sid
and sess_cpu.inst_id=call_cpu.inst_id
--and sess_cpu.status = 'ACTIVE'
--order by "CPU USAGE %" DESC
) WHERE ROWNUM <=30
;





SET PAGESIZE 60
SET LINESIZE 300

COLUMN username FORMAT A30
COLUMN sid FORMAT 999,999,999
COLUMN serial# FORMAT 999,999,999
COLUMN "cpu usage (seconds)" FORMAT 999,999,999.0000

SELECT
s.username,
t.sid,
s.serial#,
SUM(VALUE/100) as "cpu usage (seconds)"
FROM
v$session s,
v$sesstat t,
v$statname n
WHERE 1=1
and t.STATISTIC# = n.STATISTIC#
AND NAME like '%CPU used by this session%'
AND t.SID = s.SID
AND s.status='ACTIVE'
AND s.username is not null
GROUP BY username,t.sid,s.serial#
/

Show Memory  Usage for Active Sessions

col session for a70

SELECT to_char(ssn.sid, '9999') || ' - ' || nvl(ssn.username, nvl(bgp.name, 'background')) ||' - '||
nvl(lower(ssn.machine), ins.host_name) "SESSION",
to_char(prc.spid, '999999999') "PID/THREAD",
to_char((se1.value/1024)/1024, '999G999G990D00') || ' MB' " CURRENT SIZE",
to_char((se2.value/1024)/1024, '999G999G990D00') || ' MB' " MAXIMUM SIZE",
 ssn.sql_id
,ssn.PREV_SQL_ID
FROM v$sesstat se1, v$sesstat se2, v$session ssn, v$bgprocess bgp, v$process prc,
v$instance ins, v$statname stat1, v$statname stat2
WHERE se1.statistic# = stat1.statistic# and stat1.name = 'session pga memory'
AND se2.statistic# = stat2.statistic# and stat2.name = 'session pga memory max'
AND se1.sid = ssn.sid
AND se2.sid = ssn.sid
AND ssn.paddr = bgp.paddr (+)
AND ssn.paddr = prc.addr (+);




col BEGIN_INTERVAL_TIME for a22
col idle for 999
col sys for 999
col user1 for 999
col nice for 999
set lin 1000 pages 1000
col db_name for a35
col cpus1 for 9999
select (select instance_name||'@'||substr(host_name,-(length(host_name))) from v$instance)db_name ,cpus1,sess,date1, idle,sys,user1,nice,sql.cnt ,sql.CPU,sql.ELAPSED,sql.iowait,sql.exec
from
(
select count(1)sess,os.snap_ID ,cpus1, to_char(BEGIN_INTERVAL_TIME,'dd-mon-yyyy hh24:mi')date1, idle,sys,user1,nice
 from
(
select
SNAP_ID,
 cpus1,round(idle1/(idle1+user1+sys1+iowait1+nice1),2)*100 idle,
 round(sys1/(idle1+user1+sys1+iowait1+nice1),2)*100 sys,
 round(user1/(idle1+user1+sys1+iowait1+nice1),2)*100 user1,
 round(nice1/(idle1+user1+sys1+iowait1+nice1),2)*100 nice
from
(SELECT SNAP_ID,
sum(decode(stat_name,'NUM_CPUS',value,0))    cpus1,
sum(decode(stat_name,'IDLE_TIME',value,0))   idle1,
sum(decode(stat_name,'USER_TIME',value,0))   user1,
sum(decode(stat_name,'SYS_TIME',value,0))    sys1,
sum(decode(stat_name,'IOWAIT_TIME',value,0)) iowait1,
sum(decode(stat_name,'NICE_TIME',value,0))   nice1
FROM   DBA_HIST_OSSTAT group by SNAP_ID))os
     , DBA_HIST_snapshot sn
     , (select * from dba_hist_active_sess_history where user_id in (select user_id from dba_users where username in ('SYS','SYSTEMS'))) ash  
where os.SNAP_ID=sn.SNAP_ID
and sn.SNAP_ID=ash.SNAP_ID
and ash.snap_id=os.snap_id
group by os.SNAP_ID,cpus1,to_char(BEGIN_INTERVAL_TIME,'dd-mon-yyyy hh24:mi'), idle,sys,user1,nice
)aa, (select snap_id,count(1)cnt,round(sum(CPU_TIME_TOTAL/1000000),0)CPU,round(sum(ELAPSED_TIME_TOTAL/1000000),0)ELAPSED
,round(sum(IOWAIT_TOTAL/1000000),0)IOWAIT,round(sum(EXECUTIONS_TOTAL),0)exec from DBA_HIST_SQLSTAT group by snap_id) sql
where sql.snap_id=aa.snap_id order by 3;

===
--memory allocations
set linesize 200 pagesize 300
column username format a20
column module format a20
SELECT a.inst_id,
       NVL(a.username,'(oracle)') AS username,
       a.module,
       a.program,
       Trunc(b.value/1024) AS memory_kb
FROM   gv$session a,
       gv$sesstat b,
       gv$statname c
WHERE  a.sid = b.sid
AND    a.inst_id = b.inst_id
AND    b.statistic# = c.statistic#
AND    b.inst_id = c.inst_id
AND    c.name = 'session pga memory'
AND    a.program IS NOT NULL
ORDER BY b.value DESC;

===

-- IO etc 
 
 
  set linesize 300 pagesize 300
  col kill for a17
  col event for a20
  select   ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,
    s.status, 
                  -- s.inst_id inst,
                   spid, 
                  -- s.serial#, 
   s.sql_id,
                   to_char(s.logon_time,'DD.MM HH24:MI') logon, 
                   s.username, s.osuser,
                   substr(s.program,1,24) program,
   s.event,
                   s.terminal,
                   consistent_gets cons_gets, 
                   block_gets, physical_reads ph_reads,
                   trunc(100*(consistent_gets + block_gets - physical_reads) /(0.1 + consistent_gets + block_gets),2) Hit_ratio,
                   trunc(100 * (block_changes + consistent_changes)  /(0.1 + block_gets + consistent_gets),2) Undo
           from    
               gv$session s,
               gv$sess_io i,
               gv$process p,
               gv$bgprocess b
           where
               s.sid = i.sid
               and s.inst_id = i.inst_id
               and s.paddr = p.addr
               and s.inst_id = p.inst_id
               and s.paddr = b.paddr(+)
   and STATUS!='INACTIVE'
   and s.osuser!='grid';





set linesize 700 pagesize 300
col kill for a16
col sql_text for a50 wrap
col program for a15
col hash_value for 9999999999999
col box for a25
col event for a27
col os_user for a15
col wait_class for a15
select /* +ANUJ */
  ''''||b.sid ||','|| b.serial#||',@'||b.inst_id ||''''  as kill,
     substr(a.spid,1,5) pid,
    status, 
   substr(b.machine,1,25) box,
   substr(b.username,1,10) username,
   substr(b.osuser,1,30) os_user,
   substr(sw.event,1,30) event,
   sw.wait_class,
   sw.seconds_in_wait waiting,
   b.server,
   decode(b.program,null,substr(a.program,1,30),substr(b.program,1,30)) program,
   TO_CHAR(LOGON_TIME, 'DD/MM/YYYY HH24:MI:SS' ) LOGON_TIME,
             CASE  
        WHEN LAST_CALL_ET< 60 THEN LAST_CALL_ET || ' Seconds'
        WHEN LAST_CALL_ET< 3600 THEN ROUND(LAST_CALL_ET/60) || ' Minutes'
        WHEN LAST_CALL_ET< 86400 THEN ROUND(LAST_CALL_ET/60/60,1) || ' Hour(s)'
      ELSE
        ROUND(LAST_CALL_ET/60/60/24,1) || ' Day(s)'
     END INACTIVE_ACTIVE_TIME,
   b.sql_id,
   b.prev_sql_id,
       optimizer_mode,
       hash_value,
       sql_text
   -- , 'ALTER SYSTEM DISCONNECT SESSION ' || CHR(39) || b.sid || ',' || b.serial# || ',@' || a.INST_ID || chr(39) || ' immediate;' kill_cmd
from
   gv$session b,
   gv$process a,
   gv$session_wait sw,
   gv$sqlarea sqlarea
where b.paddr = a.addr
      and b.inst_id = a.inst_id
      and type='USER'
    and sw.inst_id = b.inst_id
    and sw.sid = b.sid
    and b.sql_hash_value = sqlarea.hash_value
      and b.sql_address    = sqlarea.address
     and sw.event not in ('ges remote message','gcs remote message','rdbms ipc message',
                            'SQL*Net message from client','SQL*Net message to client',
                            'events in waitclass Other','DIAG idle wait','SQL*Net more data from client',
                            'PX Deq: Execute Reply','PX Deq: Join ACK','PX Deq: Parse Reply',
'Streams AQ: waiting for messages in the queue','wait for unread message on broadcast channel',
'jobq slave wait','SQL*Net message from dblink','PX Deq: Execution Msg')
and TYPE != 'BACKGROUND'
and sql_text not like '%+ANUJ%'
order by status, spid;





====

from active session 

col MODULE for a20
col ACTION for a20
select * from (
select
     '''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''' kill ,
sql_id,
     program,
module,
action,
     sum(decode(session_state,'WAITING',0,1)) "CPU",
     sum(decode(session_state,'WAITING',1,0)) - sum(decode(session_state,'WAITING',decode(wait_class,'User I/O',1,0),0)) "WAITING" ,
     sum(decode(session_state,'WAITING',decode(wait_class,'User I/O',1,0),0)) "IO" ,
     sum(decode(session_state,'WAITING',1,1)) "TOTAL"
from gv$active_session_history 
where session_type='FOREGROUND'
group by '''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''',sql_id,module,action,program
order by sum(decode(session_state,'WAITING',1,1)) desc)
where rownum <11





set pagesize 300 linesize 300
col session_id format 999 heading "SESS|ID"
col session_serial# format 9999 heading "SESS|SER|#"
col event format a40
col total_waits format 9,999,999,999 heading "TOTAL|TIME|WAITED|MICRO"
col kill for a16
Select 
--session_id, session_serial#, 
'''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''' kill ,event, sum(time_waited) total_waits
from gv$active_session_history
where 1=1
--and session_id||session_serial# in (****)
and sample_time > sysdate -1
and program like '%rman%'
and session_state='WAITING' 
and time_waited > 0
group by '''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''', Event
--Order by session_id, session_serial#, total_waits desc
;


set pagesize 300 linesize 300
col kill for a16
select * from (
select
sql_id ,
sum(decode(session_state,'on cpu',1,0)) as CPU,
sum(decode(session_state,'WAITING',1,0)) - sum(decode(session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) as WAIT,
sum(decode(session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) as IO,
sum(decode(session_state,'ON CPU',1,1)) as TOTAL
from gv$active_session_history
where SQL_ID is not NULL
group by sql_id
order by sum(decode(session_state,'ON CPU',1,1))   desc
)
where rownum <11



set pagesize 300 linesize 300
col kill for a16
select * from (
select
'''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''' kill ,
sql_id ,
sum(decode(session_state,'on cpu',1,0)) as CPU,
sum(decode(session_state,'WAITING',1,0)) - sum(decode(session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) as WAIT,
sum(decode(session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) as IO,
sum(decode(session_state,'ON CPU',1,1)) as TOTAL
from gv$active_session_history
where SQL_ID is not NULL
group by '''' || SESSION_ID || ',' || session_serial# ||',@'|| inst_id||'''',sql_id
order by sum(decode(session_state,'ON CPU',1,1))   desc
)
where rownum <11


====


-- Sql monitor 
 
col key format 9999999999999999
set colsep '|'
set linesize 400
col module format a25
col ACTION format a25
col kill for a17
select 
''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||''''  kill ,
sm.sql_id, sm.sql_exec_id,
    to_char(max(sm.sql_exec_start) ,'dd/mm/yyyy hh24:mi:ss') as sql_exec_start,
    sm.sql_child_address child_address,
sm.plsql_object_id   ,     
sm.plsql_subprogram_id,
    sm.module,
    sm.action,
    sm.program
  from gv$sql_monitor sm, gv$session s 
  where sm.sid = s.sid
    and sm.inst_id=sm.inst_id
    and sm.session_serial# = s.serial#
and s.status = 'ACTIVE'
   group by ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' , sm.sql_id, sm.sql_exec_id, sm.sql_child_address,sm.plsql_object_id,sm.plsql_subprogram_id,sm.module,sm.action,sm.program
order by sql_exec_start;



set pages 500 lines 300
col opname for a10
col kill                for a15
select ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,s.username, rj.job_name, rj.running_instance
-- , s.sid, s.serial#
, p.spid, s.lockwait, s.logon_time
from dba_scheduler_running_jobs rj,
     gv$session s,
     gv$process p
where rj.running_instance = s.inst_id
and   rj.session_id = s.sid
and   s.inst_id = p.inst_id
and   s.paddr = p.addr
-- and   p.spid = <spid>
order by s.username, rj.job_name;




SET LINES 400 PAGES 1000

CLEAR COLUMNS
CLEAR BREAKS

COMPUTE SUM LABEL 'Total in Execution' OF COUNT ON REPORT
BREAK ON REPORT

COL sql_text FOR a50

COL sql_id FOR A20
COL count  FOR 999,999
col kill for a18
col EVENT for a30
SELECT ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||''''  kill,s.con_id,s.sql_id,event
  ,COUNT(*) count
  ,substr(sqla.sql_text,1,50) sql_text
FROM gv$session s, gv$sqlarea sqla
WHERE s.state = 'WAITING'
AND s.sql_id IS NOT NULL
AND sqla.sql_id=s.sql_id
AND sqla.inst_id=s.inst_id
GROUP BY ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' ,s.con_id ,s.sql_id,event, sqla.sql_text
ORDER BY 2
;



set lines 300 pagesize 300
col inst_sid_ser for a13
col username for a23
col serv_mod_action for a48
col tr for a2
col event for a32
col sql_id for a13
col sql_dT for 999999
col call_dT for 9999999
col W_dT for 9999
col obj# for 99999999
col kill for a17

select 	''''||sid ||','|| serial#||',@'||inst_id ||'''' kill  ,
	username||case when regexp_substr(program,' \(...') <> ' (TNS' then regexp_substr(program,' \(.+') end username,
	sql_id sql_id, 
	round((sysdate-sql_exec_start)*24*3600,1) sql_dT,
        last_call_et call_dT,
	case state when 'WAITING' then round(wait_time_micro/1000000,2) else round(time_since_last_wait_micro/1000000,2) end W_dT,
        decode(state,'WAITING',event,'CPU') event, 
	service_name||' '||substr(module,1,20)||' '||ACTION serv_mod_action,  
          nullif(row_wait_obj#,-1) obj#,decode(taddr,null,null,'NN') tr
from gv$session
where ((state='WAITING' and wait_class<>'Idle') or (state<>'WAITING' and status='ACTIVE'))
      --and audsid != to_number(sys_context('USERENV','SESSIONID')) -- this is clean but does not work on ADG so replaced by following line
      and (machine,port) <> (select machine,port from v$session where sid=sys_context('USERENV','SID')) --workaround for ADG
order by inst_id,sql_id
/


====


define start_date='23-06-23 08:44:00'
define end_date='23-06-23 09:44:00'


SET LINESIZE 200 PAGESIZE 50000
COL BEGIN_TIME FORMAT A17
COL END_TIME FORMAT A17
COL INST_ID FORMAT 999
COL "Response Time (msecs)" FORMAT 999,999,999,999.99

  SELECT TO_CHAR (BEGIN_TIME, 'DD-MM-YY HH24:MI') BEGIN_TIME,
         TO_CHAR (END_TIME, 'DD-MM-YY HH24:MI') END_TIME,
         INST_ID,
         ROUND (VALUE * 10, 2) "Response Time (msecs)"
    FROM GV$SYSMETRIC
   WHERE     1 = 1
         AND METRIC_NAME = 'SQL Service Response Time'
ORDER BY INST_ID;


SET LINESIZE 200 PAGESIZE 50000
COL BEGIN_TIME FORMAT A17
COL END_TIME FORMAT A17
COL INST_ID FORMAT 999
COL "Response Time (msecs)" FORMAT 999,999,999,999.99

  SELECT TO_CHAR (BEGIN_TIME, 'DD-MM-YY HH24:MI') BEGIN_TIME,
         TO_CHAR (END_TIME, 'DD-MM-YY HH24:MI') END_TIME,
         INST_ID,
         ROUND (VALUE * 10, 2) "Response Time (msecs)"
    FROM GV$SYSMETRIC
   WHERE     1 = 1
         AND METRIC_NAME = 'SQL Service Response Time'
ORDER BY INST_ID;


SET LINESIZE 200 PAGESIZE 50000
COL BEGIN_TIME FORMAT A17
COL END_TIME FORMAT A17
COL INST_ID FORMAT 999
COL "Min Response Time (msecs)" FORMAT 999,999,999,999.99
COL "Avg Response Time (msecs)" FORMAT 999,999,999,999.99
COL "Max Response Time (msecs)" FORMAT 999,999,999,999.99

  SELECT TO_CHAR (BEGIN_TIME, 'DD-MM-YY HH24:MI') BEGIN_TIME,
         TO_CHAR (END_TIME, 'DD-MM-YY HH24:MI') END_TIME,
         INST_ID,
         ROUND (MINVAL * 10, 2) "Min Response Time (msecs)",
         ROUND (AVERAGE * 10, 2) "Avg Response Time (msecs)",
         ROUND (MAXVAL * 10, 2) "Max Response Time (msecs)"
    FROM GV$SYSMETRIC_SUMMARY
   WHERE     1 = 1
         AND METRIC_NAME = 'SQL Service Response Time'
ORDER BY INST_ID;


SET LINESIZE 200
SET PAGESIZE 200

COLUMN metric_name FORMAT a25
COLUMN snap_date   FORMAT a12
COLUMN aas         FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

WITH aas_per_hour AS (
SELECT TO_CHAR(end_time, 'dd-mm-yy') snap_date
     , metric_name
     , average
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   end_time >= SYSDATE - 30
)
SELECT snap_date                                    -- the group column
     , metric_name                                  -- the series column
     , ROUND(SUM(average)/COUNT(snap_date), 2) aas  -- the value column
FROM aas_per_hour
GROUP BY snap_date
       , metric_name
ORDER BY snap_date
;

-- Average Active Sessions in Last 31 Days (interval by each hour).

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name    FORMAT a25
COLUMN snap_date_time FORMAT a20
COLUMN aas            FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

SELECT TO_CHAR(end_time, 'dd-mm-yy hh24:mi:ss') snap_date_time  -- the group column
     , metric_name                                                -- the series column
     , ROUND(average, 2) aas                                      -- the value column
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   end_time >= SYSDATE - 30
ORDER BY snap_date_time
;

-- Average Active Sessions in Last 7 Days (interval by each day).

SET LINESIZE 200
SET PAGESIZE 200

COLUMN metric_name FORMAT a25
COLUMN snap_date   FORMAT a12
COLUMN aas         FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

WITH aas_per_hour AS (
SELECT TO_CHAR(end_time, 'dd-mm-yy') snap_date
     , metric_name
     , average
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   end_time >= SYSDATE - 6
)
SELECT snap_date                                    -- the group column
     , metric_name                                  -- the series column
     , ROUND(SUM(average)/COUNT(snap_date), 2) aas  -- the value column
FROM aas_per_hour
GROUP BY snap_date
       , metric_name
ORDER BY snap_date
;

-- Average Active Sessions in Last 7 Days (interval by each hour).

SET LINESIZE 200 PAGESIZE 200

COLUMN metric_name    FORMAT a25
COLUMN snap_date_time FORMAT a20
COLUMN aas            FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

SELECT TO_CHAR(end_time, 'dd-mm-yy hh24:mi:ss') snap_date_time  -- the group column
     , metric_name                                                -- the series column
     , ROUND(average, 2) aas                                      -- the value column
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   end_time >= SYSDATE - 6
ORDER BY snap_date_time
;

-- Average Active Sessions in Last 24 Hours.

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name    FORMAT a25
COLUMN snap_date_time FORMAT a20
COLUMN aas            FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

SELECT TO_CHAR(end_time, 'dd-mm-yy hh24:mi:ss') snap_date_time  -- the group column
     , metric_name                                                -- the series column
     , ROUND(average, 2) aas                                      -- the value column
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   end_time >= SYSDATE - 1
ORDER BY snap_date_time
;

-- Average Active Sessions in Real Time.

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name    FORMAT a25
COLUMN snap_date_time FORMAT a20
COLUMN aas            FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

SELECT TO_CHAR(end_time, 'dd-mm-yyyy hh24:mi:ss') snap_date_time  -- the group column
     , metric_name                                                -- the series column
     , ROUND(value, 2) aas                                        -- the value column
FROM v$sysmetric_history
WHERE metric_name = 'Average Active Sessions'
AND   group_id = 2                                                -- just retrieve the name with "System Metrics Long Duration" in v$metricgroup
ORDER BY snap_date_time
;

-- Average Active Sessions Custom Time Period (interval by each hour).

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name    FORMAT a25
COLUMN snap_date_time FORMAT a20
COLUMN aas            FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yyyy hh24:mi:ss';

SELECT TO_CHAR(end_time, 'dd-mm-yyyy hh24:mi:ss') snap_date_time  -- the group column
     , metric_name                                                -- the series column
     , ROUND(average, 2) aas                                      -- the value column
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   (end_time BETWEEN TO_DATE('&start_date', 'dd-mm-yy hh24:mi:ss')
                AND     TO_DATE('&end_date', 'dd-mm-yy hh24:mi:ss')
      )
ORDER BY snap_date_time
;

-- Average Active Sessions Custom Time Period (interval by each day).

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name FORMAT a25
COLUMN snap_date   FORMAT a12
COLUMN aas         FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

WITH aas_per_hour AS (
SELECT TO_CHAR(end_time, 'dd-mm-yy') snap_date
     , metric_name
     , average
FROM dba_hist_sysmetric_summary
WHERE metric_name = 'Average Active Sessions'
AND   (end_time BETWEEN TO_DATE('&start_date', 'dd-mm-yy hh24:mi:ss')
                AND     TO_DATE('&end_date', 'dd-mm-yy hh24:mi:ss')
      )
)
SELECT snap_date                                    -- the group column
     , metric_name                                  -- the series column
     , ROUND(SUM(average)/COUNT(snap_date), 2) aas  -- the value column
FROM aas_per_hour
GROUP BY snap_date
       , metric_name
ORDER BY snap_date
;

-- The original code.

SET LINESIZE 200 PAGESIZE 400

COLUMN metric_name FORMAT a25
COLUMN metric_unit FORMAT a25
COLUMN awr_aas     FORMAT 999,999.99

ALTER SESSION SET nls_date_format = 'dd-mm-yy hh24:mi:ss';

SELECT *
FROM (
       SELECT instance_number
            , LAG(snap_id, 1, 0) OVER(PARTITION BY dbid, instance_number ORDER BY snap_id) first_snap_id
            , snap_id second_snap_id
            , begin_time
            , end_time
            , metric_name
            , metric_unit
            , ROUND(average/1e2, 2) awr_aas -- metric_unit is "CentiSeconds Per Second" so average should divide by 1e2.
       FROM dba_hist_sysmetric_summary
    -- WHERE metric_name = 'DB Time Per Second' -- not "DB Time Per Second", should the following metric_name "Database Time Per Sec".
       WHERE metric_name = 'Database Time Per Sec'
       ORDER BY instance_number
              , first_snap_id
     )
WHERE first_snap_id <> 0
;

or

SELECT *
FROM (
       SELECT instance_number
            , LAG(snap_id, 1, 0) OVER(PARTITION BY dbid, instance_number ORDER BY snap_id) first_snap_id
            , snap_id second_snap_id
            , begin_time
            , end_time
            , metric_name
            , metric_unit
            , ROUND(average, 2) awr_aas
       FROM dba_hist_sysmetric_summary
       WHERE metric_name = 'Average Active Sessions'
       ORDER BY instance_number
              , first_snap_id
     )
WHERE first_snap_id <> 0
;


=====


spool kill.log
set head off
select 'kill -9 '|| p.spid ||'' PROCESS_ID_NEED_KILL  from v$session s, v$process p where s.paddr = p.addr and s.sql_id is null and s.event = 'latch: shared pool';
spool off
exit
begin
    for i in (select * from gv$session where  1=1
	-- and status='INACTIVE' 
	-- and (sysdate-PREV_EXEC_START)>1
	--and type != 'BACKGROUND'
	and  type = 'USER'
	)
    LOOP
        EXECUTE IMMEDIATE(q'{ALTER SYSTEM KILL SESSION '}'||i.sid||q'[,]'  ||i.serial#||q'[,@]'||i.inst_id||q'[']'||' IMMEDIATE');  
    	
		END LOOP;
		end;
		
		
		
		
		
		
		
set pagesize 0
select 'alter system kill session '''||sid||','||session_serial#||',@'||inst_id||''' immediate ;' as script from gv$sql_monitor  
where 1=1 and  status='EXECUTING' 
and module not like '%emagent%'
;

	
col "Kill" for a130
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||'''  /* '||action||' started on '||logon_time||' SQL ID '||sql_id ||'*/  ;' "Kill" 
from gv$session where module='DBMS_SCHEDULER' 
--and action like 'ORA$AT^_OS^_MANUAL^_%' escape '^'
;



set pagesize 0
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' as script from gv$session where 1=1 and  type = 'USER'
;

set pagesize 100



select count(*) from gv$session where MODULE ='DBMS_SCHEDULER'

set pagesize 0
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' as script  from gv$session where MODULE ='DBMS_SCHEDULER'
;

set pagesize 100


col kill for a70
--spool kill.sql
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill
--,TOTALWORK, USERNAME,SQL_ID,con_id 
from Gv$session_longops
where 1=1
and sofar < totalwork
;


set linesize 300
COLUMN command           HEADING "Disconnect Command"   FORMAT a90
COLUMN command2          HEADING "Kill Command"         FORMAT a60

BEGIN
  FOR i IN (select 'alter system disconnect session '''  || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; '
  ||'--'||s.con_id||'..'||s.username --- comment this line if required 
  Command 
            , 'alter system kill session '''  || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; '       Command2
            from  gv$session s
                , gv$process p
            where s.inst_id = p.inst_id (+)
              AND   s.PADDR = p.ADDR (+)
			  and s.username not in ('SYS')
        
		  )
  LOOP
     DBMS_OUTPUT.PUT_LINE(   i.command || chr(10) || i.command2 );
  END LOOP;  
END;
/
output
alter system kill session '3343,8581,@1' immediate ;
alter system disconnect session '3410,55128,@1' immediate ; --5..ANUJ







*********************************************************


https://github.com/jkstill/oracle-script-lib/blob/master/sql/whog.sql


define v_10gopts = ''
var v_10gopts varchar2(10)

define v_12copts = ''
var v_12copts varchar2(10)

declare
	i_oversion integer := '&&v_oversion_major';
begin
	if i_oversion <10 then
		:v_10gopts := '--';
	else
		:v_10gopts := '';
	end if;

	if i_oversion <12 then
		:v_12copts := '--';
	else
		:v_12copts := '';
	end if;

end;
/



set  term off feed off
col v_10gopts noprint new_value v_10gopts
col v_12copts noprint new_value v_12copts
select :v_10gopts v_10gopts from dual;
select :v_12copts v_12copts from dual;
set term on feed on


col username heading 'USERNAME' format a25
col inst_id head 'INST' format 9999
col pdb head 'PDB' format a15
col sid heading 'SID' format 99999
col machine format a45 head 'MACHINE'
col osuser format a25

set recsep off term on pause off verify off echo off
set line 220  pagesize 100  trimspool on

clear break
break on username skip 1


with pdbs as (
	&&v_12copts select inst_id, con_id, name
	&&v_12copts from gv$pdbs
	&&v_12copts union all
	select rownum inst_id, 0 con_id, 'CDB' name
	from gv$instance
	union all
	select rownum inst_id, 1 con_id, 'ROOT' name
	from gv$instance
)
select distinct
	s.username,
	s.inst_id,
	&&v_12copts pdb.name pdb,
	s.machine,
	s.osuser,
	count(s.username) over 
	(
		partition by 
		s.username
		, s.inst_id
		&&v_12copts, pdb.name 
		, s.machine
		, s.osuser
	) user_count
from gv$session s
-- use outer join to show sniped sessions in
-- v$session that don't have an OS process
-- uncomment to see only your own session
left outer join gv$process p on s.inst_id = p.inst_id
	and p.addr = s.paddr
&&v_12copts join pdbs  pdb
	&&v_12copts on pdb.inst_id = s.inst_id
	&&v_12copts and pdb.con_id = s.con_id
where s.username is not null
	--and userenv('SESSIONID') = s.audsid
order by username--, sid
/


====





col username for a20 
SELECT COUNT(*),
      con_id,
       username,
       sql_id,
       type,
       server,
       status,
       state
  FROM gv$session
  where 1=1
-- and status='INACTIVE'
 GROUP BY 
       con_id,
       username,
       sql_id,
       type,
       server,
       status,
       state
 ORDER BY
       1 DESC, 2, 3, 4, 5, 6, 7;





set echo off  linesize 132 verify off feedback off serveroutput on
declare
 SID number := 0 ;
 SERIAL number := 0 ;
 username varchar(20) := '';
 Status varchar(8) := '';
 machine varchar(10) := '';
 terminal varchar(25) := '';
 program varchar(30) := '';
 Module varchar(30) := '';
 Action varchar(20) := '';
 sql_hash_value number := 0 ;
 logontime varchar(30) := '';
 last_call_et number := 0 ;
 proc number := 0 ;
 spid number := 0 ;
 event varchar(30) := '';
 state varchar(30) := '';
 sql_text varchar(1000) := '';
 
cursor cur1 is
select
 a.sid sid,
 a.serial# serial,
 a.inst_id,
 a.username username,
 a.status status ,
 a.machine machine,
 a.terminal terminal,
 a.program program,
 a.module module,
 a.action action,
 a.sql_hash_value sql_hash_value,
 to_char(a.logon_time,'DD-Mon-YYYY HH:MI:SS') logontime,
 a.last_call_et last_call_et,
 a.process proc,
 b.spid spid,
 sw.event event,
 sw.state state,
 a.sql_id
 from gv$session a, gv$process b, gv$session_wait sw
 where a.paddr=b.addr
 and a.inst_id=b.inst_id
 --and a.sid ='&sid'
 and a.inst_id=sw.inst_id
 and a.sid=sw.sid
 and a.status='ACTIVE'
 ;
begin

DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' Database session detail for the shadow process ');

DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------');

 for m in cur1 loop
 DBMS_OUTPUT.ENABLE(50000);
 DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('kill............ 			: ' || ''''||m.sid ||','|| m.serial||',@'||m.inst_id ||'''' );
 --DBMS_OUTPUT.PUT_LINE('SERIAL#........ 		: ' || m.serial);
 DBMS_OUTPUT.PUT_LINE('USERNAME....... 			: ' || m.username);
 DBMS_OUTPUT.PUT_LINE('STATUS......... 			: ' || m.status);
 DBMS_OUTPUT.PUT_LINE('Machine........ 			: ' || m.machine);
 DBMS_OUTPUT.PUT_LINE('Terminal....... 			: ' || m.terminal);
 DBMS_OUTPUT.PUT_LINE('Program........ 			: ' || m.program);
 DBMS_OUTPUT.PUT_LINE('Module......... 			: ' || m.module);
 DBMS_OUTPUT.PUT_LINE('Action......... 			: ' || m.action);
 DBMS_OUTPUT.PUT_LINE('SQL Hash Value. 			: ' || m.sql_hash_value);
 DBMS_OUTPUT.PUT_LINE('Logon Time..... 			: ' || m.logontime);
 DBMS_OUTPUT.PUT_LINE('Last Call Et... 			: ' || m.last_call_et);
 DBMS_OUTPUT.PUT_LINE('sql id... 				: ' || m.sql_id);
 DBMS_OUTPUT.PUT_LINE('Process ID..... 			: ' || m.proc);
 DBMS_OUTPUT.PUT_LINE('SPID........... 			: ' || m.spid);
 DBMS_OUTPUT.PUT_LINE('Session Waiting for event:'||m.event);
 DBMS_OUTPUT.PUT_LINE('Session state ...........:'||m.state);
 for rec in ( select /*+parallel(4) */ distinct(sql_text) sql_text from gv$session s,gv$sql v 
 where s.sql_hash_value=v.hash_value and s.sql_address=v.address 
 and s.sid=m.sid
 and s.inst_id=m.inst_id
 )
 loop
 dbms_output.put_line(substr('SQL_TEXT is..........:'||rec.sql_text,1,255));
 end loop;

DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------');
 DBMS_OUTPUT.PUT_LINE(' ');
 end loop;
end;
/


=========================


set echo off
set linesize 132
set verify off
set feedback off
set serveroutput on;
declare
inst_id number := 0 ;
SID number := 0 ;
SERIAL number := 0 ;
username varchar(20) := '';
Status varchar(8) := '';
machine varchar(10) := '';
terminal varchar(25) := '';
program varchar(30) := '';
Module varchar(30) := '';
Action varchar(20) := '';
sql_hash_value number := 0 ;
logontime varchar(30) := '';
last_call_et number := 0 ;
proc number := 0 ;
spid number := 0 ;
event varchar(30) := '';
state varchar(30) := '';
sql_texts varchar(1000) := '';
undo_size varchar (100) := 'N/A';
cursor cur1 is
select a.inst_id, a.sid sid,
a.serial# serial,
a.username username,
a.status status ,
a.machine machine,
a.terminal terminal,
a.program program,
a.module module,
a.action action,
a.sql_hash_value sql_hash_value,
to_char(a.logon_time,'DD-Mon-YYYY HH24:MI:SS') logontime,
round((a.last_call_et/60),2) last_call_et,
a.process proc,
b.spid spid,
a.event event,
a.state state
from gv$session a, gv$process b, gv$session_wait sw
where a.paddr=b.addr and a.inst_id=b.inst_id
--and b.spid in ( '&spid')
and a.inst_id=sw.inst_id
and a.sid=sw.sid;
begin
for m in cur1
loop
DBMS_OUTPUT.ENABLE(25000);
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('INSTANCE ID....................... : ' || m.inst_id );
DBMS_OUTPUT.PUT_LINE('SID............................... : ' || m.sid );
DBMS_OUTPUT.PUT_LINE('SERIAL#........................... : ' || m.serial );
DBMS_OUTPUT.PUT_LINE('USERNAME.......................... : ' || m.username );
DBMS_OUTPUT.PUT_LINE('STATUS............................ : ' || m.status );
DBMS_OUTPUT.PUT_LINE('Client Machine.....................: ' || m.machine );
DBMS_OUTPUT.PUT_LINE('Terminal.......................... : ' || m.terminal);
DBMS_OUTPUT.PUT_LINE('Program........................... : ' || m.program );
DBMS_OUTPUT.PUT_LINE('Module............................ : ' || m.module );
DBMS_OUTPUT.PUT_LINE('Action............................ : ' || m.action );
DBMS_OUTPUT.PUT_LINE('SQL Hash Value.................... : ' || m.sql_hash_value );
DBMS_OUTPUT.PUT_LINE('Logon Time........................ : ' || m.logontime );
DBMS_OUTPUT.PUT_LINE('Last Call Et...................... : ' || m.last_call_et||''||'min' );
DBMS_OUTPUT.PUT_LINE('ClientPID......................... : ' || m.proc );
DBMS_OUTPUT.PUT_LINE('ServerPID......................... : ' || m.spid );
DBMS_OUTPUT.PUT_LINE('Session Waiting for Event..........: ' ||m.event );
DBMS_OUTPUT.PUT_LINE('Session state .....................: ' ||m.state);
for rec_undo in (select nvl(t.used_ublk,0)||' '||'Blocks' undo_size from gv$session s,gv$transaction t 
where
s.taddr=t.addr(+) and
s.sid=m.sid 
and s.inst_id=m.inst_id
)
loop
dbms_output.put_line('Undo Generation for sid is.........: ' ||rec_undo.undo_size);
end loop;
dbms_output.put_line('SQL_TEXT is..........:');
for rec in ( select   /* +parallel(4) */ sql_text sql_texts from gv$session s,gv$sqltext v where
s.sql_hash_value=v.hash_value and
s.inst_id=v.inst_id and
s.sql_address=v.address and s.sid=m.sid order by piece)
loop
dbms_output.put_line(' '||rec.sql_texts);
end loop;
for n in ( select /* +parallel(4) */  t.DISK_READS DISK_READS from gv$session s, gv$sqlarea t
where s.sql_hash_value =t.hash_value and s.sid=m.sid  and s.inst_id=t.inst_id)
loop
dbms_output.put_line('Disk reads due to above SQL execution ' || n.DISK_READS);
end loop;
DBMS_OUTPUT.PUT_LINE(' ' );
DBMS_OUTPUT.PUT_LINE(':------------------------------------------------: ' );
DBMS_OUTPUT.PUT_LINE(' ' );
end loop;
end;









===

ps -eo pid,vsz,rss,state,args --sort=vsz,rss| grep -i local=no |awk 'BEGIN{sum=0}{sum+=$3}END{print sum/1024/1024}'   <<<<< Huge memory consumption


ps -eo pid,vsz,rss,state,args --sort=vsz,rss| grep -i local=no |wc -l    ---session count 

select count(*)
from v$session s, v$process p
where s.paddr = p.addr
and s.username not in ('SYS','SYSTEM');

select p.spid, p.PGA_ALLOC_MEM, p.PGA_USED_MEM, s.username, s.program, s.sql_id
from v$session s, v$process p
where s.paddr = p.addr
and s.username not in ('SYS','SYSTEM')
and p.spid in();

pmap -x 1346

pmap -x 1346 | grep anon | awk 'BEGIN{sum=0}{sum+=$3}END{print sum}'


===






----  Protocol for all Oracle connections.  


col NETWORK_SERVICE_BANNER for a90
select
distinct   NETWORK_SERVICE_BANNER
from
   gv$session_connect_info
;



alter session set nls_date_format='dd-mm-yyyy hh24:mi';
set linesize 400 pagesize 400
col kill for a17 
col machine for a38
col event for a28
select ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill,machine
,logon_time
--,program
,event
,sql_id
,prev_sql_id,
case when program not like 'ora___@% (P%)' then
(select max(case
when NETWORK_SERVICE_BANNER like '%TCP/IP%'       	then 'TCP'
when NETWORK_SERVICE_BANNER like '%Bequeath%'       then 'BEQUEATH'
when NETWORK_SERVICE_BANNER like '%IPC%'     		then 'IPC'
when NETWORK_SERVICE_BANNER like '%SDP%'     		then 'SDP'
when NETWORK_SERVICE_BANNER like '%NAMED P%'     	then 'Named pipe'
when NETWORK_SERVICE_BANNER is null
      then 'TCPS' end)
	  from    gv$session_connect_info i
where 1=1
 and  i.sid=s.sid and i.inst_id = s.inst_id) end protocol
from
   gv$session s
   where 1=1 
   AND type != 'BACKGROUND'
  -- and  program not like '%ora%'
   order by logon_time desc 
   ;







set serveroutput on size 100000
DECLARE
  v_sid number;
  s gv$session%ROWTYPE;
  p gv$process%ROWTYPE;
BEGIN
  for i in (select inst_id,sid,osuser,username,to_char(s.last_call_et/60/60, '9990.0')  from gv$session s 
  where 1=1
  and status='ACTIVE' 
 -- and username is not null
 and username ='XXXX'
 and sql_id='1mavr84vthn3s'
  )
loop
  select * into s from gv$session where sid  = i.sid and inst_id= i.inst_id;
  select * into p from gv$process where addr = s.paddr and inst_id= s.inst_id;
  dbms_output.put_line('=====================================================================');
  dbms_output.put_line('SID/Serial  		: alter system kill session '  || ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||''' immediate; ' );
 -- dbms_output.put_line('SID/Serial  		: '|| ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' );
  dbms_output.put_line('Foreground  		: '|| 'PID: '||s.process||' - '||s.program);
  dbms_output.put_line('Shadow      		: '|| 'PID: '||p.spid||' - '||p.program);
  dbms_output.put_line('Terminal    		: '|| s.terminal || '/ ' || p.terminal);
  dbms_output.put_line('OS User     		: '|| s.osuser||' on '||s.machine);
  dbms_output.put_line('Ora User    		: '|| s.username);
  dbms_output.put_line('Sql Id/PREV_SQL_ID  : '|| nvl(s.sql_id,s.PREV_SQL_ID) );
  dbms_output.put_line('Status Flags		: '|| s.status||' '||s.server||' '||s.type);
  dbms_output.put_line('Tran Active 		: '|| nvl(s.taddr, 'NONE'));
  dbms_output.put_line('Login Time  		: '|| to_char(s.logon_time, 'Dy HH24:MI:SS'));
  dbms_output.put_line('Last Call   		: '|| to_char(sysdate-(s.last_call_et/60/60/24), 'Dy HH24:MI:SS') || ' - ' || to_char(s.last_call_et/60, '999990.0') || ' min');
  dbms_output.put_line('Lock/ Latch 		: '|| nvl(s.lockwait, 'NONE')||'/ '||nvl(p.latchwait, 'NONE'));
  dbms_output.put_line('Latch Spin  		: '|| nvl(p.latchspin, 'NONE'));
  dbms_output.put_line('Current SQL statement:');
  for c1 in ( select * from gv$sqltext
              where HASH_VALUE = s.sql_hash_value and inst_id= s.inst_id order by piece) loop
    dbms_output.put_line(chr(9)||c1.sql_text);
  end loop;
  dbms_output.put_line('Previous SQL statement:');
  for c1 in ( select * from gv$sqltext
              where HASH_VALUE = s.prev_hash_value and inst_id=s.inst_id order by piece) loop
    dbms_output.put_line(chr(9)||c1.sql_text);
  end loop;
  dbms_output.put_line('Session Waits:');
  for c1 in ( select * from gv$session_wait where sid = s.sid and inst_id=s.inst_id) loop
    dbms_output.put_line(chr(9)||c1.state||': '||c1.event);
  end loop;
  dbms_output.put_line('Connect Info:');
  for c1 in ( select * from gv$session_connect_info where sid = s.sid and inst_id= s.inst_id) loop
    dbms_output.put_line(chr(9)||': '||c1.network_service_banner);
  end loop;
  end loop;
  dbms_output.put_line('=====================================================================');
END;
/




>=12c 

set serveroutput on
set echo off feed off veri off
exec dbms_output.enable(20000)



 
 define sid=251
 define IID=1

DECLARE
        v_sid number;
        v_inst number;

        s sys.gv$session%ROWTYPE;
        p sys.gv$process%ROWTYPE;

BEGIN
  begin
    select sid, inst_id into v_sid , v_inst
        from   sys.gv$session s
        where 1=1
		and sid   = &&SID
          and   inst_id = &&IID
		  ;
  exception
     when no_data_found then
           dbms_output.put_line('Unable to find SID &&SID!!!');
           return;
         when others then
       dbms_output.put_line(sqlerrm);
           return;
   end;

   select * into s from sys.gv$session where sid = v_sid and inst_id = v_inst;
   select * into p from sys.gv$process where addr = s.paddr and inst_id = v_inst;

   dbms_output.put_line('================================================================');
  -- dbms_output.put_line('Instance no : '|| s.inst_id);
   --dbms_output.put_line('SID/Serial  : '|| s.sid||','||s.serial#);
   dbms_output.put_line('Kill- SID/Serial/inst  : '|| ''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''');
   dbms_output.put_line('con_id  : '||s.con_id);
   dbms_output.put_line('Foreground  : '|| 'PID: '||s.process||' - '||s.program);
   dbms_output.put_line('Shadow      : '|| 'PID: '||p.spid||' - '||p.program);
   dbms_output.put_line('Terminal    : '|| s.terminal || '/ ' || p.terminal);
   dbms_output.put_line('OS User     : '|| s.osuser||' on '||s.machine);
   dbms_output.put_line('Ora User    : '|| s.username);
   dbms_output.put_line('SQL_ID      : '|| s.sql_id);
   dbms_output.put_line('p1      : '|| s.p1);
   dbms_output.put_line('p2      : '|| s.p2);
   dbms_output.put_line('p3      : '|| s.p3);
   dbms_output.put_line('Status Flags: '|| s.status||' '||s.server||' '||s.type);
   dbms_output.put_line('Tran Active : '|| nvl(s.taddr, 'NONE'));
   dbms_output.put_line('Login Time  : '|| To_Char(s.logon_time, 'Dy HH24:MI:SS'));
   dbms_output.put_line('Last Call   : '|| To_Char(sysdate-(s.last_call_et/60/60/24), 'Dy HH24:MI:SS') || ' - ' || To_Char(s.last_call_et/60, '9999999999.0') || ' min');
   dbms_output.put_line('Lock / Latch: '|| nvl(s.lockwait, 'NONE')||'/ '||nvl(p.latchwait, 'NONE'));
   dbms_output.put_line('Latch Spin  : '|| nvl(p.latchspin, 'NONE'));

   dbms_output.put_line('Current SQL Statement:');
   for c1 in ( select * from sys.gv$sqltext
               where HASH_VALUE = s.sql_hash_value and INST_ID=s.inst_id order by piece) loop
           dbms_output.put_line(chr(9)||c1.sql_text);
         end loop;

   dbms_output.put_line('Previous SQL Statement:');
   for c1 in ( select * from sys.gv$sqltext
               where HASH_VALUE = s.prev_hash_value and INST_ID=s.inst_id order by piece) loop
           dbms_output.put_line(chr(9)||c1.sql_text);
         end loop;

   dbms_output.put_line('Session Waits:');
   for c1 in ( select * from sys.gv$session_wait where sid = s.sid and INST_ID=s.inst_id) loop
       dbms_output.put_line(chr(9)||c1.state||': '||c1.event);
     end loop;

   dbms_output.put_line('Connect Info:');
   for c1 in ( select * from sys.gv$session_connect_info where sid = s.sid and INST_ID=s.inst_id) loop
       dbms_output.put_line(chr(9)||': '||c1.network_service_banner);
     end loop;

   dbms_output.put_line('Locks:');
   for c1 in ( select
           decode(l.type,
                   -- Long locks
                               'TM', 'DML/DATA ENQ', 'TX', 'TRANSAC ENQ',
                                           'UL', 'PLS USR LOCK',
               -- Short locks
                               'BL', 'BUF HASH TBL', 'CF', 'CONTROL FILE',
                                           'CI', 'CROSS INST F', 'DF', 'DATA FILE   ',
                                           'CU', 'CURSOR BIND ',
                                           'DL', 'DIRECT LOAD ', 'DM', 'MOUNT/STARTUP',
                                           'DR', 'RECO LOCK   ', 'DX', 'DISTRIB TRAN ',
                                           'FS', 'FILE SET    ', 'IN', ' INSTANCE NUM',
                                           'FI', 'SGA OPN FILE',
                                           'IR', 'INSTCE RECVR', 'IS', 'GET STATE    ',
                                           'IV', 'LIBCACHE INV', 'KK', ' LOG SW KICK ',
                                           'LS', 'LOG SWITCH  ',
                                           'MM', 'MOUNT DEF   ', 'MR', 'MEDIA RECVRY ',
                                           'PF', 'PWFILE ENQ  ', 'PR', 'PROCESS STRT ',
                                           'RT', 'REDO THREAD ', 'SC', 'SCN ENQ      ',
                                           'RW', 'ROW WAIT    ',
                                           'SM', 'SMON LOCK   ', 'SN', 'SEQNO INSTCE ',
                                           'SQ', 'SEQNO ENQ   ', 'ST', 'SPACE TRANSC ',
                                           'SV', 'SEQNO VALUE ', 'TA', 'GENERIC ENQ  ',
                                           'TD', 'DLL ENQ     ', 'TE', 'EXTEND SEG   ',
                                           'TS','TEMP SEGMENT ', 'TT', ' TEMP SPACE  ',
                                           'UN', 'USER NAME   ', 'WL', 'WRITE REDO   ',
                                           'TYPE='||l.type) type,
                    decode(l.lmode, 0, 'NONE', 1, 'NULL', 2, 'RS', 3, 'RX',
                                        4, 'S', 5, 'RSX', 6, 'X',
                                                        To_Char(l.lmode) ) lmode,
            decode(l.request, 0, 'NONE', 1, 'NULL', 2, 'RS', 3, 'RX',
                                        4, 'S', 5, 'RSX', 6, 'X',
                            To_Char(l.request) ) lrequest,
            decode(l.type, 'MR', o.object_name,
                           'TD', o.object_name,
                           'TM', o.object_name,
                           'RW', 'FILE#='||substr(l.id1,1,3)||
                                 ' BLOCK#='||substr(l.id1,4,5)||' ROW='||l.id2,
                            'TX', 'RS+SLOT#'||l.id1||' WRP#'||l.id2,
                            'WL', 'REDO LOG FILE#='||l.id1,
                            'RT', 'THREAD='||l.id1,
                            'TS',  decode(l.id2, 0, 'ENQUEUE', 'NEW BLOCK ALLOCATION'),
                            'ID1='||l.id1||' ID2='||l.id2) objname
          from sys.gv$lock l, dba_objects o
          where sid = s.sid
          and l.INST_ID=s.inst_id
          and l.id1 = o.object_id ) loop
       dbms_output.put_line(chr(9)||c1.type||' H: '||c1.lmode||' R: '||c1.lrequest||' - '||c1.objname);
      end loop;

    dbms_output.put_line('=================================================================================');

END;
/

undef SID
set feedback on
set feed on



====================


set linesize 500
col Machine  for a20
col Module   for a20                                                        
col Action for a20

col kill for a17
col Command for a10
col CLIENT_INFO     for a10                                                 
col CLIENT_IDENTIFIER for a10
 with vs as (select rownum rnum, 
  ''''||sid ||','|| serial#||',@'||inst_id ||'''' kill,
-- inst_id,
  --   sid,
    --   serial#,
  status,
  username,
  last_call_et,
  command,
  machine,
  osuser,
  module,
  action,
  resource_consumer_group,
  client_info,
  client_identifier,
  type,
  terminal,
  sql_id,
  sql_child_number,
  event,
 p1,p2,p3
from gv$session) 
 select --vs.inst_id, vs.sid ,serial# serial,
 kill ,
 vs.sql_id, vs.sql_child_number,
        vs.username "Username",
        case when vs.status = 'ACTIVE' 
                  then last_call_et 
             else null end "Seconds in Wait",
        (select command_name from v$sqlcommand where command_type = vs.command ) "Command",
        vs.machine "Machine",
        vs.osuser "OS User", 
        lower(vs.status) "Status",
        vs.module "Module",
        vs.action "Action",
        vs.resource_consumer_group,
        vs.client_info,
        vs.client_identifier,
		event,
		 p1,p2,p3
   from vs 
  where vs.USERNAME is not null
    --and nvl(vs.osuser,'x') <> 'SYSTEM'
	 and vs.USERNAME  not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' )
    and vs.type <> 'BACKGROUND'
	and vs.status!='INACTIVE'
    order by 1,2,3 
	
	;
	
	


====






col spoolname new_value spoolname

select 'session_rpt_'||to_char(sysdate,'dd-mm-yyyy') spoolname from dual;

--spool 'spoolname'

prom list of sessions
Set lines 300 pages 1000
col current_time for a50
select 'Anuj' author,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_time,instance_name,version,status,instance_role from v$instance
/


select * from gv$resource_limit where RESOURCE_NAME in('processes','sessions');

col sid 			form 99999
col serial# 		form 99999
col spid 			form a6
col program heading 'program' for a25 trunc
col username 		form a15
col osuser 			form a10
col idle 			form a30 heading "Idle"
col terminal 		form a12
col logon_time 		form a18
col machine 		for a15 trunc
col rn 				for 9999
col service_name 	for a30

break on report
compute sum of cnt on report
select username,status,count(*) cnt from gv$session group by username,status order by 1
/

select username,machine,count(*) cnt from gv$session group by username,machine order by 1,2
/

select username,machine,failed_over,count(*) cnt from gv$session where failed_over='YES' 
group by username,machine,failed_over order by 1,2
/

select server,status,count(*) from gv$session group by server,status
/

select inst_id,service_name,count(*) cnt from gv$session group by inst_id,service_name order by 1,2
/

select inst_id,pname,username,count(*) cnt from gv$process group by inst_id,pname,username
/

select machine,program,count(*) from gv$session where type='USER' 
group by machine,program order by 1,2
/

select machine,server,username, count(*) cnt
          from gv$session
         -- where program like 'oracle@qdyy%(TNS V1-V3)'
         -- and machine in('xxx')
          group by machine,server,username
/


set linesize 400 pagesize 300
col USERNAME for a20 
col MACHINE  for a40
col rn for 999
col IDLE for a30
ttitle -
   center 'displays the top 50 longest idle times' skip 2
col kill for a17

select a.*
from (
  select ''''||sid ||','|| serial#||',@'||inst_id ||'''' kill,
  con_id,
  username,status, to_char(logon_time,'dd-mm-yy hh:mi:ss') logon_time
    , floor(last_call_et/3600)				||' hours '
        || floor(mod(last_call_et,3600)/60)	||' mins '
        || mod(mod(last_call_et,3600),60)	||' secs' idle
    , machine ,row_number() over(order by last_call_et desc ) rn
  from gv$session
  where type='USER' ) a
where rn<= 50
/


title off

column event heading 'wait event' for a30 trunc

ttitle -
   center 'displays active session' skip 2

select ''''||sid ||','|| serial#||',@'||inst_id ||'''' kill,
  con_id,
  username,event,program,MACHINE,sql_id,BLOCKING_SESSION from gv$session where status='ACTIVE' and username is not null;

title off








set linesize 700 
set kill for a15
col PROGRAM  for a20                                       
col OSUSER   for a15                    
col MACHINE  for a20
col EVENT    for a12
col CLIENT_INFO for a10 
col CLIENT_IDENTIFIER for a14
col WAIT_CLASS  for a25
col ACTION for a15
col STATUS for a8
col LOGICAL_READS for 9999999999999
col kill for a17
select 
''''||s.sid ||','|| s.serial#||',@'||s.inst_id ||'''' kill ,
s.con_id,
p.pid,
p.spid,
s.username,
s.status,
(select value from gv$sesstat natural join v$statname             where name = 'physical reads' and sid=s.sid)disk_reads,
(select value from gv$sesstat natural join v$statname             where name = 'session logical reads' and sid=s.sid) logical_reads,
(select value/100 cpu_sec from gv$sesstat natural join v$statname where name = 'CPU used by this session' and sid=s.sid)cpu_sec,
s.logon_time,
s.program,
s.osuser,
s.machine,
s.client_identifier,
s.client_info,
s.module,
s.action,
s.event,
s.wait_class,
 case
 when s.status = 'ACTIVE' then
					s.last_call_et
					else
					null
end wait_sec,
s.blocking_session_status,
s.blocking_instance,
s.blocking_session,
s.sql_id,
s.sql_hash_value,
s.sql_address,
s.prev_sql_id,
s.prev_hash_value,
s.prev_sql_addr,
s.sql_child_number,
s.prev_child_number,
s.server
from gv$session s join gv$process p on (s.inst_id = p.inst_id and s.paddr = p.addr)
where s.type = 'USER' 
and s.status='ACTIVE'
and schemaname not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' ,'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS','PUBLIC','WWV_FLOW_PLATFORM','DP_MON')
order by disk_reads desc
 




from web 


set serverouput  on 

SET SERVEROUT ON;
DECLARE
  l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type)
  l_statament VARCHAR2(32767);
  session_marked_for_kill EXCEPTION;
  PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill
  session_does_not_exist EXCEPTION;
  PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist.
BEGIN
  SELECT sid||','||serial#||',@'||inst_id
  BULK COLLECT INTO l_sid_serial
  FROM gv$session
  WHERE type = 'USER' 
AND sid <> SYS_CONTEXT('USERENV', 'SID')
;
  --
  IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found
    SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_machine: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||'sessions'
 );
    FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST
    LOOP
      l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE';
      DBMS_OUTPUT.put_line(l_statament||';');
      BEGIN
        EXECUTE IMMEDIATE l_statament;
      EXCEPTION
        WHEN session_marked_for_kill OR session_does_not_exist THEN NULL;
      END;
    END LOOP;
    SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!');
  ELSE
    DBMS_OUTPUT.put_line('no sessions found');
  END IF;
END;
/




SET SERVEROUT ON

DECLARE

  l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type)
  l_statament VARCHAR2(32767);
  session_marked_for_kill EXCEPTION;
  PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill
  session_does_not_exist EXCEPTION;
  PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist.

BEGIN
  SELECT root_blocker.sid||','||root_blocker.serial#||',@'||root_blocker.inst_id
  BULK COLLECT INTO l_sid_serial
  FROM gv$session blockee, gv$session root_blocker
  WHERE blockee.type = 'USER' 
AND blockee.sid <> SYS_CONTEXT('USERENV', 'SID') 
AND blockee.final_blocking_session_status = 'VALID'
  AND root_blocker.sid = blockee.final_blocking_session 
AND root_blocker.type = 'USER' 
AND root_blocker.sid <> SYS_CONTEXT('USERENV', 'SID')
and blockee.inst_id=root_blocker.inst_id
;
  --
  IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found
    SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'DD-MM-YYYY"T"HH24:MI:SS.FF3')||' cs_kill_root_blockers: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' root blocker sessions');
    FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST
    LOOP
      l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE';
      DBMS_OUTPUT.put_line(l_statament||';');
      BEGIN
        EXECUTE IMMEDIATE l_statament;
      EXCEPTION
        WHEN session_marked_for_kill OR session_does_not_exist THEN NULL;
      END;
    END LOOP;
    SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!');
  ELSE
    DBMS_OUTPUT.put_line('no sessions found');
  END IF;
END;
/





set linesize 300
COL sessions 	FOR 9999
COL active 	FOR 9999
COL inactive 	FOR  9999
COL killed 	FOR  9999

--
SELECT 
inst_id,
con_id,
COUNT(*) sessions,
       SUM(CASE status WHEN 'ACTIVE'   THEN 1 ELSE 0 END) 	active,
       SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) 	inactive,
       SUM(CASE status WHEN 'KILLED'   THEN 1 ELSE 0 END) 	killed,
       machine
  FROM gv$session
 WHERE 1=1
and type = 'USER'
   AND sid <> SYS_CONTEXT('USERENV', 'SID')
 GROUP BY
inst_id,
con_id,
machine
 ORDER BY    machine
/










20 comments:

Anuj Singh said...

The POST_TRANSACTION clause waits for ongoing transactions to complete before disconnecting the session, while the IMMEDIATE clause disconnects the session and ongoing transactions are recovered immediately.

alter system disconnect sessiob ‘SID,SERIAL#’ post_transaction;

Anuj Singh said...

http://anuj-singh.blogspot.co.uk/2014/10/show-sql-for-users-in-rac-database-and.html

Anuj Singh said...


set serveroutput on
COLUMN command HEADING "Disconnect Command" FORMAT a60
COLUMN command2 HEADING "Kill Command" FORMAT a60
BEGIN
FOR i IN (select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command
, 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2
from gv$session s , gv$process p
where s.inst_id = p.inst_id
and s.paddr = p.addr
and s.status = 'INACTIVE'
and s.type != 'BACKGROUND'
)
LOOP
DBMS_OUTPUT.PUT_LINE( i.command );
DBMS_OUTPUT.PUT_LINE( i.command2 );
END LOOP;
END;
/

Anuj Singh said...

set linesize 200
select inst_id, username, osuser, machine, status, count(*) from gv$session
group by inst_id, username, osuser, machine, status
order by count(*);

Anuj Singh said...


set linesize 200
select inst_id, username, status, count(*) from gv$session
group by inst_id, username, status
order by count(*);

Anuj Singh said...

set pagesize 100 linesize 200 feedback off
col "ACTIVE" for 999999 HEADING "ACTIVE"
col "INACTIVE" for 999999 HEADING "INACTIVE"
col "CACHED" for 999999 HEADING "CACHED"
col "KILLED" for 999999 HEADING "KILLED"
col "SNIPED" for 999999 HEADING "SNIPED"
col "USER NAME" for a30
COMPUTE SUM OF ACTIVE ON Report
COMPUTE SUM OF INACTIVE ON Report
COMPUTE SUM OF CACHED ON Report
COMPUTE SUM OF KILLED ON Report
COMPUTE SUM OF SNIPED ON Report
COMPUTE SUM OF TOTAL ON Report
break on report skip 1
SELECT Inst_id, NVL(USERNAME, '*BACKGROUND PROCESS*') "USER NAME",
count(DECODE(STATUS,'ACTIVE','1')) "ACTIVE",
count(DECODE(STATUS,'INACTIVE','1')) "INACTIVE",
count(DECODE(STATUS,'CACHED','1')) "CACHED",
count(DECODE(STATUS,'KILLED','1')) "KILLED",
count(DECODE(STATUS,'SNIPED','1')) "SNIPED" ,
count(*) TOTAL
from gv$session
group by inst_id,username
order by 1,2
/

Anuj Singh said...

Pluggable database session information ...



set pagesize 100 linesize 200 feedback off
col "ACTIVE" for 999999 HEADING "ACTIVE"
col "INACTIVE" for 999999 HEADING "INACTIVE"
col "CACHED" for 999999 HEADING "CACHED"
col "KILLED" for 999999 HEADING "KILLED"
col "SNIPED" for 999999 HEADING "SNIPED"
col "USER NAME" for a30
col PDB_NAME for a20
COMPUTE SUM OF ACTIVE ON Report
COMPUTE SUM OF INACTIVE ON Report
COMPUTE SUM OF CACHED ON Report
COMPUTE SUM OF KILLED ON Report
COMPUTE SUM OF SNIPED ON Report
COMPUTE SUM OF TOTAL ON Report
break on report skip 1
SELECT s.Inst_id, s.CON_ID,PDB_NAME,NVL(s.USERNAME, '*BACKGROUND PROCESS*') "USER NAME",
count(DECODE(s.STATUS,'ACTIVE','1')) "ACTIVE" ,
count(DECODE(s.STATUS,'INACTIVE','1')) "INACTIVE",
count(DECODE(s.STATUS,'CACHED','1')) "CACHED" ,
count(DECODE(s.STATUS,'KILLED','1')) "KILLED" ,
count(DECODE(s.STATUS,'SNIPED','1')) "SNIPED" ,
count(*) TOTAL
from gv$session s,dba_pdbs
where 1=1
and PDB_ID=s.CON_ID
group by s.inst_id,PDB_NAME,s.CON_ID,s.username
order by 1,2;

Anuj Singh said...

http://anuj-singh.blogspot.co.uk/2011/05/oracle-acvite-session-info.html

Anuj Singh said...

ps -ef|grep LOCAL=NO|wc -l

Anuj Singh said...

set pagesize 0
set linesize 300
col kill for a70
col USERNAME for a20
select 'alter system kill session '''||sid||','||serial#||',@'||inst_id||''' immediate ;' kill,'--',username,sql_id,BLOCKING_SESSION,STATE,FINAL_BLOCKING_SESSION from GV$SESSION
where 1=1
-- and username='username'
and status = 'INACTIVE'
and type != 'BACKGROUND'
and USERNAME not in ( 'SYS' , 'SYSTEM' , 'DBSNMP' , 'SYSMAN' , 'OUTLN' , 'MDSYS' , 'ORDSYS' , 'EXFSYS' , 'DMSYS' , 'WMSYS' , 'CTXSYS' , 'ANONYMOUS' , 'XDB' , 'ORDPLUGINS' , 'OLAPSYS' , 'PUBLIC','WWV_FLOW_PLATFORM' ) ;

Anuj Singh said...

for oracle rds

http://anuj-singh.blogspot.co.uk/2018/05/kill-session-in-aws-oracle-database.html

Anuj Singh said...

with instance name !!!!

set linesize 300
col LIMIT_VALUE for a10
col "%" for 9999999
col INITIAL_ALLOCATION for a20
col ATTENTION for a35
col RESOURCE_NAME for a15
select i.INST_ID,INSTANCE_NAME,RESOURCE_NAME,current_utilization,MAX_UTILIZATION,INITIAL_ALLOCATION,LIMIT_VALUE,(ROUND(((CURRENT_UTILIZATION/TO_NUMBER(LIMIT_VALUE)))*100)) "%"
, case when ((ROUND(( (CURRENT_UTILIZATION/to_number(LIMIT_VALUE)) )*100))>85.00) then '---(>85.00)% full ##'
else 'Good'
end as ATTENTION
from gv$resource_limit r,gv$instance i
WHERE resource_name in ('processes', 'sessions')
and i.inst_id=r.inst_id;

Anuj Singh said...


For Oracle 18c cancel sql !!!

http://anuj-singh.blogspot.com/2018/10/oracle-18c-cancel-sql-statement-for.html

Anuj Singh said...


session info

http://anuj-singh.blogspot.com/2015/03/oracle-session-info.html

Anuj Singh said...

and sid in ( select sid from gv$lock where type='TX' );

Anuj Singh said...

http://anuj-singh.blogspot.com/2011/07/oracle-session-doing-what.html

Anuj Singh said...



Be careful with increasing the number of processes, since it is related with sessions and transactions.

"SESSIONS parameter is the maximum number of sessions that can be created in the system. Every login requires a session.

It is calculated from PROCESSES parameter:

10g -> ((1.1 * PROCESSES) + 5)
11g-> ((1.5 * PROCESSES) + 22)

12.2-> ((1.5 * PROCESSES) + 22)

You may leave SESSIONS and let Database choose its value automatically."

TRANSACTIONS = (1.1 * SESSIONS)

Anuj Singh said...


set linesize 300 pagesize 300
col service_name for a20
select * from
(
select inst_id, machine, service_name from gv$session
where 1=1
-- and status ='ACTIVE'
-- and service_name like '%XXX%'
--group by inst_id, machine, service_name
)
PIVOT (COUNT(inst_id) FOR inst_id IN (1,2,3,4) )
ORDER BY machine;

Anuj Singh said...

http://anuj-singh.blogspot.com/2015/03/oracle-session-info.html

Anuj Singh said...



http://anuj-singh.blogspot.com/2016/02/oracle-wait-last-5-min.html

Oracle DBA

anuj blog Archive