MSSQLSERVER_3056

适用于:SQL Server

详细信息

属性
产品名称 SQL Server
事件 ID 3056
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 DMPDB_INVALID_FSDATA
消息正文 备份操作检测到 FILESTREAM 容器中存在意外的文件。 备份操作将继续,并将包括文件 '%ls'。

说明

如果文件存在于 SQL Server 未创建的 FILESTREAM 容器(文件夹)下,则会引发错误 3056。 备份操作将包含该文件,但这将导致数据库中文件流组件的状态不一致。

警告

FILESTREAM 容器是由 SQL Server 管理的文件夹。 请勿在 FILESTREAM 文件夹中添加或删除文件

用户操作

错误消息包括意外文件的名称。 调查此文件在此文件夹中的结束方式。

  1. 终止备份并确保不会覆盖或丢失此数据库的以前的备份

  2. 针对备份失败并出现错误 3056 的数据库运行完整的 DBCC CHECKB。 请勿与physical_only一起使用

  3. 全面查看 DBCC CHECKB 输出;错误可能在不同的阶段被检测到,并且对于同一对象,可能会有数百行相距

    • CHECKDB 输出的最后一行将提供错误的摘要计数。 确保已找到每个计数错误的各个消息
    • 你是否发现类似于底部的错误: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. 如果报告的唯一错误为 79087906,则可以找到错误中报告的实际文件。 错误可能如下所示,例如:

    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 文件夹(s) 提供适当的权限
    • 了解并确保没有应用程序在 FILESTREAM 文件夹中创建文件
  10. 运行新的 DBCC CHECKDB 并确保它不会引发任何错误

  11. 如果存在任何其他 CHECKDB 错误(包括 7903,7904,7905,7907,7907),则 SQL Server FILESTREAM 文件夹已损坏或篡改,而只是无效添加外国文件。 这种情况不可手动修复

    • 检查硬件是否存在任何问题并解决问题
    • 确保系统受到恶意软件的保护。 请注意,FILESTREAM 数据文件应从防病毒软件扫描中排除。 请参阅 有关提高 FILESTREAM 性能的建议和指南
    • 然后从正常的数据库备份还原

运行 DBCC CHECKDB

如果运行 DBCC CHECKDB,可能会报告错误 79087906,但无法修复它。

从备份还原

如果问题与硬件无关,并且已知干净备份可用,请从备份还原数据库