Oracle Trace SQL Statements

Per monitorare l’esecuzione di una query eseguita su un DB Oracle,
si può utilizzare la seguente istruzione.

Filtrando eventualmente con il campo module il programma che si sta utilizzando.

SELECT module,   
sql_text,   
username,   
disk_reads_per_exec,   
buffer_gets,   
disk_reads,   
parse_calls,   
sorts,   
executions,   
rows_processed,   
hit_ratio,   
first_load_time,   
sharable_mem,   
persistent_mem,   
runtime_mem,   
cpu_time,   
elapsed_time,   
address,   
hash_value  
FROM    
(SELECT    
  module,     
  sql_text ,     
  u.username ,     
  round((s.disk_reads/decode(s.executions,0,1, s.executions)),2)  disk_reads_per_exec,     
  s.disk_reads ,     
  s.buffer_gets ,     
  s.parse_calls ,     
  s.sorts ,     
  s.executions ,     
  s.rows_processed ,     
  100 - round(100 *  s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio,
  s.first_load_time ,
  sharable_mem ,     
  persistent_mem ,     
  runtime_mem,     
  cpu_time,     
  elapsed_time,     
  address,     
  hash_value    
  FROM sys.v_$sql s, sys.all_users u
  WHERE s.parsing_user_id=u.user_id
    and UPPER(u.username) not in ('SYS','SYSTEM')
  ORDER BY    4 desc)  
WHERE  rownum <= 20; 

Attenzione che in Oracle viene memorizzata l’istruzione SQL che deve essere eseguita, ma i parametri passati alla query non sono mai presenti e non sono tracciabili.

Per maggiori informazioni:
http://stackoverflow.com/questions/55899/how-to-see-the-actual-oracle-sql-statement-that-is-being-executed

This entry was posted in Database, Oracle. Bookmark the permalink.