SQL Server:如何检测和修复 FILESTREAM 数据库损坏?

SQL Server:如何检测和修复 FILESTREAM 数据库损坏?

编码文章call10242025-07-01 23:50:074A+A-

SQL Server 中的 FILESTREAM 功能可以将二进制大型对象 (BLOB) 存储到文件系统上,而不是将它们存储在数据库中。但是,默认情况下不启用此功能。用户需要使用 SQL Server Management Studio (SSMS) 和 SQL Server Configuration Manager 来启用它。启用此功能后,这些文件将存储在 FILESTREAM 文件组中。此时,可以使用 T-SQL 事务访问这些文件。

有时,修改或删除 FILESTREAM 文件夹中的文件或将文件保存到 SQL Server 数据库可能会导致 SQL Server 数据库不一致或损坏。如果 FILESTREAM 文件组已损坏,则数据库将进入“等待恢复”状态。本文将讨论可能导致 SQL Server FILESTREAM 数据库损坏的原因,并了解如何解决损坏和恢复数据库。

SQL Server 中启用 FILESTREAM 数据库损坏的原因

启用 FILESTREAM 的数据库可能会因各种原因而损坏。一些常见原因是:

  • FILESTREAM 将文件引用和元数据存储在数据库中。如果 SQL 数据库本身由于硬件故障、磁盘问题等原因而损坏,则将文件链接到数据库的引用也会变得不一致。
  • FILESTREAM 中的实际数据存储在文件系统上。这些数据可能会因坏扇区、磁盘故障和其他问题而损坏。
  • 如果直接删除或修改数据容器内文件系统文件夹中的文件,则可能会导致文件系统与 SQL Server 不一致,从而导致 FILESTREAM 数据损坏。

如何检测 SQL Server 中启用 FILESTREAM 的数据库的损坏?

可以使用 DBCC CHECKDB 命令检测启用了 FILESTREAM 的 SQL 数据库中的损坏或物理和逻辑一致性问题。它还可以验证表的元数据与 FILESTREAM 文件系统的文件和目录之间的链接级一致性。以下是使用 DBCC CHECKDB 命令检查启用了 filestream 的数据库中的损坏的方法:

DBCC CHECKDB 'database_name';

DBCC CHECKDB 命令可以报告错误,如 7903、7904、7905、7907 等。此类错误表示由于篡改 SQL Server FILESTREAM 文件夹而发生的损坏、不一致或完整性问题。

修复启用 FILESTREAM 的 SQL Server 数据库中损坏的方法

如果启用了 FILESTREAM 的 SQL 数据库已损坏、损坏或无法访问,可以按照以下方法操作。

方法 1:从文件组备份还原

Filestream 数据存储在 FILESTREAM 文件组中。它包含称为数据容器的文件系统目录。如果在 SQL Server 中有文件和文件组备份,则可以轻松地从备份中还原数据库。在此之前,请使用 RESTORE FILELISTONLY 命令确保备份文件包含 FILESTREAM 数据。此命令显示备份中的所有文件。

以下是从 SQL Server 备份还原数据库的步骤:

  • 打开 SSMS,然后在对象管理器中连接到 SQL Server 数据库引擎的相应实例。
  • 单击服务器名称展开服务器树。
  • 接下来,展开‘Databases’选项卡。选择一个用户数据库或展开‘System Database’。
  • 单击‘System Database’,右键单击数据库,单击任务>还原>文件和文件组。
  • 接下来,选择 'From database' 或 'From device' 选项来指定备份集的来源和位置。
  • 在“选择要恢复的备份集区域,选择要恢复的备份。该部分显示所选位置的所有可用备份。
  • 单击“恢复文件和文件组”对话框中“选择页面下方的“选项”页面以选择高级选项。
  • 在 Restore options 面板中,选择以下选项之一:
  • 还原为文件组
  • 覆盖现有数据库
  • 在还原每个备份之前提示
  • 限制对已还原数据库的访问
  • 单击 OK。

这些操作将还原数据库。可以使用以下命令找到 FILESTREAM 组的物理文件夹:

SQL
SELECT name, physical_name, state_desc, type_desc
FROM sys.database_files
WHERE type_desc = 'FILESTREAM'

或者,也可以使用 Transact-SQL 命令还原文件和文件组备份。

方法 2:使用 DBCC CHECKDB 命令

如果备份已过时或不可用,则可以使用 DBCC CHECKDB 命令修复数据库带有REPAIR_ALLOW_DATA_LOSS修复选项。

  • 首先,使用以下命令将数据库设置为 SINGLE_USER 模式:

ALTER DATABASE Dbtesting SET SINGLE_USER

  • 接下来,使用 DBCC CHECKDB 命令修复数据库,如下所示:

DBCC CHECKDB (N ’Dbtesting’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS;

GO

  • 现在,通过执行以下命令将数据库设置为 MULTI_USER 模式

ALTER DATABASE Dbtesting SET MULTI_USER

尽管上述 DBCC CHECKDB 命令可以修复启用了 FILESTREAM 的数据库中与损坏相关的问题,但它具有某些限制。它可能会使数据库处于逻辑不一致的状态。在修复复杂错误时,需要多次使用该命令,这是一个耗时的过程。此外,它还可能在修复数据库时解除分配行或页,从而导致数据丢失。

方法 3:使用专业的 SQL 修复工具

要精确和完整地修复数据库文件,用户可以使用专门的 SQL 修复工具,以便可以快速修复 MDF 文件。使用专业的SQL数据修复工具有助于解决 DBCC CHECKDB 命令报告的 SQL 数据库中所有与损坏相关的错误。这类软件工具拥有直观的用户界面,用户可以轻松执行修复过程。

优秀的 SQL 数据修复工具拥有的主要特点:

  • 修复 MDF 和 NDF 数据库文件,而不会丢失任何数据
  • 恢复所有数据库组件,包括已删除的表、键、索引、触发器和存储过程
  • 支持 SQL Server FILESTREAM 数据类型、XML 数据类型、SQL Server 稀疏列、XML 索引和 SQL Server 列集属性
  • 使用 PAGE 和 ROW 压缩恢复 SQL 表
  • 在保存之前提供可恢复数据库对象的预览
  • 支持数据库对象的选择性恢复
  • 将修复后的数据库保存到新的或实时数据库以及 CSV、HTML 和 XLS 等格式
  • 广泛支持各种 SQL Server 数据库版本
  • 与 Windows 和 Linux 操作系统兼容

方法 4:寻求专业的数据恢复服务

专业的数据恢复服务可以快速可靠地帮助用户恢复受损的数据,同时避免数据状况进一步恶化。遇到数据危机时,第一时间寻求专业的救援,避免自行尝试,是防范人为误操作的明智选择。

总结

启用 FILESTREAM 的数据库损坏可能由于多种原因而发生。我们在上面讨论了如何在 SQL Server 中修复损坏的启用 FILESTREAM 的数据库。您可以轻松地从备份中恢复数据库。但是,如果您的备份无法访问,则可以使用 DBCC CHECKDB 命令修复数据库。但是,此方法需要您的时间和精力,并且不能保证完整的数据库恢复。因此,为了实现无缝恢复过程,请使用专业人员SQL 修复工具,例如 MS SQL 的 Stellar Repair。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4