MSSQLSERVER_3056

Применимо к:SQL Server

Сведения

Атрибут значение
Название продукта SQL Server
Идентификатор события 3056
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя DMPDB_INVALID_FSDATA
Текст сообщения При резервном копировании в контейнере FILESTREAM обнаружен непредвиденный файл. Операция резервного копирования будет продолжена, копия будет содержать файл "%ls".

Пояснение

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

Предупреждение

Контейнер FILESTREAM — это папка, управляемая SQL Server. Не добавляйте или не удаляйте файлы в папке FILESTREAM

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

Сообщение об ошибке содержит имя неожиданного файла. Узнайте, как этот файл оказался в этой папке.

  1. Завершение резервного копирования и обеспечение того, чтобы предыдущие резервные копии для этой базы данных не были перезаписаны или потеряны.

  2. Запустите полную проверку DBCC для базы данных, для которой сбой резервной копии с ошибкой 3056. Не используйте physical_only

  3. Тщательно просмотрите выходные данные DBCC CHECKB; Ошибки могут обнаруживаться на разных этапах и быть сотнями строк для одних и того же объекта

    • Последние строки выходных данных CHECKDB дают сводное количество ошибок. Убедитесь, что вы нашли отдельное сообщение для каждой из подсчитаемых ошибок.
    • Вы найдете ошибку, аналогичную этой, в нижней части: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. Если сообщается только об ошибках 7908 или 7906, можно найти фактические файлы, сообщаемые в ошибке. Ошибки могут выглядеть следующим образом:

    Msg 7906, Level 16, State 1, Line 8
    Database error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" is not a valid FILESTREAM file in container ID 65537.
    Msg 7908, Level 16, State 1, Line 8
    Table error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" in the rowset directory ID 3068163f-7398-4ae7-843c-67672e29c37e is not a valid FILESTREAM file in container ID    65537.
    

    Заметка

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

  5. Чтобы найти файлы, выполните следующую команду, чтобы найти физическую папку группы FILESTREAM.

    SELECT name, physical_name, state_desc, type_desc 
    FROM sys.database_files
    WHERE type_desc = 'FILESTREAM'
    
  6. В проводнике Windows откройте вложенную папку, указанную в ошибке 7906 или 7908 (например, \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)

  7. Затем найдите файл, указанный в сообщении об ошибке (например, NO_USER_FILE_SHOULD_BE_HERE.txt), и создайте копию этого файла во временный каталог в качестве резервной копии.

  8. Убедившись, что у вас есть копия, вы можете удалить файл из папки.

  9. Выполните действия, чтобы понять, почему и как этот файл был добавлен в эту системную папку и предпринять шаги, чтобы предотвратить дальнейшее вхождение

    • Убедитесь, что необходимые разрешения доступны для доступа пользователей к этой папке FILESTREAM.
    • Понимание и проверка того, что приложения не создают файлы в папках FILESTREAM.
  10. Запустите новую базу данных DBCC CHECKDB и убедитесь, что она не вызывает никаких ошибок.

  11. Если существуют другие ошибки CHECKDB, включая 7903 7904 7905 7907, то произошла ошибка или изменение папки FILESTREAM SQL Server за пределами простого недопустимого добавления внешних файлов. Эта ситуация недоступна вручную

    • Проверьте оборудование для любых проблем и устраните их
    • Убедитесь, что система защищена от вредоносных программ. Обратите внимание, что файлы данных FILESTREAM должны быть исключены из антивирусного сканирования программного обеспечения. Рекомендации и рекомендации по улучшению производительности FILESTREAM
    • Затем восстановление из работоспособной резервной копии базы данных

Запуск DBCC CHECKDB

Если вы запускаете DBCC CHECKDB, он может сообщить об ошибке 7908 или 7906, но не удается восстановить ее.

Восстановление из резервной копии

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