Oracle 데이터베이스에서 SQL 실행을 어떻게 표시합니까?


26

Oracle DB에서 현재 실행중인 SQL을 어떻게 표시 할 수 있습니까?

유용한 추가 정보에는 사용자, 세션 ID 등이 포함됩니다.

답변:


35

대부분의 정보는 v $ session ...에서 사용할 수 있으며 SQL 텍스트는 v $ sql 또는 v $ sqltext_with_newlines ...에서 가져올 수 있습니다.

다음은 In-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의 의미는 무엇입니까?
토하

기내 = 현재 Oracle 데이터베이스에서 실행 중이거나이 경우 현재 v $ session and status = 'ACTIVE'에서 가능
David Mann

9

여기에 좋은 답변이 있습니다 .

다음 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'

좋은 답변에 대한 귀하의 링크는 죽었습니다
Gerrat

@ Gerrat 캐시 된 아카이브에 대한 링크를 업데이트했습니다.
Clarkey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.