对压缩卷上的 SQL Server 数据库的支持说明

本文介绍压缩驱动器上的 SQL Server 数据库文件存储行为。

原始产品版本:SQL Server
原始 KB 数: 231347

总结

NTFS 或 FAT 压缩卷不支持 SQL Server 数据库,但 SQL Server 2005 及更高版本的特殊情况下除外。 压缩卷不保证扇区对齐的写入,在一些情况下保证事务性恢复是必需的。

对于 SQL Server 2005 及更高版本,压缩驱动器上的数据库文件存储的行为如下所示:

  • 如果数据文件属于只读文件组,则允许该文件。

  • 如果数据文件属于只读数据库,则允许该文件。

  • 如果事务日志文件属于只读数据库,则允许该文件。

  • 如果尝试打开包含压缩驱动器上的文件的读/写数据库,SQL Server 将生成以下错误:

    Msg 5118,级别 16,状态 2,第 1 行文件“<file_name>”已压缩,但不驻留在只读数据库或文件组中。 必须将此文件解压缩。

有关 SQL Server 2008 中只读数据库和只读文件组的排除项的详细信息,请转到以下 MSDN 网站:

只读文件组和压缩

注意

本主题也适用于 SQL Server 2012 及更高版本。

详细信息

尽管在压缩卷上可以实际添加 SQL Server 数据库,但我们不建议这样做,也不支持它。 这一点的根本原因包括:

  • 性能

    压缩卷上的数据库可能会导致显著的性能开销。 根据 I/O 的卷以及读取与写入的比例,量会有所不同。 然而,在某些条件下观察到超过500%的退化。

  • 数据库恢复

    数据库的可靠事务恢复需要扇区一致的写入,压缩卷不支持此方案。 第二个问题涉及内部恢复空间管理。 SQL Server 在数据库文件中内部保留预先分配的空间以供回滚。 压缩卷上可能会收到 预分配文件上的空间 不足错误,这会导致成功恢复。

在某些情况下,SQL Server 备份到压缩卷或压缩文件夹并不成功。 出现此问题时,会收到以下错误消息之一。

  • 在 Windows Vista 和更高版本的 Windows 中

    STATUS_FILE_SYSTEM_LIMITATION由于文件系统限制而无法完成请求的操作
    操作系统错误 665(由于文件系统限制而无法完成请求的操作)

  • 在早期版本的 Windows 中

    STATUS_INSUFFICIENT_RESOURCES系统资源不足,无法完成所请求的服务操作系统错误 1450(系统资源不足,无法完成请求或 33(进程无法访问文件,因为另一个进程锁定了文件的一部分)。

有关此问题的详细信息,请参阅 NTFS 卷中的严重碎片文件可能无法超过特定大小

注意

  • 知识库文章 中讨论的 Windows Vista 及更高版本的 Windows 修补程序967351 可能无法解决 SQL Server 备份未成功到压缩卷或压缩文件夹的问题。 但是,此修补程序有助于调解问题。
  • 应用知识库文章 967351中讨论的修补程序后,必须使用参数设置启用 /L 压缩的驱动器的格式。 使用 /L 参数设置启用压缩的驱动器的格式时,每个文件记录段的字节数从 1,024 字节增加到 4,096 字节。

SQL Server 备份到压缩卷可以节省磁盘空间。 但是,在备份操作期间,它们可能会增加 CPU 使用率。 我们始终建议使用 BACKUP 校验和设施来帮助保证数据完整性。

SQL Server 要求系统支持保证传送到稳定介质,如 SQL Server I/O 可靠性计划要求中所述

有关 SQL Server 数据库引擎的输入和输出要求的详细信息,请参阅Microsoft SQL Server 数据库引擎输入/输出要求