Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottenere informazioni di traccia per le variabili di associazione passate tramite OracleParameter in ODP.NET?

Come una delle opzioni, puoi attivare la traccia sql con il dump delle variabili di collegamento impostando 10046 evento di livello 12 o 4 per una sessione, manualmente o automaticamente (in un trigger di accesso per un utente, ad esempio):

alter session set events '10046 trace name context forever, level 12';

Dopo che il file di traccia verrà generato in una directory specificata da user_dump_dest parametro.

SQL> show parameter user_dump_dest;

NAME                                 TYPE        VALUE                          
------------------------------------ ----------- ------------------------------ 
user_dump_dest                       string      D:\...\diag\rdbms\cdb\cdb 
                                                 \trace   

Ecco un esempio:

SQL> alter session set events '10046 trace name context forever, level 12';
  2 variable var number;
  3 exec :var := 1234567;     -- our bind variable
  4 select 1 from dual where 1234567 = :var ;

Tra le altre informazioni presentate in un file di traccia appena generato, potremmo trovare informazioni sulla query, sulle variabili di associazione e sui suoi valori:

Potresti anche, a partire da Oracle 10ge versioni successive, eseguire query su v$sql_bind_capture visualizzazione dinamica delle prestazioni per ottenere informazioni sulle variabili di associazione e sui relativi valori:

select t.parsing_user_id
     , t.sql_fulltext         -- text of a query
     , bc.name                -- name of a bind variable
     , bc.value_string        -- value of a bind variable
  from v$sqlarea t
  join v$sql_bind_capture bc
    on (bc.sql_id = t.sql_id)
  join v$session s
    on (s.user# = t.parsing_schema_id)
  where s.username = user
    and bc.name in (':VAR') -- name of a bind variable(s), 
                            -- value(s) of which we want to know

Risultato:

PARSING_USER_ID   SQL_FULLTEXT                      NAME    VALUE_STRING   
 ------------------------------------------------------------------------ 
           103   select 1 from dual where 1 =:var  :VAR     1234567