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.

Clarkey
la source

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;
David Mann
la source
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'
Clarkey
la source
Votre lien vers la Bonne réponse est mort
Gerrat
@Gerrat J'ai mis à jour le lien vers une archive en cache.
Clarkey