症状
当你运行包含大型对象(LOB)数据的查询以加载到 Microsoft SQL Server 2008、Microsoft SQL Server 2012 或 Microsoft SQL Server 2008 R2 中的 Transact-sql 变量时,将发生数据损坏。 例如,运行以下查询将 XML 数据从数据库列复制到 XML 变量: Declare @OUTXML as XMLSELECT @OUTXML = DataXml FROM Table_1 WHERE id=1 在这种情况下, SELECT 语句将在其他线程尝试更新相同的 XML 列时运行。 此行为可能会导致数据损坏。 此外,在对损坏的 XML 列执行任何读取和写入操作时,收到以下错误消息之一:
-
XML 数据类型已损坏。
-
出现意外的文件结尾。
注意
-
此问题通常会在高并发加载操作期间发生。
-
当使用日志读取器代理从属于事务复制的发布项目列表的表中读取损坏的 XML 数据时,将收到以下错误消息:
XML 数据类型已损坏。 (源: MSSQLServer,错误号码:6611)
原因
出现此问题的原因是,在将 LOB 数据从数据库列复制到 LOB 数据类型变量之前,已释放 LOB 数据列上的锁。 任何并发查询都可以在复制过程中完成复制过程之前更新相同的 LOB 数据。 因此,发生数据损坏。
解决方案
累积更新信息
SQL Server 2012 累积更新7
此问题的修补程序首次在累积更新7中发布。有关如何为 SQL Server 2012 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2823247 SQL Server 2012 累积更新包7注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2012 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2692828 在 SQL Server 2012 发布后发布的 SQL Server 2012 版本
SQL Server 2008 R2 Service Pack 1 的累积更新12
此问题的修补程序首次在累积更新12中发布。有关如何为 SQL Server 2008 R2 Service Pack 1 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2828727 SQL Server 2008 R2 Service Pack 1 的累积更新程序包12注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 Service Pack 1 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2567616 在发布 SQL Server 2008 R2 Service Pack 1 之后发布的 SQL Server 2008 R2 版本
SQL Server 2008 的累积更新 10 Service Pack 3
此问题的修补程序首次在累积更新10中发布。有关如何获取此累积更新包的 SQL Server 2008 Service Pack 3 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2814783 SQL Server 2008 的累积更新程序包 10 Service Pack 3注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2008 Service Pack 3 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2629969 发布 SQL server 2008 Service Pack 3 后发布的 SQL Server 2008 版本
SQL Server 2008 R2 Service Pack 2 (SP2)的累积更新5
此问题的修补程序首次在累积更新5中发布。有关如何获取适用于 SQL Server 2008 R2 S2008 R2 SP2 的累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2797460 SQL Server 2008 R2 的累积更新程序包5(R2 S2008 R2 SP2)注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 S2008 R2 SP2 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2730301 发布 SQL Server 2008 R2 Service Pack 2 后发布的 SQL Server 2008 R2 版本
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。