Сообщение об ошибке при выполнении команды DBCC CHECKDB на компьютере, который содержит базу данных SQL Server

В этой статье описывается, как обойти проблему, которая возникает при выполнении DBCC CHECKDB команды на компьютере с SQL Server базой данных.

Исходная версия продукта: SQL Server 2008 г.
Исходный номер базы знаний: 960791

Симптомы

Рассмотрим следующий сценарий.

  • Вы восстанавливаете базу данных Microsoft SQL Server 2008 или SQL Server 2005 из резервной копии.

  • В процессе восстановления возникают ошибки, которые препятствуют восстановлению базы данных.

  • Вы успешно восстановите базу данных из той же резервной копии с помощью параметра CONTINUE_AFTER_ERROR.

В этом сценарии при выполнении команды DBCC CHECKDB на компьютере, содержавшем базу данных SQL Server, появляется сообщение об ошибке следующего вида:

Msg 8967, level 16, State 216, server <name>, Line 2
В DBCC произошла внутренняя ошибка, которая препятствовала дальнейшей обработке. Обратитесь в службу поддержки клиентов.
Результаты DBCC для имени< базы данных>.

Msg 8921, Level 16, State 1, Server <name>, Line 1

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

Кроме того, в журнале ошибок SQL Server может отображаться следующее сообщение:

2007-05-26 07:13:49.21 spid58 DBCC обнаружил страницу с номером LSN больше текущего конца LSN журнала (<LSN>) для внутренней базы данных snapshot. Не удалось прочитать страницу (идентификатор файла:идентификатор страницы), имя базы данных< (идентификатор> базы данных идентификатора базы данных), LSN = (<LSN>), тип = 32, isInSparseFile = 1. Повторите команду DBCC.

Причина

Эта проблема возникает, DBCC CHECKDB если команда не может выполнить необходимые проверки для подтверждения согласованности базы данных. Эти проверки не удалось выполнить по многим причинам. Например, такое поведение может возникнуть при наличии фундаментальных несоответствий в базе данных, таких как несоответствие метаданных или повреждение базы данных snapshot. Дополнительные сведения о конкретной причине этой ошибки можно определить, изучив другое состояние, отображаемое в сообщении об ошибке. В сценарии, описанном в разделе Симптомы, сообщение о состоянии 216 указывает, что DBCC CHECKDB команда считывает страницу из внутреннего snapshot, которая имеет больший номер последовательности журнала (LSN), чем конец LSN журнала. Это может произойти при восстановлении баз данных с помощью параметра CONTINUE_AFTER_ERROR .

Обходной путь

Чтобы обойти эту проблему, используйте подсказку TABLOCK с командой DBCC CHECKDB . Это позволяет DBCC CHECKDB завершить команду без создания сообщения об ошибке.

Дополнительные сведения о указаниях TABLOCK см. на следующем веб-сайте Майкрософт: Hints (Transact-SQL) — Table.