Como encontro os parâmetros de consulta para uma instrução preparada em um arquivo oracle .trc?

1

Eu tenho uma consulta oracle gerando um erro 3137, e o arquivo de rastreamento contém a consulta. Por exemplo:

select x from y where z = :1

Acho que ajudaria a isolar o problema se eu pudesse determinar o valor específico de: 1, no entanto, o arquivo 4.7M não parece oferecer essa informação.

Esta informação é armazenada no arquivo trc?

Este é o oracle 11g rodando no redhat.

    
por Nathan Feger 11.01.2011 / 17:48

3 respostas

1

Não tenho certeza se o arquivo .trc descrito aqui é feito da mesma maneira que o seu, mas isso pode ajudá-lo.

Essencialmente, em algum lugar lá, deve haver uma seção de Binds, que mostra quais valores foram ligados a isso: 1 variável. O artigo não faz um bom trabalho de explicar como saber quais ligações foram para quais consultas, uma vez que o exemplo tinha apenas uma consulta (e não consigo entender isso). Ignore o sort|uniq que eles usaram no final para mostrar que sempre foi a mesma consulta repetidamente, e você deve obter resultados como

Bind#0
  value=55

ou qualquer outra coisa.

    
por 11.01.2011 / 18:28
1

Vale a pena conferir o Analisador de traços se você tiver um contrato de suporte da Oracle.

    
por 12.01.2011 / 05:39
0

Origem do problema

Se o arquivo de rastreio (.trc) estiver ausente Valores da Variável de Ligação (ou Valores de parâmetro em um OracleCommand no ODP.NET, por exemplo), isso se deve à maneira como o rastreio foi iniciado. / p>

Se você usar um dos seguintes comandos como Usando ferramentas de rastreamento de aplicativo estados da página:

ALTER SESSION SET SQL_TRACE = TRUE;

EXEC DBMS_SESSION.set_sql_trace(sql_trace => TRUE);

.. você não está registrando valores de bind!

Solução

Para registrar valores de variáveis de ligação, existem outras maneiras alternativas de iniciar o rastreamento, dependendo da versão do banco de dados e dos pacotes carregados. Se você estiver no Oracle 10g +, a maneira mais fácil é usar o seguinte comando para iniciar o rastreamento:

DBMS_MONITOR.session_trace_enable(waits=>FALSE, binds=>TRUE)

Aqui está a lista completa de comandos disponíveis para iniciar o rastreamento com a gravação de variáveis de ligação (fonte: rastreamento SQL, 10046, trcsess e tkprof no Oracle 10g ):

-- All versions.
ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';

EXEC DBMS_SYSTEM.set_ev(si=>123, se=>1234, ev=>10046, le=>4, nm=>' ');

-- All versions, requires DBMS_SUPPORT package to be loaded.
EXEC DBMS_SUPPORT.start_trace(waits=>FALSE, binds=>TRUE);
EXEC DBMS_SUPPORT.start_trace_in_session(sid=>123, serial=>1234, waits=>FALSE, binds=>TRUE);

-- Oracle 10g
EXEC DBMS_MONITOR.session_trace_enable(waits=>FALSE, binds=>TRUE);

EXEC DBMS_MONITOR.session_trace_enable(session_id =>1234, serial_num=>1234, binds=>TRUE, binds=>TRUE);

EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>'tim_hall', waits=>FALSE, binds=>TRUE);

EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>'db10g', module_name=>'test_api', action_name=>'running', -
> waits=>FALSE, binds=>TRUE);
    
por 28.05.2012 / 12:16