2026-05-01 09:25:48 +02:00
/*
*
* Author : Vishal Gupta
* Purpose : Display Session Details
* Compatibility : 10.1 and above
* Parameters : 1 - SID
* 2 - INST_ID (optional, default to 1)
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ --------------------------------------------------
* 25-JUN-15 Vishal Gupta Changed exadata specific statistics section
* 03-JUN-15 Vishal Gupta Changed event history's average waits from sec to msec.
* 12-MAR-15 Vishal Gupta Added follwoing columns to the output
* command name,
* 05-SEP-14 Vishal Gupta In last 10 SQL statement, removed filter for SQL_EXEC_START IS NOT NULL
* 03-JUL-14 Vishal Gupta Change Top Session Events column formatting
Added PGA and Temp usage in Last 10 SQL statements section
* 20-MAY-14 Vishal Gupta Updated last 10 sql statements query
* 12-Feb-14 Vishal Gupta Changed session tranactions output layout to transpose
* columns to rows.
* 04-Oct-13 Vishal Gupta Added SQL's SQLProfile and sql_plan_baseline
* information to output
* 17-May-13 Vishal Gupta Added last 10 SQL statements from ASH
* 08-Jan-13 Vishal Gupta Added time since last wait in wait-history section
* 05-Sep-12 Vishal Gupta Changed output field layout again.
* 09-Aug-12 Vishal Gupta Changed output field layout
* 11-May-12 Vishal Gupta Change output layout. Instead of SELECT output
* now it display dbms_output lines.
* 27-Mar-12 Vishal Gupta Included the session wait history
* 05-Aug-04 Vishal Gupta Created
*
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* INPUT PARAMETERS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
VARIABLE SID number ;
VARIABLE INST_ID number ;
BEGIN
: SID : = ' &&1 ' ;
: INST_ID : = NVL ( ' &&2 ' , 1 ) ;
IF : INST_ID = ' ' OR : INST_ID IS NULL THEN
: INST_ID : = 1 ;
END IF ;
END ;
/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* CONFIGURATION PARAMETERS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
UNDEFINE TOP_EVENT_COUNT
UNDEFINE BYTES_FORMAT
UNDEFINE BYTES_HEADING
UNDEFINE BYTES_DIVIDER
DEFINE TOP_EVENT_COUNT = 10
DEFINE COUNT_SMALL_FORMAT = 9 , 999
--DEFINE COUNT_SMALL_DIVIDER="1"
--DEFINE COUNT_SMALL_HEADING="#"
DEFINE COUNT_SMALL_DIVIDER = " 1000 "
DEFINE COUNT_SMALL_HEADING = " #1000 "
DEFINE COUNT_FORMAT = 999 , 999 , 999 , 999 , 999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER = " 1000 "
DEFINE COUNT_HEADING = " #1000 "
DEFINE BYTES_FORMAT = " 999,999,999 "
--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
DEFINE BYTES_DIVIDER = " 1024/1024 "
DEFINE BYTES_HEADING = " MB "
--DEFINE BYTES_DIVIDER="1024/1024/1024"
--DEFINE BYTES_HEADING="GB"
DEFINE TIME_FORMAT = 999 , 999
DEFINE TIME_DIVIDER = " 1 "
DEFINE TIME_HEADING = " sec "
--DEFINE TIME_DIVIDER="60"
--DEFINE TIME_HEADING="min"
COLUMN session_details1 HEADING " Session Details " FORMAT a41
COLUMN session_details2 HEADING " Session Details " FORMAT a70
COLUMN sql_details HEADING " Session Details " FORMAT a151
COLUMN inst_id HEADING " I# " FORMAT 99
COLUMN SID HEADING " SID " FORMAT 99999
PROMPT
PROMPT # # # # # # # # # # # # # # # # # Session Details # # # # # # # # # # # # # # # # # # # # # # # # # #
set heading off
select /* +ORDERED */
/* First Column */
TRIM ( SUBSTR ( ' Instance : ' | | s . inst_id , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' SID : ' | | s . sid , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Session Serial# : ' | | s . serial # , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Status : ' | | s . status , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' State : ' | | s . state , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Logon Time : ' | | TO_CHAR ( s . logon_time , ' DD-MON-YY HH24:MI:SS ' ) , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Session Duration : ' | | FLOOR ( sysdate - s . logon_time ) | | ' d '
| | FLOOR ( MOD ( ( sysdate - s . logon_time ) , 1 ) * 24 ) | | ' h '
| | FLOOR ( MOD ( ( sysdate - s . logon_time ) * 24 , 1 ) * 60 ) | | ' m '
| | FLOOR ( MOD ( ( sysdate - s . logon_time ) * 24 * 60 , 1 ) * 60 ) | | ' s '
, 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' LastCall(sec) : ' | | FLOOR ( s . last_call_et / 3600 ) | | ' h '
| | LPAD ( FLOOR ( MOD ( s . last_call_et , 3600 ) / 60 ) , 2 ) | | ' m '
| | LPAD ( MOD ( s . last_call_et , 60 ) , 2 ) | | ' s '
, 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( ' Failed Over : ' | | s . failed_over ) | | chr ( 10 )
| | TRIM ( ' Failover Type : ' | | s . failover_type ) | | chr ( 10 )
| | TRIM ( ' Failover Method : ' | | s . failover_method ) | | chr ( 10 )
| | TRIM ( ' Parallel Query : ' | | s . pq_status ) | | chr ( 10 )
| | TRIM ( ' PDML Enabled : ' | | s . pdml_enabled ) | | chr ( 10 )
| | TRIM ( ' PDML Status : ' | | s . pdml_status ) | | chr ( 10 )
| | TRIM ( ' PDDL Status : ' | | s . pddl_status ) | | chr ( 10 )
| | TRIM ( ' SQL Trace : ' | | s . sql_trace ) | | chr ( 10 )
| | TRIM ( ' SQL Trace Waits : ' | | s . sql_trace_waits ) | | chr ( 10 )
| | TRIM ( ' SQL Trace Binds : ' | | s . sql_trace_binds ) | | chr ( 10 )
| | TRIM ( ' SQL Trace PlanStats: ' | | s . sql_trace_plan_stats ) | | chr ( 10 )
as session_details1
/* Second Column */
, TRIM ( SUBSTR ( ' OS Username : ' | | s . osuser , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Client Machine : ' | | s . machine , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Client Process : ' | | s . process , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Program : ' | | s . program , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Module : ' | | s . module , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Action : ' | | s . action , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Client Info : ' | | s . client_info , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Client Identifier : ' | | s . client_identifier , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' DB UserName : ' | | s . username , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Schema Name : ' | | s . schemaname , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' ServiceName : ' | | s . service_name , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' DB HostName : ' | | i . host_name , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Oracle SPID : ' | | p . spid , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Oracle PID : ' | | p . pid , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Oracle Process Name: ' | | p . pname , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Session Type : ' | | s . type , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Command Name : ' | | c . command_name , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Wait Event : ' | | w . event , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Wait(sec) : ' | | w . seconds_in_wait , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Wait Parameter 1 : ' | | w . p1text | | ' ' | | w . p1 , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Wait Parameter 2 : ' | | w . p2text | | ' ' | | w . p2 , 1 , 70 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Wait Parameter 3 : ' | | w . p3text | | ' ' | | w . p3 , 1 , 70 ) ) | | chr ( 10 )
as session_details2
from gv$instance i
JOIN gv$session s ON i . inst_id = s . inst_id
LEFT OUTER JOIN gv$process p ON p . inst_id = s . inst_id AND p . ADDR = s . PADDR
LEFT OUTER JOIN gv$session_wait w ON w . inst_id = s . inst_id AND w . sid = s . sid
LEFT OUTER JOIN v$sqlcommand c ON c . command_type = s . command
where 1 = 1
AND s . sid = : SID
AND s . inst_id = : INST_ID
;
PROMPT
PROMPT # # # # # # # # # # # # # # # # # Currrent SQL Statement # # # # # # # # # # # # # # # # # # # #
-- Get the SQL Statement being executed
select --+
TRIM ( SUBSTR ( ' Current SQL Exec Start : ' | | TO_CHAR ( s . sql_exec_start , ' DD-MON-YY HH24:MI:SS ' ) , 1 , 150 ) ) | | chr ( 10 ) | |
TRIM ( SUBSTR ( ' Current SQL Exec Duration: ' | | NVL2 ( s . sql_exec_start , FLOOR ( sysdate - s . sql_exec_start ) | | ' d '
| | LPAD ( FLOOR ( MOD ( ( sysdate - s . sql_exec_start ) , 1 ) * 24 ) , 2 ) | | ' h '
| | LPAD ( FLOOR ( MOD ( ( sysdate - s . sql_exec_start ) * 24 , 1 ) * 60 ) , 2 ) | | ' m '
| | LPAD ( FLOOR ( MOD ( ( sysdate - s . sql_exec_start ) * 24 * 60 , 1 ) * 60 ) , 2 ) , ' ' )
, 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQL ID : ' | | s . sql_id , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQL Child Number : ' | | s . sql_child_number , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQL Plan : ' | | sql . plan_hash_value , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQL Profile : ' | | sql . sql_profile , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQL Plan Baseline: ' | | sql . sql_plan_baseline , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Current SQLText : ' | | sql . sql_text , 1 , 150 ) ) | | chr ( 10 )
| | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL Exec Start : ' | | TO_CHAR ( s . prev_exec_start , ' DD-MON-YY HH24:MI:SS ' ) , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL ID : ' | | s . prev_sql_id , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL Child Number : ' | | s . prev_child_number , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL Plan : ' | | prev_sql . plan_hash_value , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL Profile : ' | | prev_sql . sql_profile , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQL Plan Baseline: ' | | prev_sql . sql_plan_baseline , 1 , 150 ) ) | | chr ( 10 )
| | TRIM ( SUBSTR ( ' Previous SQLText : ' | | prev_sql . sql_text , 1 , 150 ) )
as sql_details
from gv$session s
, gv$sqlarea sql
, gv$sqlarea prev_sql
where s . inst_id = sql . inst_id ( + )
AND s . sql_id = sql . sql_id ( + )
AND s . inst_id = prev_sql . inst_id ( + )
AND s . prev_sql_id = prev_sql . sql_id ( + )
AND s . sid = : SID
AND s . inst_id = : INST_ID
;
PROMPT
PROMPT # # # # # # # # # # # # # # # Session Statistics # # # # # # # # # # # # # # # # # # # # # # #
COLUMN stat HEADING " Statisic " FORMAT a60
WITH stat1 AS
(
SELECT DECODE ( sn . name
, ' physical read total bytes ' , 1
, ' physical reads ' , 2
, ' physical reads direct ' , 3
, ' physical reads direct temporary tablespace ' , 4
, ' physical reads direct (lob) ' , 5
, ' redo size ' , 6
, ' redo size for direct writes ' , 7
, ' CPU used by this session ' , 8
, ' CPU used when call started ' , 9
, ' session logical reads ' , 10
, ' user calls ' , 11
, ' table fetch by rowid ' , 12
, ' table fetch continued row ' , 13
, 99
) sr_no
, DECODE ( sn . name
, ' physical reads ' , RPAD ( ' Physical Read Requests ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
, ' redo size ' , RPAD ( ' Redo Size ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / & & BYTES_DIVIDER ) , ' &&BYTES_FORMAT ' ) ) | | ' &&BYTES_HEADING '
, ' redo size for direct writes ' , RPAD ( ' Redo Size (For Direct Reads) ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / & & BYTES_DIVIDER ) , ' &&BYTES_FORMAT ' ) ) | | ' &&BYTES_HEADING '
, ' physical read total bytes ' , RPAD ( ' Physical Read Size ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / & & BYTES_DIVIDER ) , ' &&BYTES_FORMAT ' ) ) | | ' &&BYTES_HEADING '
, ' CPU used when call started ' , RPAD ( ' CPU used when call started ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 100 / & & TIME_DIVIDER ) , ' &&TIME_FORMAT ' ) ) | | ' &&TIME_HEADING '
, ' CPU used by this session ' , RPAD ( ' CPU used by this session ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 100 / & & TIME_DIVIDER ) , ' &&TIME_FORMAT ' ) ) | | ' &&TIME_HEADING '
, ' session logical reads ' , RPAD ( ' Logical Reads ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ( ss . value * p . value ) / & & BYTES_DIVIDER ) , ' &&BYTES_FORMAT ' ) ) | | ' &&BYTES_HEADING '
, RPAD ( sn . name , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
) stat
FROM gv$sesstat ss
, v$statname sn
, v$system_parameter p
WHERE ss . statistic # = sn . statistic #
AND sn . name IN
(
' physical reads '
, ' redo size '
, ' redo size for direct writes '
, ' physical read total bytes '
, ' physical reads direct '
, ' physical reads direct temporary tablespace '
, ' physical reads direct (lob) '
, ' user calls '
, ' CPU used by this session '
, ' CPU used when call started '
, ' session logical reads '
, ' table fetch by rowid '
, ' table fetch continued row '
)
AND p . name = ' db_block_size '
AND ss . inst_id = : INST_ID
AND ss . sid = : SID
ORDER BY sr_no
)
, stat2 as
(
SELECT DECODE ( sn . name
, ' physical write total bytes ' , 1
, ' physical writes ' , 2
, ' physical writes direct ' , 3
, ' physical writes direct temporary tablespace ' , 4
, ' physical writes direct (lob) ' , 5
, ' temp space allocated (bytes) ' , 6
, ' session pga memory ' , 7
, ' session pga memory max ' , 8
, ' OS User time used ' , 9
, ' OS System time used ' , 10
, ' bytes sent via SQL*Net to client ' , 11
, ' bytes received via SQL*Net from client ' , 12
, 99
) sr_no
, DECODE ( sn . name
, ' physical reads ' , RPAD ( ' Physical Read Requests ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
, ' physical writes ' , RPAD ( ' Physical Write Requests ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
, ' physical read total bytes ' , RPAD ( ' Physical Read Size ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' physical write total bytes ' , RPAD ( ' Physical Write Size ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' temp space allocated (bytes) ' , RPAD ( ' Temp Space Allocated ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' session pga memory ' , RPAD ( ' PGA Memory Used (HostRAM) ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' session pga memory max ' , RPAD ( ' PGA Memory Max (HostRAM) ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' bytes sent via SQL*Net to client ' , RPAD ( ' Data Sent to Client ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' bytes received via SQL*Net from client ' , RPAD ( ' Data received from Client ' , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, RPAD ( sn . name , 35 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
) stat
FROM gv$sesstat ss
, v$statname sn
WHERE ss . statistic # = sn . statistic #
AND sn . name IN
(
' physical writes '
, ' physical write total bytes '
, ' physical writes direct '
, ' physical writes direct temporary tablespace '
, ' physical writes direct (lob) '
, ' session pga memory '
, ' session pga memory max '
, ' bytes sent via SQL*Net to client '
, ' bytes received via SQL*Net from client '
, ' OS User time used '
, ' OS System time used '
, ' temp space allocated (bytes) '
)
AND ss . inst_id = : INST_ID
AND ss . sid = : SID
ORDER BY sr_no
)
SELECT stat1 . stat , stat2 . stat
FROM stat1
FULL OUTER JOIN stat2 ON stat1 . sr_no = stat2 . sr_no
ORDER BY stat1 . sr_no
;
PROMPT
PROMPT # # # # # # # # # Session Statistics ( Exadata specific ) # # # # # # # # # # #
COLUMN stat HEADING " Statistic " FORMAT a150
WITH stat1 AS
(
SELECT DECODE ( sn . name
, ' cell physical IO interconnect bytes ' , 1
, ' cell physical IO interconnect bytes returned by smart scan ' , 2
, ' physical read total bytes optimized ' , 3
, ' cell physical IO bytes eligible for predicate offload ' , 4
, ' cell physical IO bytes saved by storage index ' , 5
, ' cell physical IO bytes eligible for predicate offload ' , 6
, ' cell IO uncompressed bytes ' , 7
, ' cell overwrites in flash cache ' , 8
, ' cell partial writes in flash cache ' , 9
, ' cell writes to flash cache ' , 10
, ' cell num bytes in passthru during predicate offload ' , 11
, 99
) sr_no
, DECODE ( sn . name
, ' cell physical IO interconnect bytes ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' cell physical IO interconnect bytes returned by smart scan ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' physical read total bytes optimized ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' cell physical IO bytes eligible for predicate offload ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' cell physical IO bytes saved by storage index ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' cell physical IO bytes eligible for predicate offload ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, ' cell IO uncompressed bytes ' , RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ROUND ( ss . value / 1024 / 1024 ) , ' &&COUNT_FORMAT ' ) ) | | ' MB '
, RPAD ( sn . name , 60 ) | | ' : ' | | LTRIM ( TO_CHAR ( ss . value , ' &&COUNT_FORMAT ' ) )
) stat
FROM gv$sesstat ss
, v$statname sn
WHERE ss . statistic # = sn . statistic #
AND sn . name IN
(
' cell physical IO interconnect bytes '
, ' cell physical IO interconnect bytes returned by smart scan '
, ' physical read total bytes optimized '
, ' cell physical IO bytes eligible for predicate offload '
, ' cell physical IO bytes saved by storage index '
, ' cell physical IO bytes eligible for predicate offload '
, ' cell IO uncompressed bytes '
, ' cell overwrites in flash cache '
, ' cell partial writes in flash cache '
, ' cell writes to flash cache '
, ' cell num bytes in passthru during predicate offload '
)
AND ss . inst_id = : INST_ID
AND ss . sid = : SID
ORDER BY sr_no
)
SELECT stat1 . stat
FROM stat1
ORDER BY stat1 . sr_no
;
set heading on
PROMPT
PROMPT # # # # # # # # # # # # # # # # # Session Transactions # # # # # # # # # # # # # # # # # # # #
COLUMN xid HEADING " XID " FORMAT a16
COLUMN transaction_status HEADING " Tran|Status " FORMAT a8
COLUMN transaction_start_date HEADING " Tran|StartDate " FORMAT a18
COLUMN tran_duration HEADING " Tran|Duration " FORMAT a15
COLUMN space HEADING " Space|Tran " FORMAT a5
COLUMN recursive HEADING " Recu|rsive|Tran " FORMAT a5
COLUMN noundo HEADING " No|Undo|Tran " FORMAT a4
COLUMN ptx HEADING " Par'l|Tran " FORMAT a5
COLUMN used_undo HEADING " Undo|(&&BYTES_HEADING) " FORMAT & & BYTES_FORMAT
COLUMN log_io HEADING " Logical|IO " FORMAT 999 , 999 , 999
COLUMN phy_io HEADING " Physical|IO " FORMAT 999 , 999 , 999
COLUMN cr_get HEADING " Consistent|Gets " FORMAT 999 , 999 , 999
COLUMN name HEADING " Tran Name " FORMAT a15 WRAP
set heading off
SELECT ' Transaction Name : ' | | TRIM ( t . name ) | | chr ( 10 )
| | ' XID : ' | | TRIM ( t . xid ) | | chr ( 10 )
| | ' Parent XID : ' | | TRIM ( t . ptx_xid ) | | chr ( 10 )
| | ' Tran Status : ' | | TRIM ( t . status ) | | chr ( 10 )
| | ' Tran Start Time : ' | | TO_CHAR ( t . start_date , ' DD-MON-YY HH24:MI:SS ' ) | | chr ( 10 )
| | ' Tran Duration : ' | | FLOOR ( sysdate - t . start_date ) | | ' d '
| | LPAD ( FLOOR ( MOD ( ( sysdate - t . start_date ) , 1 ) * 24 ) , 2 ) | | ' h '
| | LPAD ( FLOOR ( MOD ( ( sysdate - t . start_date ) * 24 , 1 ) * 60 ) , 2 ) | | ' m '
| | LPAD ( FLOOR ( MOD ( ( sysdate - t . start_date ) * 24 * 60 , 1 ) * 60 ) , 2 ) | | ' s ' | | chr ( 10 )
| | ' Parallel Tran : ' | | TRIM ( t . ptx ) | | chr ( 10 )
| | ' Space Tran : ' | | TRIM ( t . space ) | | chr ( 10 )
| | ' Recursive Tran : ' | | TRIM ( t . recursive ) | | chr ( 10 )
| | ' No UNDO Tran : ' | | TRIM ( t . noundo ) | | chr ( 10 )
| | ' Undo : ' | | TRIM ( TO_CHAR ( ROUND ( ( t . used_ublk * p . value ) / & & BYTES_DIVIDER ) , ' &&BYTES_FORMAT ' ) ) | | ' &&BYTES_HEADING ' | | chr ( 10 )
| | ' Logical IO : ' | | TRIM ( TO_CHAR ( t . log_io , ' 999,999,999 ' ) ) | | chr ( 10 )
| | ' Physical IO : ' | | TRIM ( TO_CHAR ( t . phy_io , ' 999,999,999 ' ) ) | | chr ( 10 )
| | ' Consistent Gets : ' | | TRIM ( TO_CHAR ( t . cr_get , ' 999,999,999 ' ) ) | | chr ( 10 )
FROM gv$transaction t
INNER JOIN gv$session s ON t . inst_id = s . inst_id AND t . ses_addr = s . saddr
INNER JOIN v$parameter p ON p . name = ' db_block_size '
WHERE s . inst_id = : INST_ID
AND s . sid = : SID
ORDER BY t . start_date
;
set heading on
PROMPT
PROMPT # # # # # # # # # Locked Objects # # # # # # # # # # # # # # # # # # # # # # # # # #
COLUMN object_name HEADING " ObjectName " FORMAT a40
COLUMN object_type HEADING " ObjectType " FORMAT a10 TRUNCATED
COLUMN locked_mode HEADING " LockedMode " FORMAT a10
SELECT o . owner | | ' . ' | | o . object_name object_name
, o . object_type
, DECODE ( l . locked_mode ,
0 , ' None ' , /* Mon Lock equivalent */
1 , ' Null ' , /* N */
2 , ' Row-S (SS) ' , /* L */
3 , ' Row-X (SX) ' , /* R */
4 , ' Share ' , /* S */
5 , ' S/Row-X (SSX) ' , /* C */
6 , ' Exclusive ' , /* X */
TO_CHAR ( l . locked_mode ) ) locked_mode
FROM gv$locked_object l
JOIN dba_objects o ON o . object_id = l . object_id
JOIN gv$session s ON s . inst_id = l . inst_id AND s . sid = l . session_id
WHERE s . sid = : SID
AND s . inst_id = : INST_ID
ORDER BY object_name
;
PROMPT
PROMPT # # # # # # # # # Session Lock Information # # # # # # # # # # # # # # # # #
COLUMN Block HEADING " Block " FORMAT a10
COLUMN blocking_instance HEADING " Blocking|I# " FORMAT 999999999
COLUMN blocking_instance HEADING " Blocking|I# " FORMAT 999999999
COLUMN blocking_session_status HEADING " Blocking|SID Status " FORMAT a10
COLUMN final_blocking_instance HEADING " Final|Blocking|I# " FORMAT 999999999
COLUMN final_blocking_session HEADING " Final|Blocking|SID " FORMAT 999999999
COLUMN final_blocking_session_status HEADING " Final|Blocking|SID Status " FORMAT a10
COLUMN inst_id HEADING " I# " FORMAT 99
COLUMN username HEADING " DBUser " FORMAT a15
COLUMN osuser HEADING " OSUser " FORMAT a15
COLUMN status HEADING " Status " FORMAT a10
COLUMN state HEADING " State " FORMAT a10
COLUMN logon_time HEADING " LogonTime " FORMAT a18
COLUMN service_name HEADING " ServiceName " FORMAT a20
select ' Blocked By ' Block
, s . blocking_instance
, s . blocking_session
, s . blocking_session_status
, s . final_blocking_instance
, s . final_blocking_session
, s . final_blocking_session_status
FROM gv$session s
where s . sid = : SID
AND s . inst_id = : INST_ID
and s . blocking_session is NOT NULL
order by 1 ;
select ' Blocking ' Block
, s . inst_id
, s . SID
--, s.SERIAL#
, s . username
, s . osuser
, s . status
, s . state
, CASE
WHEN s . status = ' ACTIVE ' THEN s . last_call_et
ELSE NULL
END last_call_et
, TO_CHAR ( s . LOGON_TIME , ' DD-Mon-YY HH24:MI:SS ' ) logon_time
, s . service_name
, s . sql_id
FROM gv$session s
where ( s . blocking_session = : SID
AND s . blocking_instance = : INST_ID )
OR ( s . final_blocking_session = : SID
AND s . final_blocking_instance = : INST_ID )
;
PROMPT
PROMPT # # # # # # # # # Session Events ( Top & & TOP_EVENT_COUNT ) # # #
COLUMN wait_class HEAD " WaitClass " FORMAT a20 TRUNCATE
COLUMN event HEAD " EventName " FORMAT a40
COLUMN total_waits HEAD " TotalWaits " FORMAT 9 , 999 , 999
COLUMN total_timeouts HEAD " TotalTimeOuts " FORMAT 9 , 999 , 999
COLUMN time_waited HEAD " TimeWaited (s) " FORMAT 9 , 999 , 999
COLUMN average_wait HEAD " AvgWait (ms) " FORMAT 9 , 999 , 999
COLUMN max_wait HEAD " MaxWait (s) " FORMAT 9 , 999 , 999
select * from
(
SELECT e . sid
, e . inst_id
, e . wait_class
, e . event
, e . total_waits
, e . total_timeouts
, e . time_waited / 100 time_waited
, e . average_wait * 10 average_wait
, e . max_wait / 100 max_wait
FROM gv$session_event e
WHERE e . sid = : SID
AND e . inst_id = : INST_ID
order by e . time_waited desc , e . total_waits desc
)
where rownum < = & & TOP_EVENT_COUNT
/
PROMPT
PROMPT # # # # # # # # # Session Wait History # # # # # # # # # # # # # # # # # # # # #
COLUMN seq # FORMAT 999
COLUMN state FORMAT a10
COLUMN event HEADING " EventName " FORMAT a40
COLUMN wait_time HEADING " Wait(ms) " FORMAT 99 , 999
COLUMN TIME_SINCE_LAST_WAIT HEADING " TimeSince|LastWait|(ms) " FORMAT 999 , 999
COLUMN p1 FORMAT 9999999999
COLUMN p2 FORMAT 9999999999
COLUMN p3 FORMAT 9999999999
COLUMN p1text FORMAT a20
COLUMN p2text FORMAT a20
COLUMN p3text FORMAT a20
SELECT w . sid
, w . inst_id
, w . seq #
, w . event
, w . wait_time * 10 wait_time
, w . TIME_SINCE_LAST_WAIT_MICRO / 1000 TIME_SINCE_LAST_WAIT
, w . p1
, w . p1text
, w . p2
, w . p2text
, w . p3
, w . p3text
FROM gv$session_wait_history w
WHERE w . sid = : SID
AND w . inst_id = : INST_ID
ORDER BY seq #
/
PROMPT
PROMPT # # # # # # # # # Last 10 SQL Statements # # # # # # # # # # # # # # # # # #
COLUMN session_id HEADING " SID " FORMAT 99999
COLUMN inst_id HEADING " I# " FORMAT 99
COLUMN " session_serial# " HEADING " Serial# " FORMAT 999999
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
COLUMN sql_plan_hash_value HEADING " Plan|Hash|Value " FORMAT 9999999999
COLUMN sql_exec_start FORMAT a19
COLUMN sql_exec_end HEADING " MaxSampleTime " FORMAT a19
COLUMN duration FORMAT a15
COLUMN sql_opname HEADING " SQL|Operation " FORMAT a15 TRUNCATE
COLUMN sql_child_number HEADING " SQL|Ch# " FORMAT 999
COLUMN current_dop HEADING " DOP " FORMAT 999
COLUMN phyread HEADING " Phy|Read|(GB) " FORMAT 9999
COLUMN phywrite HEADING " Phy|Write|(GB) " FORMAT 9999
COLUMN interconnect_io HEADING " Inter|Connect|IO|(GB) " FORMAT 9999
COLUMN pga_allocated HEADING " PGA|(GB) " FORMAT 99 . 00
COLUMN temp_space_allocated HEADING " Temp|Space|(GB) " FORMAT 999 . 00
-- Get the SQL Statements from ASH
SELECT * FROM
(
SELECT --ash.sql_exec_id,
--TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
NVL ( ash . qc_session_id , ash . session_id ) session_id
, NVL ( ash . qc_instance_id , ash . inst_id ) inst_id
, NVL ( ash . qc_session_serial # , ash . session_serial # ) session_serial #
, TO_CHAR ( NVL ( ash . sql_exec_start , MIN ( ash . sample_time ) ) , ' DD-MON-YY HH24:MI:SS ' ) sql_exec_start
, TO_CHAR ( max ( ash . sample_time ) , ' DD-MON-YY HH24:MI:SS ' ) sql_exec_end
, REPLACE ( max ( ash . sample_time ) - NVL ( ash . sql_exec_start , MIN ( ash . sample_time ) ) , ' +00000000 ' , ' + ' ) duration
, ash . sql_opname
, ash . sql_id
, ash . sql_child_number
, ash . sql_plan_hash_value
, max ( trunc ( ash . px_flags / 2097152 ) ) current_dop
, ash . force_matching_signature
, NVL ( ash_parent . top_level_sql_id , ash . top_level_sql_id ) top_level_sql_id
, ROUND ( SUM ( ash . delta_read_io_bytes ) / power ( 1024 , 3 ) ) phyread
, ROUND ( SUM ( ash . delta_write_io_bytes ) / power ( 1024 , 3 ) ) phywrite
, ROUND ( SUM ( ash . delta_interconnect_io_bytes ) / power ( 1024 , 3 ) ) interconnect_io
, ROUND ( MAX ( ash . pga_allocated ) / power ( 1024 , 3 ) , 2 ) pga_allocated
, ROUND ( MAX ( ash . temp_space_allocated ) / power ( 1024 , 3 ) , 2 ) temp_space_allocated
FROM gv$session s
JOIN gv$active_session_history ash
ON s . inst_id = NVL ( ash . qc_instance_id , ash . inst_id )
AND s . sid = NVL ( ash . qc_session_id , ash . session_id )
AND s . serial # = NVL ( ash . qc_session_serial # , ash . session_serial # )
LEFT OUTER JOIN gv$active_session_history ash_parent
ON ash_parent . inst_id = ash . qc_instance_id
AND ash_parent . session_id = ash . qc_session_id
AND ash_parent . session_serial # = ash . qc_session_serial #
AND CAST ( ash_parent . sample_time as DATE ) = ash . sql_exec_start
WHERE s . inst_id = : INST_ID
AND s . sid = : SID
--AND ash.sql_exec_id IS NOT NULL
GROUP BY NVL ( ash . qc_session_id , ash . session_id )
, NVL ( ash . qc_instance_id , ash . inst_id )
, NVL ( ash . qc_session_serial # , ash . session_serial # )
, ash . sql_exec_id
, ash . sql_exec_start
, ash . sql_id
, ash . sql_child_number
, ash . sql_plan_hash_value
, ash . FORCE_MATCHING_SIGNATURE
, ash . sql_opname
, NVL ( ash_parent . top_level_sql_id , ash . top_level_sql_id )
ORDER BY
-- max(ash.sample_time) asc
--,
NVL ( ash . sql_exec_start , MIN ( ash . sample_time ) ) DESC
, max ( ash . sample_time ) DESC
)
WHERE ROWNUM < = 10
ORDER BY sql_exec_end
;
set serveroutput on
PROMPT
PROMPT # # # # # # # # # Kill / Disconnect Command # # # # # # # # # # # # # # # # # #
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 . sid = : SID
AND s . inst_id = : INST_ID )
LOOP
DBMS_OUTPUT . PUT_LINE ( i . command | | chr ( 10 )
| | i . command2 ) ;
END LOOP ;
END ;
/
set serveroutput off