您如何显示当前在oracle数据库上执行的SQL?

有用的其他信息包括用户,会话ID等。

#1 楼

大多数信息都可以在v $ session中使用...并且可以从v $ sql或v $ sqltext_with_newlines中获取SQL文本...

这是我经常使用的查询格式-flight SQL,运行时间最长。

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


评论


In Flight SQL是什么意思?

– toha
19 Mar 26 '19在2:59

进行中=正在运行在oracle数据库上,或者在这种情况下当前在v $ session中可用,并且status ='ACTIVE'

–大卫·曼(David Mann)
19年4月9日在17:49

#2 楼

在这里找到好的答案。

执行以下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;


如果输出不可读,请更改LINESIZE(从此处获取):

SET LINESIZE 20000


如果上述sql无法正常工作,则可能需要以sysdba身份登录:

sqlplus '/as sysdba'


评论


您与“好答案”的链接已死

–格拉特
18年5月4日在17:44

@Gerrat我将链接更新为缓存的存档。

–Clarkey
18年5月8日在9:18