Comment montrez-vous l'exécution SQL sur une base de données Oracle?


26

Comment pouvez-vous afficher le SQL qui s'exécute actuellement sur une base de données Oracle?

Des informations supplémentaires qui pourraient être utiles incluent l'utilisateur, l'identifiant de session, etc.

Réponses:


35

La plupart des informations sont disponibles dans v $ session ... et le texte SQL peut être récupéré à partir de v $ sql ou v $ sqltext_with_newlines ...

Voici une requête que j'utilise souvent qui formate le SQL en vol, la plus longue en haut.

-- 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;

quelle est la signification de In Flight SQL?
toha

En vol = actuellement en cours d'exécution sur une base de données Oracle, ou dans ce cas actuellement disponible dans v $ session et status = 'ACTIVE'
David Mann

9

Bonne réponse trouvée ici .

Exécutez le sql suivant:

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 sortie est illisible, changez le LINESIZE (prenez d' ici ):

SET LINESIZE 20000

Si le SQL ci-dessus ne fonctionne pas, vous devrez peut-être vous connecter en tant que sysdba:

sqlplus '/as sysdba'

Votre lien vers la Bonne réponse est mort
Gerrat

@Gerrat J'ai mis à jour le lien vers une archive en cache.
Clarkey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.