KB2498796 - 修复:在 SQL Server 2008 或 SQL Server 2008 R2 中启用然后禁用对表的冲突检测后,更新表的统计信息时可能会发生访问冲突

应用对象
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard

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。
  • 配置对等事务复制,然后在表上启用冲突检测。
  • 稍后,禁用对等事务复制的冲突检测。
  • 更新表的统计信息。

在此方案中,更新失败,你会收到以下错误消息:

注意

消息 0,级别 11,状态 0,行 0

当前命令上发生严重错误。 如果有结果,应丢弃。

此外,还会发生访问冲突异常,并且会在 SQL Server 错误日志文件夹中生成一个小型转储文件。

原因

出现此问题的原因是数据库引擎尝试加载无关联统计信息。 启用 P2P 冲突检测后,MDColumnIdP2pCdId 系统列将添加到表的基索引行集中。 与复制相关的查询可能会自动在系统列上创建统计信息。 禁用 P2P 冲突检测时,系统列将从表中删除。 但是,相应的统计数据仍然存在。 因此,更新统计信息会导致发生访问冲突异常,因为无法将统计信息添加到表中。

解决方法

累积更新信息

SQL Server 2008 R2 Service Pack 1

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

2633146 SQL Server 2008 R2 Service Pack 1 的累积更新包 4 注意 由于版本是累积的,因此每个新的修补程序版本都包含之前 SQL Server 2008 R2 修补程序版本中包含的所有修补程序和安全修补程序。 建议应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2567616 在 SQL Server 2008 R2 Service Pack 1 发布之后发布的 SQL Server 2008 R2 内部版本

SQL Server 2008 R2

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

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

981356 在 SQL Server 2008 R2 发布之后发布的 SQL Server 2008 R2 内部版本

SQL Server 2008 Service Pack 2

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

2498535 SQL Server 2008 Service Pack 2 累积更新包 3 注意 由于版本是累积的,因此每个新的修复版本都包含之前 SQL Server 2008 修复版本中包含的所有修补程序和所有安全修补程序。 Microsoft 建议考虑应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2402659 2008 Service Pack 2 发布之后发布的 SQL Server 2008 内部版本SQL Server Microsoft为特定的 SQL Server Service Pack 创建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 的累积更新包 6 中发布。 有关如何获取此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2489376 SQL Server 2008 R2 累积更新包 6 注意 由于版本是累积的,因此每个新的修复版本都包含之前 SQL Server 2008 R2 修复版本中包含的所有修补程序和安全修补程序。 建议应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

981356 在 SQL Server 2008 R2 发布之后发布的 SQL Server 2008 R2 内部版本

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

详细信息

有关如何使用配置对等拓扑向导配置和维护对等复制拓扑的详细信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:

如何:配置对等事务复制 (SQL Server Management Studio) 有关冲突检测的更多信息,请访问以下 MSDN 网站:

对等复制中的冲突检测 有关软件更新术语的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

824684 用于描述Microsoft软件更新的标准术语说明