Oracleデータベースで実行されているSQLをどのように表示しますか?


26

Oracleデータベースで現在実行中のSQLを表示するにはどうすればよいですか?

役に立つ追加情報には、ユーザー、セッションIDなどが含まれます。

回答:


35

ほとんどの情報はv $ session ...で利用でき、SQL Textはv $ sqlまたはv $ sqltext_with_newlinesから取得できます...

以下は、実行時間が最も長い実行中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

実行中=現在Oracleデータベースで実行中、またはこの場合は現在v $ sessionおよび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キャッシュアーカイブへのリンクを更新しました。
クラキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.