修复:在 SQL Server 2008 R2 或 SQL Server 2008 中,数据库数据文件可能被错误地标记为稀疏,即使物理文件在文件系统中标记为不稀疏

错误 #: 147332 (内容维护)VSTS: 699009

Microsoft 将分发 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2008年修复作为一个可下载的文件。修补程序是累积性的因为每个新版本包含的所有修补程序和附带上一个 SQL Server 2008 R2 或 SQL Server 2008年的所有安全修补程序的修补都程序版本。

症状

Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2008年可能数据库数据文件标记为稀疏即使在文件系统中的物理文件标记为稀疏不。

备注:

  • 若要确定是否将数据库数据文件标记为稀疏的 SQL Server 元数据中,运行下面的语句,然后检查Is_Sparse列是否设置为非零值在结果集:

    Use 

    <database name>select is_sparse , physical_name from sys.database_files

  • 要查询文件系统中的物理文件的状态,运行下面的 Windows 命令后数据库处于脱机状态︰

    fsutil sparse queryflag 
    <files path>\<database file>

    如果您收到下面的输出,则将文件标记为稀疏文件系统中︰

    此文件被设为稀疏。

  • 必须将 SQL Server 元数据和文件系统元数据标记为稀疏的只有数据库的数据文件是数据库快照的一部分。

原因

此问题是由于文件系统错误地将整个数据库数据稀疏文件标记后最初被标记为稀疏删除备选流。DBCC CHECKDB命令结束时,将删除备用流。

备注:

  • 内部数据库快照的使用是 NTFS 功能,使用DBCC CHECKDB系列的命令。当您运行DBCC命令时,数据库引擎创建的数据库快照备选流,并将其置于事务一致的状态。DBCC命令针对备选流运行检查。备选流DBCC命令完成之后将被丢弃。

  • 在 Windows 音量级别备份使用来备份数据库文件的 Windows Server 2003 引入了引起此问题的设计。SQL Server 元数据在系统表中存储一份数据文件的稀疏特性。但是,SQL Server 不会更新的Is_Sparse信息后稀疏特性从文件系统中删除。

  • 之后您从 Windows Server 2003 将数据库迁移到较新版本的 Windows 操作系统的系统,也会发生此问题。

    例如,您将数据库迁移从 Windows Server 2003 到 Windows Server 2008 或 Windows Server 2008 R2。

解决方案

若要解决此问题,SQL Server 2008 R2 中或在 SQL Server 2008年中,应用以下修复程序,,然后使数据库联机。联机数据库,SQL Server 会检查是否物理数据库文件的元数据标记为稀疏文件系统中。如果它被标记为不稀疏,SQL Server 元数据被更新。

注意:若要删除文件系统的稀疏特性,将复制数据库文件,然后使用数据库文件的新副本。有关此过程的详细信息,请访问下面的 MSDN 网站︰

如何从文件系统中删除稀疏特性

累积更新信息

SQL Server 2008 Service Pack 3

此问题的修补程序首次发布的累积更新包 1 为 SQL Server 2008 Service Pack 3。有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰

2617146累计更新 SQL Server 2008 Service Pack 3 包 1注意:因为版本具有累计性,所以每个新修补程序版本包含上一个 SQL Server 2008 修补程序版本随附的所有修补程序和所有安全修复程序。Microsoft 建议您考虑应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

SQL Server 2008年生成 SQL Server 2008 Service Pack 3 发布后发布的2629969为特定的 SQL Server Service Pack 创建 Microsoft SQL Server 2008 修补程序。必须将一个 SQL Server 2008 Service Pack 3 修补程序应用到安装的 SQL Server 2008 Service Pack 3。默认情况下,在下一次 SQL Server service pack 中包含任何 SQL Server service pack 中提供的修补程序。

SQL Server 2008 Service Pack 1

此问题的修补程序首次发布的累积更新包 16 为 SQL Server 2008 Service Pack 1。有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰

2582282累计更新 SQL Server 2008 Service Pack 1 包 16注意:因为版本具有累计性,所以每个新修补程序版本包含上一个 SQL Server 2008 修补程序版本随附的所有修补程序和所有安全修复程序。Microsoft 建议您考虑应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

SQL Server 2008年生成 SQL Server 2008 Service Pack 1 发布后发布的970365为特定的 SQL Server Service Pack 创建 Microsoft SQL Server 2008 修补程序。必须将一个 SQL Server 2008 Service Pack 1 的修补程序应用到安装的 SQL Server 2008 Service Pack 1。默认情况下,在下一次 SQL Server service pack 中包含任何 SQL Server service pack 中提供的修补程序。

SQL Server 2008 Service Pack 2

此问题的修补程序首次发布的累积更新包 6 为 SQL Server 2008 Service Pack 2。有关此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章 ︰

