MSSQLSERVER_3056

适用于:SQL Server

详细信息

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

说明

如果 FILESTREAM 容器 (文件夹) 下存在SQL Server创建的文件,则会引发错误 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 文件夹 ()
    • 了解并确保没有应用程序在 FILESTREAM 文件夹中创建文件 ()
  10. 运行新的 DBCC CHECKDB 并确保它不会引发任何错误

  11. 如果存在任何其他 CHECKDB 错误,包括 7903,7904,7905,7907,则表示除了添加外部文件无效之外,SQL Server FILESTREAM 文件夹已损坏或篡改。 无法手动修复这种情况

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

运行 DBCC CHECKDB

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

从备份还原

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