对压缩卷上的 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 数据库引擎输入/输出要求