2582285累计更新 SQL Server 2008 Service Pack 2 包 6注意:因为版本具有累计性,所以每个新修补程序版本包含上一个 SQL Server 2008 修补程序版本随附的所有修补程序和所有安全修复程序。Microsoft 建议您考虑应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

SQL Server 2008年生成 SQL Server 2008 Service Pack 2 发布后发布的2402659为特定的 SQL Server Service Pack 创建 Microsoft SQL Server 2008 修补程序。必须将一个 SQL Server 2008 Service Pack 2 的修补程序应用到安装的 SQL Server 2008 Service Pack 2。默认情况下,在下一次 SQL Server service pack 中包含任何 SQL Server service pack 中提供的修补程序。

SQL Server 2008 R2 CU9

此问题的修补程序首次发布的累积更新包 9 为 SQL Server 2008 R2。有关如何为 SQL Server 2008 R2 中获取此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰

2567713累计更新 SQL Server 2008 R2 包 9注意:由于 Build 是累积性的,因此每个新修补程序版本包含之前的 SQL Server 2008 R2 修补程序版本所包括的所有修订程序和安全修补程序。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

SQL Server 2008 R2 生成 SQL Server 2008 R2 发布后发布的981356

SQL Server 2008 R2 Service Pack 1 CU2

累积更新包 2 中首次发布此问题的修补程序。有关如何获取此累积更新包的 SQL Server 2008 R2 SP1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰

2567714累计更新 SQL Server 2008 R2 Service Pack 1 包 2注意:生成是累积性的因为每个新修补程序版本包含的所有修补程序和附带上一个 SQL Server 2008 R2 SP1 的所有安全修补程序的修补都程序版本。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

SQL Server 2008 R2 生成 SQL Server 2008 R2 Service Pack 1 发布后发布的2567616

修补程序信息

可以从 Microsoft 获得受支持的修复程序。然而,此修补程序仅用于解决本文中描述的问题。此修复程序仅适用于遇到本文中描述的问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。

如果此修复程序可供下载,则在此知识库文章的顶部会出现“修补程序下载可用”部分。如果未显示此部分,请与 Microsoft 客户服务和支持部门联系以获取此修复程序。

注意:如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于不符合此特定的修补程序的其他支持问题和事项将照常收取费用。有关 Microsoft 客户服务和支持电话号码的完整列表,或要创建单独的服务请求,请访问下面的 Microsoft 网站:

http://support.microsoft.com/contactus/?ws=support注意:"提供修补程序下载"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。

系统必备组件

若要应用此修补程序,您必须安装 SQL Server 2008 R2。

重启要求

应用此修补程序后,不需要重新启动计算机。

修补程序替换信息

此修补程序不替代以前发布的修补程序。

文件信息

此修补程序的全球版本具有的文件属性 (或更新的文件属性) 在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。

文件名称

文件版本

文件大小

日期

时间

平台

Sqlservr.exe

2009.100.1800.0

121,829,216

08-Jul-2011

11:55

IA-64

Sqlservr.exe

2009.100.1800.0

62,027,616

08-Jul-2011

12:28

x64

Sqlservr.exe

2009.100.1800.0

42,911,584

08-Jul-2011

13:22

x86

状态

Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

详细信息

下表提供了有关产品或自动检查此条件和 SQL Server 产品对规则进行评估所依据的版本的 SQL Server 实例上的工具的详细信息。

规则软件

规则标题

规则说明

对规则进行评估所依据的产品版本

系统中心顾问

SQL Server 数据库文件标记为稀疏文件


系统中心顾问检查此 SQL Server 实例是否包含数据库文件标记为稀疏。仅数据库快照文件应作为文件标记。如果正常的数据库文件都标记为稀疏,审查程序将生成警报。审查程序依赖于目录视图 sys.master_files is_sparse 列。查看顾问警报"收集信息"一节中提供,检查稀疏状态,受影响的文件的操作系统级别的详细信息。清除的 OS 稀疏状态后,可以应用在刷新 SQL Server 元数据并与操作系统设置同步这篇文章中讨论的修补程序。

SQL Server 2008

SQL Server 2008 R2

SQL Server 2012

参考资料

有关 DBCC 命令的详细信息,请访问下面的 MSDN 网站︰

有关 DBCC 命令的一般信息Fsutil语句的详细信息,请访问下面的 MSDN 网站︰

Fsutil 语句的一般信息有关 Windows Server 2003 中的此问题的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰

973886无法还原大型文件在 NTFS 文件系统中删除具有稀疏特性的所有数据流在 64 位版本的 Windows XP SP2 中,或在 Windows Server 2003 SP2 时

932021错误消息当您运行"chkdsk"命令一起使用"/ v"切换到基于 Windows Server 2003 的计算机上:"Correcting 稀疏文件记录段 < 数量 >"

作者︰ rdorr;jannaw;sureshka
作者︰ v-allzhu;v jayc
技术审阅︰ rdorr;jannaw
编辑器︰ v-lynan

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

×