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


Степени серьезности ошибок компонента Database Engine

Если ошибка возникла в компоненте SQL Server Database Engine, серьезность ошибки указывает на тип проблемы, с которой столкнулся сервер SQL Server.

Уровни серьезности

В следующей таблице описаны уровни серьезности ошибок, формируемых компонентом SQL Server Database Engine.

Степень серьезности

Описание

0-9

Информационные сообщения, возвращающие сведения о состоянии или оповещающие о несерьезных ошибках. Компонент Database Engine не формирует системные ошибки с уровнем серьезности от 0 до 9.

10

Информационные сообщения, возвращающие сведения о состоянии или оповещающие о несерьезных ошибках. Для обеспечения совместимости компонент Database Engine перед возвратом сведений об ошибке в вызвавшее приложение преобразует уровень серьезности 10 в уровень 0.

11-16

Ошибки, которые могут исправляться пользователем.

11

Данный объект или сущность не существует.

12

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

13

Указывает ошибки взаимоблокировки транзакций.

14

Указывает ошибки, связанные с безопасностью, например запрет на разрешение.

15

Обозначает синтаксические ошибки в команде Transact-SQL.

16

Обозначает общие ошибки, которые могут исправляться пользователем.

17-19

Обозначаются программные ошибки, которые не могут исправляться пользователем. Сообщите администратору системы о данной проблеме.

17

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

18

Обозначает проблему в программном обеспечении компонента Database Engine, но при этом инструкция завершает выполнение, и соединение с экземпляром Database Engine сохраняется. Необходимо сообщить системному администратору о каждом случае возникновения ошибки со степенью серьезности 18.

19

Обозначает превышение предельного значения неконфигурируемого компонента Database Engine и прерывание обработки текущего пакета. Сообщения об ошибке со степенью серьезности 19 и выше останавливают выполнение текущего пакета. Ошибки со степенью серьезности 19 происходят редко и должны устраняться системным администратором или основной службой технической поддержки. При возникновении ошибок со степенью серьезности 19 обратитесь к системному администратору. Сообщения об ошибках со степенью серьезности от 19 до 25 записываются в журнал ошибок.

20-24

Обозначаются системные проблемы и критические ошибки, означающие, что задача Database Engine, выполнявшая инструкцию или пакет, уже не работает. Задача записывает сведения о том, что произошло, и затем прекращает работу. В большинстве случаев соединение приложения с экземпляром Database Engine может также быть прервано. В этом случае приложение, возможно, не сможет вновь выполнить подключение (в зависимости от проблемы).

Сообщения об ошибках этого диапазона могут влиять на все процессы, обращающиеся к данным в одной и той же базе данных, и могут указывать на то, что база данных или объект повреждены. Сообщения об ошибках со степенью серьезности от 19 до 24 записываются в журнал ошибок.

20

Обозначает, что при выполнении инструкции возникла проблема. Так как проблема повлияла только на текущую задачу, маловероятно, что повреждена база данных.

21

Обозначает, что возникла проблема, влияющая на все задачи в текущей базе данных, но маловероятно, что повреждена база данных.

22

Обозначает, что таблица или индекс, указанные в сообщении, повреждены из-за программной проблемы или проблемы оборудования.

Ошибки степени серьезности 22 происходят редко. При возникновении такой ошибки запустите инструкцию DBCC CHECKDB, чтобы определить, не повреждены ли другие объекты в базе данных. Проблема может быть ограничена только буферным кэшем и не затрагивать сам диск. В этом случае она может быть решена перезапуском экземпляра Database Engine. Чтобы продолжить работу, необходимо повторно подключится к экземпляру Database Engine; при необходимости для решения проблемы используйте инструкцию DBCC. В некоторых случаях может потребоваться восстановление базы данных.

Если перезапуск экземпляра Database Engine не решает проблемы, значит, она связана с диском. Иногда удаление объекта, указанного в сообщении об ошибке, может решить проблему. Например, если в сообщении указывается, что экземпляр Database Engine нашел в некластеризованном индексе строку с длиной 0, удалите и вновь создайте индекс.

23

Обозначает, что из-за проблем в оборудовании или программном обеспечении целостность всей базы данных находится под вопросом.

Ошибки степени серьезности 23 происходят редко. При возникновении такой ошибки запустите инструкцию DBCC CHECKDB, чтобы определить экстент повреждения. Проблема может быть ограничена только кэшем, и не затрагивать сам диск. В этом случае она может быть решена перезапуском экземпляра Database Engine. Чтобы продолжить работу, необходимо повторно подключится к экземпляру Database Engine; при необходимости для решения проблемы используйте инструкцию DBCC. В некоторых случаях может потребоваться восстановление базы данных.

24

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

Серьезность пользовательских сообщений об ошибках

Процедура sp_addmessage может использоваться для добавления пользовательских сообщений об ошибках с уровнем серьезности от 1 до 25 в представление каталога sys.messages. Эти пользовательские сообщения об ошибках могут использоваться инструкцией RAISERROR. Дополнительные сведения см. в разделе sp_addmessage (Transact-SQL).

Инструкция RAISERROR может использоваться для создания определяемых пользователем сообщений с уровнем серьезности от 1 до 25. Инструкция RAISERROR может либо ссылаться на определяемое пользователем сообщение, находящееся в представлении каталога sys.messages, либо динамически создавать сообщение. Если при формировании ошибки используется пользовательское сообщение об ошибках, хранимое в представлении sys.messages, то уровень серьезности, указанный в инструкции RAISERROR, переопределяет уровень серьезности, указанный в представлении sys.messages. Дополнительные сведения см. в разделе RAISERROR (Transact-SQL).

Серьезность ошибки и конструкция TRY…CATCH

Конструкция TRY…CATCH перехватывает все ошибки исполнения с уровнем серьезности, большим 10, которые не прерывают соединение с базой данных.

Ошибки с уровнем серьезности от 0 до 10 являются информационными сообщениями и не вызывают выхода процесса выполнения из блока CATCH конструкции TRY…CATCH.

Ошибки, приводящие к прерыванию соединения с базой данных и обычно имеющие уровень серьезности от 20 до 25, не обрабатываются блоком CATCH, так как при разрыве соединения выполнение прерывается.

Дополнительные сведения см. в разделе TRY...CATCH (Transact-SQL).

Определение серьезности ошибки

Чтобы определить серьезность ошибки, инициирующей выполнение блока CATCH конструкции TRY…CATCH, может использоваться системная функция ERROR_SEVERITY. Если вызов происходит не из блока CATCH, функция ERROR_SEVERITY возвращает значение NULL. Дополнительные сведения см. в разделе ERROR_SEVERITY (Transact-SQL).