Поделиться через


Понимание ошибок компонента Database Engine

Область применения:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Конечная точка аналитики SQL в Microsoft FabricХранилище в Microsoft Fabric

Ошибки, вызванные ядром базы данных Microsoft SQL Server, имеют атрибуты, описанные в следующей таблице.

Атрибут Описание
Номер ошибки Каждое сообщение имеет уникальный номер ошибки.
Строка сообщения об ошибке Сообщение об ошибке содержит диагностические сведения о причине ошибки. Многие сообщения об ошибках имеют подстановочные переменные, в которые заносятся сведения, например имя объекта, вызвавшего ошибку.
Тяжесть Степень серьезности ошибки указывает, насколько она значительна. Ошибки с низкой степенью серьезности, например 1 или 2, являются информационными сообщениями или предупреждениями низкого уровня. Ошибки с высокой степенью серьезности указывают на проблемы, которые должны быть решены как можно быстрее. Дополнительные сведения о степенях серьезности см. в разделе Степени серьезности ошибок компонента Database Engine.
Штат Некоторые сообщения об ошибках могут вызываться в нескольких точках в коде для ядра СУБД. Например, ошибка 1105 может возникнуть при различных условиях. Каждое условие, которое вызывает ошибку, присваивает уникальный код состояния.

При просмотре баз данных, содержащих сведения о известных проблемах, таких как База знаний Майкрософт, можно использовать номер состояния, чтобы определить, совпадает ли обнаруженная ошибка. Например, если статья базы знаний описывает ошибку 1105 с состоянием 2, а получена ошибка 1105 с состоянием 3, ошибка, вероятно, возникла не по той причине, которая описана в статье.

Инженер службы поддержки Майкрософт также может использовать код состояния ошибки, чтобы найти место в исходном коде, где возникает этот код ошибки. Эти данные могут предоставить дополнительные сведения для диагностики проблемы.
Имя процедуры Имя хранимой процедуры или триггера, в которых произошла ошибка.
Номер строки Указывает на инструкцию в пакете, хранимой процедуре, триггере или функции, которая сформировала ошибку.

Все системные и пользовательские сообщения об ошибках в экземпляре СУБД содержатся в представлении каталога sys.messages. Инструкцию RAISERROR можно использовать для передачи ошибок, определяемых пользователем, приложению.

Все API для работы с базами данных, такие как пространство имен Microsoft .NET Framework SQLClient, объекты данных ActiveX (ADO), OLE DB и Open Database Connectivity (ODBC), сообщают о базовых характеристиках ошибок. Эти сведения включают номер ошибки и строку сообщения. Однако не все API-интерфейсы сообщают остальные атрибуты ошибки.

Сведения об ошибке, возникающей в области блока TRY конструкции TRY...CATCH, могут быть получены в коде Transact-SQL с помощью таких функций, как ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY и ERROR_STATE в области соответствующего блока CATCH. Дополнительные сведения см. в разделе TRY...CATCH (Transact-SQL).

Примеры

Пример ниже выполняет запрос представления каталога sys.messages, чтобы вернуть список всех системных и определяемых пользователем сообщений об ошибках в Движке базы данных с текстом на английском языке (1033).

SELECT  
    message_id,  
    language_id,  
    severity,  
    is_event_logged,  
    text  
  FROM sys.messages  
  WHERE language_id = 1033;  

Дополнительные сведения см. в статье sys.messages (Transact-SQL).

См. также

sys.messages (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)