Files
oracle/star/transaction_long_running.sql

136 lines
5.7 KiB
MySQL
Raw Permalink Normal View History

2026-03-12 21:23:47 +01:00
/*
*
* Author : Vishal Gupta
* Purpose : Displays long running transactions
* Parameter: 1 - Where Clause
*
* Revision History:
* ===================
* Date Author Description
* --------- ------------ -----------------------------------------
* 04-May-15 Vishal Gupta Created
*
*/
/************************************
* INPUT PARAMETERS
************************************/
UNDEFINE WHERE_CLAUSE
DEFINE WHERE_CLAUSE="&&1"
/************************************
* CONFIGURATION PARAMETERS
************************************/
DEFINE BYTES_FORMAT="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 COUNT_FORMAT=999,999
--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="#1000"
PROMPT
PROMPT *********************************************
PROMPT * D A T A B A S E T R A N S A C T I O N S
PROMPT *********************************************
COLUMN xid HEADING "XID" FORMAT a16
COLUMN sid HEADING "SID" FORMAT 99999
COLUMN inst_id HEADING "I#" FORMAT 99
COLUMN spid HEADING "SPID" FORMAT a6
COLUMN transaction_start_date HEADING "Transaction|StartTime" FORMAT a18
COLUMN tran_duration HEADING "Transaction|Duration" FORMAT a15
COLUMN transaction_status HEADING "Tran|Status" FORMAT a8
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 username HEADING "UserName" FORMAT a20
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
COLUMN status HEADING "Session|Status" FORMAT a8
COLUMN state HEADING "Session|State" FORMAT a12 TRUNCATED
COLUMN logon_time HEADING "Logon Time" FORMAT a18
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
COLUMN process HEADING "Process" FORMAT a11
COLUMN program HEADING "Program" FORMAT a20 TRUNCATED
COLUMN event HEADING "Event" FORMAT a30 TRUNCATED
--COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999
COLUMN last_call_et HEADING "LastCall" FORMAT a12
COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99
COLUMN log_io HEADING "Logical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN phy_io HEADING "Physical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN cr_get HEADING "Consistent|Gets|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
COLUMN locked_mode HEADING "Lock Mode" FORMAT a10
COLUMN object_name HEADING "ObjectName" FORMAT a35
SELECT
-- t.xid xid
--, t.ptx_xid
s.sid sid
, t.inst_id
, p.spid
, s.status
, TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') transaction_start_date
, 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 ' tran_duration
, t.status transaction_status
, t.space
, t.recursive
, t.noundo
, t.ptx
, DECODE(lo.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(lo.locked_mode)
) locked_mode
, NVL2(o.owner,o.owner|| '.' || o.object_name || NVL2(o.subobject_name,'(' || o.subobject_name || ')','') , '' ) object_name
, ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER) used_undo
, t.log_io/&&COUNT_DIVIDER log_io
, t.phy_io/&&COUNT_DIVIDER phy_io
, t.cr_get/&&COUNT_DIVIDER cr_get
, s.username
, s.osuser
-- , s.sql_id
-- , s.sql_child_number
, s.program
FROM gv$transaction t
INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr
INNER JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr
INNER JOIN v$parameter p ON p.name = 'db_block_size'
LEFT OUTER JOIN gv$locked_object lo ON t.inst_id = lo.inst_id
AND s.sid = lo.session_id
AND t.xidusn = lo.xidusn
AND t.xidslot = lo.xidslot
AND t.xidsqn = lo.xidsqn
LEFT OUTER JOIN dba_objects o ON lo.object_id = o.object_id
WHERE 1=1 and 2=2
-- had to put AND clause other when no where clause is passed it was giving following error
-- SP2-0341: line overflow during variable substitution (>3000 characters at line 53)
&&WHERE_CLAUSE
ORDER BY transaction_start_date asc
;