SELECT GV_S.INST_ID,
GV_S.SID AS GV_SESSION_ID,
GLS.SID AS GV_LOCK_SID,
GV_S.INST_ID AS GV_SESSION_ID,
GV_S.SERIAL#,
LPAD(' ', (LEVEL - 1) * 4, ' ') || DECODE(LEVEL, 1, '', 'L-->') ||
GV_S.USERNAME AS USERNAME,
GV_S.STATUS,
GV_S.PROCESS,
GV_S.SCHEMANAME,
GV_S.OSUSER,
GV_S.PROCESS,
GV_S.MACHINE,
GV_S.TERMINAL,
GV_S.PROGRAM,
GV_S.TYPE,
GLS.NAME,
GV_S.SQL_ID,
GV_S.PREV_SQL_ID,
GV_S.MODULE,
GV_S.COMMAND,
GV_SC.COMMAND_NAME,
GV_S.ACTION,
GV_S.BLOCKING_SESSION_STATUS,
GV_S.BLOCKING_INSTANCE,
GV_S.BLOCKING_SESSION,
GV_S.FINAL_BLOCKING_SESSION_STATUS,
GV_S.FINAL_BLOCKING_INSTANCE,
GV_S.FINAL_BLOCKING_SESSION,
GV_S.EVENT,
GV_S.SERVICE_NAME,
GLS.TYPE,
GLS.ID1,
GLS.ID1_TAG,
GLS.ID2,
GLS.ID2_TAG,
GLS.LMODE,
GLS.REQUEST
FROM GV$SESSION GV_S,
GV$SQLCOMMAND GV_SC,
(SELECT GV_L.INST_ID,
GV_L.SID,
GV_L.REQUEST,
GV_L.LMODE,
GV_L.ID1,
GV_L.ID2,
GV_L.TYPE,
GV_L.BLOCK,
GV_LT.NAME,
GV_LT.ID1_TAG,
GV_LT.ID2_TAG,
GV_LT.IS_USER,
GV_LT.DESCRIPTION
FROM GV$LOCK GV_L, GV$LOCK_TYPE GV_LT
WHERE 1 = 1
AND GV_L.INST_ID = GV_LT.INST_ID
AND GV_L.TYPE = GV_LT.TYPE) GLS --GLOBAL LOCK STATUS
WHERE 1 = 1
AND GV_S.INST_ID = GLS.INST_ID(+)
AND GV_S.SID = GLS.SID(+)
AND GV_S.INST_ID = GV_SC.INST_ID
AND GV_S.COMMAND = GV_SC.COMMAND_TYPE
START WITH GLS.REQUEST = 0
AND GLS.BLOCK = 1 -- RAC CHECK =2
AND GLS.LMODE > 0
CONNECT BY PRIOR GV_S.SID = GV_S.BLOCKING_SESSION
AND GLS.REQUEST > 0;