Comment pouvez-vous montrer 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.
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 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;
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 de 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'