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


Степени серьезности ошибок компонента 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_addmergefilter (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).

См. также

Справочник

Основные сведения об ошибках компонента Database Engine

sys.messages (Transact-SQL)

Системные функции (Transact-SQL)

TRY...CATCH (Transact-SQL)