¿Cómo se muestra la ejecución de SQL en una base de datos Oracle?

26

¿Cómo puede mostrar el SQL que se está ejecutando actualmente en una base de datos Oracle?

La información adicional que sería útil incluiría usuario, ID de sesión, etc.

Clarkey
fuente

Respuestas:

35

La mayor parte de la información está disponible en v $ session ... y el texto SQL se puede obtener de v $ sql o v $ sqltext_with_newlines ...

Aquí hay una consulta que uso a menudo en formatos SQL en vuelo, el más largo en la parte superior.

-- In Flight SQL 
SELECT nvl(ses.username,'ORACLE PROC')||' ('||ses.sid||')' USERNAME,
       SID,   
       MACHINE, 
       REPLACE(SQL.SQL_TEXT,CHR(10),'') STMT, 
      ltrim(to_char(floor(SES.LAST_CALL_ET/3600), '09')) || ':'
       || ltrim(to_char(floor(mod(SES.LAST_CALL_ET, 3600)/60), '09')) || ':'
       || ltrim(to_char(mod(SES.LAST_CALL_ET, 60), '09'))    RUNT 
  FROM V$SESSION SES,   
       V$SQLtext_with_newlines SQL 
 where SES.STATUS = 'ACTIVE'
   and SES.USERNAME is not null
   and SES.SQL_ADDRESS    = SQL.ADDRESS 
   and SES.SQL_HASH_VALUE = SQL.HASH_VALUE 
   and Ses.AUDSID <> userenv('SESSIONID') 
 order by runt desc, 1,sql.piece;
David Mann
fuente
¿Cuál es el significado de In Flight SQL?
toha
En vuelo = actualmente ejecutándose en una base de datos Oracle, o en este caso actualmente disponible en v $ session y status = 'ACTIVE'
David Mann
9

Buena respuesta encontrada aquí .

Ejecute el siguiente sql:

select x.sid
      ,x.serial#
      ,x.username
      ,x.sql_id
      ,x.sql_child_number
      ,optimizer_mode
      ,hash_value
      ,address
      ,sql_text
from   v$sqlarea sqlarea
      ,v$session x
where  x.sql_hash_value = sqlarea.hash_value
and    x.sql_address    = sqlarea.address
and    x.username       is not null;

Si la salida no se puede leer, cambie LINESIZE (tome desde aquí ):

SET LINESIZE 20000

Si el sql anterior no funciona, es posible que deba iniciar sesión como sysdba:

sqlplus '/as sysdba'
Clarkey
fuente
Su enlace a la Buena respuesta está muerto
Gerrat
@Gerrat Actualicé el enlace a un archivo en caché.
Clarkey