it-swarm.it

Come si mostra l'esecuzione di SQL su un database Oracle?

Come si può mostrare l'SQL attualmente in esecuzione su un db Oracle?

Informazioni aggiuntive che potrebbero essere utili includono l'utente, l'ID sessione ecc.

27
Clarkey

La maggior parte delle informazioni è disponibile in v $ session ... e il testo SQL può essere acquisito da v $ sql o v $ sqltext_with_newlines ...

Ecco una query che uso spesso in formato SQL in volo, la più lunga in esecuzione al top.

-- 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;
35
David Mann

Buona risposta trovata qui .

Eseguire il seguente 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;

Se l'output è illeggibile, cambia LINESIZE (prendi da qui ):

SET LINESIZE 20000

Se il sql sopra non funziona, potrebbe essere necessario accedere come sysdba:

sqlplus '/as sysdba'
9
Clarkey