it-swarm.asia

Bagaimana Anda menunjukkan eksekusi SQL pada database Oracle?

Bagaimana Anda bisa menunjukkan SQL yang sedang dijalankan pada Oracle db?

Informasi tambahan yang berguna akan mencakup pengguna, id sesi, dll.

27
Clarkey

Sebagian besar info tersedia dalam sesi v $ ... dan Teks SQL dapat diambil dari v $ sql atau v $ sqltext_with_newlines ...

Berikut ini pertanyaan yang sering saya gunakan dalam format In-flight SQL, paling lama berjalan di atas.

-- 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;
35
David Mann

Jawaban yang bagus ditemukan di sini .

Jalankan sql berikut:

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;

Jika output tidak dapat dibaca, ubah LINESIZE (ambil dari di sini ):

SET LINESIZE 20000

Jika sql di atas tidak berfungsi, Anda mungkin harus masuk sebagai sysdba:

sqlplus '/as sysdba'
9
Clarkey