2009-05-01 2 views
5

Я использовал трассировку на сервере Sql Server 2005 с использованием профилировщика и вам нужно выяснить, что вызывает сообщения об ошибках.Как узнать, что вызвало ошибки, обнаруженные в трассировщике SQL Server?

Я использовал "пустой" шаблон и выбраны все столбцы из следующих событий:

  • Exception
  • Обмен Spill событий
  • Execution Предупреждения
  • Хэш Предупреждения
  • Missing Column Статистика
  • Отсутствует Присоединиться к предикату

Я заметил, некоторые из этих ошибок в колонке "TextData":

  • Ошибка: 156, уровень опасности: 16, Состояние: 0
  • Ошибка: 208, уровень опасности: 16, Состояние: 0

Я искал ошибки (неверный синтаксис, недопустимое имя объекта), но как я могу узнать, что вызывает их или процедура?

ответ

7

Не беспокойтесь о 208 ошибках. 208 «Объект не найден». Профайлер подбирает их из-за того, что называется «отложенным разрешением имени».

Проделайте следующую процедуру.

CREATE PROCEDURE Demo AS 
    CREATE TABLE #Temp (ID int) 
    INSERT INTO #Temp VALUES (1) 
    SELECT ID FROM #Temp 
GO 

Это прок будет работать нормально без каких-либо ошибок, однако, если у вас есть профайлер след работает, вы увидите один или два экземпляра ошибки 208. Это потому, что таблица #Temp не существует, когда прок начинается, когда код анализируется и привязывается. Процесс привязки к базовым объектам не выполняется.

После запуска таблицы создания другие операторы перекомпилируются и привязаны к правильной таблице и запускаются без ошибок.

Единственное место, где вы увидите, что ошибка отложенного разрешения находится в профилировщике.

+0

SPID, кажется, единственный способ сопоставить 208 строк с SP: Starting и SP: Completed rows. Используя это, это кажется правильным, эти 208-ые всегда появляются непосредственно перед вызовом хранимой процедуры, использующей временные таблицы. –

+0

IIRC, есть элемент Connect для удаления их из Profiler, потому что они часто неверно истолковываются и потому, что они скрывают реальные 208 ошибок. – GilaMonster

1

в sql 2005 вы не можете. вам нужно будет запустить трассировку профилировщика SQL: StmtStarting, SQL: StmtCompleted, сообщения об ошибках пользователя и событиях с событиями с текстом, transactionId, EventSequence и другие столбцы, которые вам нужны, чтобы получить картину того, что происходит.

+0

Я добавил SQL: StmtStarting и SQL: StmtCompleted, но получил только «USE DBname». Я переключился на SP: Запуск и SP: Завершен и получил команды. –

Смежные вопросы