У меня есть запрос 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);