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


MSSQLSERVER_5180

Область применения: SQL Server

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 5180
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя DSK_BAD_FCB_FILEID
Текст сообщения Невозможно открыть файл FCB из-за недопустимого идентификатора %d в базе данных "%.*ls". Проверьте местоположение этого файла. Выполните инструкцию DBCC CHECKDB.

Описание

Запрос или операция могут завершиться ошибкой 5180, если на ядро СУБД SQL Server ссылается недопустимый идентификатор файла. Пример:

Сообщение 5180, уровень 22, состояние 1, строка 1
Невозможно открыть файл FCB из-за недопустимого идентификатора %d в базе данных "%.*ls". Проверьте местоположение этого файла. Выполните инструкцию DBCC CHECKDB.

Так как ошибка имеет уровень серьезности 22, сеанс пользователя будет отключен. Это сообщение об ошибке записывается в журнал ошибок SQL Server и журнал событий приложения Windows с eventID = 5180.

Возможные причины

SQL Server ядро СУБД ссылается на идентификатор файла во многих различных ситуациях в основном при ссылке на идентификатор страницы (так как идентификатор файла является первой частью идентификатора страницы). Если по какой-либо причине идентификатор файла, на который ссылается ссылка, равен < 0 или не является допустимым идентификатором файла в базе данных (для допустимых идентификаторов файлов, перечисленных в представлениях системного каталога, таких как sys.database_files), может возникнуть ошибка 5180.

Одной из возможных причин является то, что хранимый идентификатор файла недопустим. Так как перенаправляемая запись в строке ссылается на другую страницу, при обращении к этой странице может возникнуть ошибка 5180, если идентификатор файла недопустим. Это приведет к ошибке повреждения базы данных на странице с перенаправляемой записью. (В данном примере DBCC CHECKDB выдаст сообщение 8993.)

Другой пример — недопустимый идентификатор файла как часть идентификатора страницы, который хранится в заголовке страницы для следующего или предыдущего идентификатора страницы. Это поле используется для связывания ряда страниц, например в кластеризованном индексе. Если идентификатор файла является недопустимым для предыдущей или следующей страницы, то, когда ядру необходимо сослаться на него для перехода к следующей или предыдущей странице, может возникнуть ошибка 5180. (В данном примере DBCC CHECKDB выдает сообщение 8981.)

Если проблема не является недопустимым идентификатором файла из-за поврежденного хранящегося идентификатора страницы, проблема может находиться в ядро СУБД SQL Server.

Действие пользователя

При возникновении этой ошибки следует выполнить DBCC CHECKDB для базы данных, как указано в сообщении. При обнаружении ошибок следует выполнить восстановление из известной удачной резервной копии. Если восстановление из резервной копии невозможно, другой вариант — воспользоваться параметром восстановления команды DBCC CHECKDB, как рекомендуется в ее выходных данных. В большинстве случаев восстановление после ошибки этого типа приводит к потере данных. Дополнительные сведения об использовании и причинах повреждения базы данных см. в статье: устранение ошибок согласованности баз данных, сообщаемых DBCC CHECKDB.

Если DBCC CHECKDB не сообщает об ошибках, но проблема повторяется, обратитесь за помощью в службу технической поддержки Майкрософт. Будьте готовы предоставить запрос, который вызывает ошибку 5180. Сведения о том, как определить запрос, при выполнении которого произошла ошибка, см. в разделе Дополнительные сведения.

Дополнительные сведения

Блок управления файлами (FCB) — это внутренняя структура памяти, которая отслеживает важные сведения о файле, связанном с базой данных. Идентификатор файла однозначно определяет FCB для базы данных. Если ядро сервера пытается сослаться на недопустимый идентификатор файла, структуру FCB найти не удается, из-за чего происходит ошибка 5180.

Чтобы узнать, при выполнении какого запроса возникла ошибка, можно использовать указанные ниже методы.

  • Для SQL Server 2008 и более поздних версий убедитесь, что system_health сеанс содержит запись об ошибке, которая должна содержать текст запроса. Дополнительные сведения о сеансе system_health см. в статье о поддержке SQL Server 2008: сеанс system_health.
  • Используйте SQL Server Profiler и зафиксировать события исключений SQL:BatchStartingRPC:Starting, а также события исключений. Найдите запрос, предшествующий событию исключения 5180 для сеанса, связанного с событием исключения.