Oracle Trace SQL Statements

2012-10-26

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