Назад | Перейти на главную страницу

Как мне найти параметры запроса для подготовленного оператора в файле Oracle .trc?

У меня есть запрос Oracle, генерирующий ошибку 3137, и файл трассировки содержит запрос. Например:

select x from y where z = :1

Я думаю, что помогло бы изолировать проблему, если бы я мог определить конкретное значение: 1, однако файл 4,7M, похоже, не предлагает эту информацию.

Эта информация хранится в файле trc?

Это Oracle 11g, работающий на Redhat.

Стоит проверить Анализатор трассировки если у вас есть контракт на поддержку Oracle.

Не уверен, что файл .trc описано здесь сделан так же, как и ваш, но это может вам помочь.

По сути, где-то там должен быть раздел привязок, который показывает, какие значения были привязаны к этой: 1 переменной. В статье не очень хорошо объясняется, как определить, какие привязки к каким запросам были отправлены, поскольку в примере был только один запрос (и я не могу понять это, глядя на него). Игнорировать sort|uniq бит, который они использовали в конце, чтобы показать, что это всегда один и тот же запрос снова и снова, и вы должны получить такие результаты, как

Bind#0
  value=55

или что угодно.

Источник проблемы

Если файл трассировки (.trc) отсутствует Привязать значения переменных (или значения параметров в OracleCommand в ODP.NET, например) это связано с тем, как была запущена трассировка.

Если вы используете одну из следующих команд в качестве Использование инструментов отслеживания приложений на странице указано:

ALTER SESSION SET SQL_TRACE = TRUE;

EXEC DBMS_SESSION.set_sql_trace(sql_trace => TRUE);

..ты не запись значений привязки!

Решение

Для записи значений переменных связывания существуют другие, альтернативные способы запуска трассировки в зависимости от версии вашей базы данных и загруженных пакетов. Если вы используете Oracle 10g +, самый простой способ - запустить трассировку с помощью следующей команды:

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

Вот полный список доступных команд для запуска трассировки с записью привязанных переменных (источник: Трассировка SQL, 10046, trcsess и tkprof в 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);