Как получить необработанный запрос, который пытается выполнить драйвер ODBC? - PullRequest
2 голосов
/ 17 февраля 2009

Я использую C ++ для запроса базы данных SQL Server 2005 с использованием ODBC. Запросы содержат параметры, которые я установил с помощью SQLSetParam (). Я запускаю запросы, вызывая SQLExecute ().

Иногда запрос завершается ошибкой, и мне нужно регистрировать контекст ошибки. Я вызываю SQLError () для получения информации об ошибке, но я также хотел бы зарегистрировать необработанный запрос, который пытался выполнить драйвер ODBC, то есть запрос с расширенными значениями параметров. Кто-нибудь может посоветовать, если есть способ получить к этому доступ?

Контекст - регистрация ошибок в производственной среде. Я не "там", когда происходит ошибка, поэтому я не могу использовать профилировщик или аналогичные инструменты. Вот почему я хочу записать как можно больше информации для последующего анализа.

Ответы [ 3 ]

1 голос
/ 17 февраля 2009

Вы можете включить трассировку ODBC на клиенте через панель управления, но будьте готовы к значительному снижению производительности и чтению некоторых очень больших файлов журнала.

0 голосов
/ 17 февраля 2009

Посмотрите с помощью SQL Profiler, чтобы увидеть, что на самом деле отправляется на сервер?

Наше приложение вызывает SProcs (что несколько отличается), и мы регистрируем все вызовы Sproc и какие параметры были отправлены; затем мы обновляем журнал, возвращая значение из Sproc (чтобы мы могли сообщать о записях журнала, которые НЕ имеют результата возврата, если произошел какой-то катастрофический сбой)

Затем мы можем повторно запустить любой сбойный SProcs с параметрами, которые ему были заданы, чтобы посмотреть, какие результаты мы получим.

Когда мы повторно запускаем их, мы обертываем их

BEGIN TRANSACTION

EXEC MySproc @FOO='BAR', ...

ROLLBACK

чтобы они не вносили никаких изменений в базу данных

0 голосов
/ 17 февраля 2009

Нет. Насколько я понимаю, ODBC работает не так: параметры вообще не «расширяются» и отправляются на сервер отдельно.

Для вашей ситуации с журналированием просто преобразуйте параметры в строки ad-hoc и вставьте их в текст выписки, прежде чем записывать его в файл журнала. Вот как мы это делаем в наших рамках, и это прекрасно работает. Для некоторых типов параметров вы должны решить, предпочитаете ли вы удобочитаемое ведение журнала или возможность копирования и вставки на сервер sql для воспроизведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...