FIX: 您在 SQL Server 2005 中运行并行执行计划时可能会收到访问冲突错误消息

文章翻译 文章翻译
文章编号: 912885 - 查看本文应用于的产品
错误 #: 420246 (SQLBUDT)
Microsoft 将 Microsoft SQL Server 2005 修补程序分发作为一个可下载的文件。因为该修补程序是累积性的因此每个新版本包含的所有修补程序和所有安全修补程序附带以前 SQL Server 2005 修补都程序版本。
展开全部 | 关闭全部

本文内容

概要

本文介绍以下有关此修补程序版本:
  • 通过此修补程序包修复的问题
  • 安装此修补程序包的先决条件
  • 在安装此修补程序包后是否必须重新启动计算机
  • 此修补程序包是否替换任何其他修补程序包
  • 是否必须进行任何注册表更改
  • 修补程序包中包含的文件

症状

在 Microsoft SQL Server 2005,您可能会收到访问冲突错误消息,当满足下列条件都为真时:
  • 您创建的表使用 IGNORE_DUP_KEY 选项的索引。
  • 运行此索引中插入新行的 INSERT 语句。
  • 对于在 INSERT 语句,计划将并行。
  • 通过使用参数提供一个 IGNORE_DUP_KEY 选项的键列的值。
此外,您可能会收到与以下类似的错误消息:
当前命令出现服务器错误。 在的结果如果任何,应被放弃。

解决方案

修补程序信息

可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

是否可供下载此修补程序没有"提供修补程序下载"部分中,在这篇知识库文章的顶部。如果不会显示此部分,请联系 Microsoft 客户服务和支持以获取此修复程序。

注意如果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意"提供修补程序下载"窗体所显示的此修复程序是可用的语言。如果您看不到您的语言,则是一个修复程序不能用于该语言。

系统必备组件

没有此修补程序需要任何先决条件。

重新启动信息

您不必在应用此修补程序后,重新启动计算机。

注册表信息

您不必更改注册表。

文件信息

此修补程序仅包含那些文件解决本文列出了该问题所必需的。此修补程序不能包含将产品完全更新到最新版本所必需的所有文件。

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。
对于基于 x86 的系统的 SQL Server 2005 年
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Msvcp80.dll8.0.50727.42548,8642005 年十月 14 日06: 26x86
Msvcr80.dll8.0.50727.42626,6882005 年十月 14 日06: 26x86
Sqldiscoveryapi.dll2005.90.1518.0527,0642006 年一月 21 日00: 11x86
SQL Server 2005 x64 版本
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Msvcp80.dll8.0.50727.421,097,7282005 年十月 14 日18: 46x64
Msvcr80.dll8.0.50727.42822,7842005 年十月 14 日18: 46x64
Sqldiscoveryapi.dll2005.90.1518.0745,6882006 年一月 21 日04: 14x64
对于基于 Itanium 的系统 SQL Server 2005 年
收起该表格展开该表格
文件的名称文件版本文件大小日期时间平台
Msvcp80.dll8.0.50727.421,385,4722005 年十月 14 日18: 35IA 64
Msvcr80.dll8.0.50727.421,484,8002005 年十月 14 日18: 35IA 64
Sqldiscoveryapi.dll2005.90.1518.01,924,3122006 年一月 21 日03: 30IA 64

替代方法

要变通解决此问题,请按照下列步骤操作:
  1. 确定在有问题的 INSERT 语句导致访问冲突。
  2. 强制查询优化器生成的有问题的 INSERT 语句串行计划。因此,可在一个线程上执行该语句。
注意如果您不能确定有问题的 INSERT 语句导致访问冲突,可以使用该方法来变通解决此问题的方法 3 中所述。

若要确定有问题的 INSERT 语句导致访问冲突,请按照下列步骤操作:
  1. 在 $ SQL Server 错误日志文件中,中找到访问冲突错误消息。
  2. 访问冲突错误消息顶部附近找到输入的缓冲区信息。
  3. 查找下面输入的缓冲区信息的批处理信息。

    注意在批处理中包含有问题的 INSERT 语句导致访问冲突。
  4. 如果批处理中包含一个 INSERT 语句这种说法是完全有问题的 INSERT 语句。如果批处理中包含多个 INSERT 语句执行后续操作,以确定有问题的 INSERT 语句:
    1. 在 SQL Server 设置创建一个跟踪 SQL Server 2005 实例。
    2. 错误和警告 事件类别中选择 注意 事件类和 异常 的事件类。

      注意可以使用这些事件类确定开始运行之前发生访问冲突在最后一条语句。

      如果批处理中包含仅 TRANSACT-SQL 语句中选择以下的附加事件类 TSQL 事件分类下:
      • SQL:BatchStarting
      • SQL:BatchCompleted
      • SQL:StmtStarting
      • SQL:StmtCompleted
      如果批处理中包含存储的过程中发生访问冲突选择下面的附加事件类,在 存储过程 事件分类下:
      • SP: 启动
      • SP: 完成
      • SP:StmtStarting
      • SP:StmtCompleted
    3. 从客户端应用程序运行同一个批处理。

      按照此步骤,以重新产生访问冲突。然后,您可以确定有问题的 INSERT 语句。您在运行批处理时请确保正在运行的跟踪。

      如果客户端应用程序不是 SQL Server 管理 Studio,您可以手动运行同一个批处理,SQL Server 管理 Studio 中。但是,您不可能获得相同的执行计划,为原来的执行计划,从而导致该问题。如果 SQL Server 2005 重新编译批处理中有问题的 INSERT 语句通过使用不同的执行计划,或使用不同的参数,则会出现此行为。
    4. 停止跟踪,然后分析确定有问题的 INSERT 语句将跟踪结果。若要确定有问题的 INSERT 语句,确定的 SPID 的遇到访问冲突和的断开连接的客户端应用程序。然后上该的 SPID,,注意到在 INSERT 语句,以满足以下要求:
      • 启动在 INSERT 语句。
      • 相同的 INSERT 语句未完成。
若要强制查询优化器生成的有问题的 INSERT 语句串行计划,使用下列方法之一。

方法 1

注意如果您可以访问有问题的 INSERT 语句,请使用此方法。

选项 (MAXDOP 1) 表达式添加到有问题的 INSERT 语句中。下面是一个新的 INSERT 语句的示例。
INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 FROM OtherTable
OPTION (MAXDOP 1) 
有关 MAXDOP 查询提示的详细信息,请参阅下面的 Microsoft 开发人员网络 (MSDN) 的网站上的"使用 MAXDOP"部分:
http://msdn2.microsoft.com/en-us/library/ms181714.aspx

方法 2

注意如果您不能访问有问题的 INSERT 语句,请使用此方法。 例如对于有问题的 INSERT 语句是从客户端应用程序。但是,您不能重新配置客户端应用程序,或者您不能重新编译客户端应用程序添加 选项 (MAXDOP 1) 表达式。或有问题的 INSERT 语句是在存储过程中。但是,此存储的过程被加密。您不能更改存储过程中的语句。

使用针对有问题的 INSERT 语句 sp_create_plan_guide 存储过程。通过此操作将强制上有问题的 INSERT 语句 选项 (MAXDOP 1) 表达式。以下是如何使用 sp_create_plan_guide 存储过程的示例。
sp_create_plan_guide @name = N'planguide_for_MyFailingProc', -- Arbitrary name
@stmt = N'INSERT INTO MyOneFailingStatementTable VALUES (@a,@b,@c)', -- The problematic INSERT statement
@type = N'OBJECT', @module_or_batch = N'dbo.MyFailingProc', -- The name of the stored procedure that contains the problematic INSERT statement
@params = NULL, @hints = N'OPTION (MAXDOP 1)'-- Query hint to prevent parallelism
有关 sp_create_plan_guide 存储过程的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/ms179880.aspx

方法 3

注意如果满足下列条件之一,则可以使用这种方法:
  • 有问题的 INSERT 语句是动态生成的。
  • 您不能确定在 INSERT 语句导致访问冲突。
重要此方法使 SQL Server 2005,以在一个线程上运行的实例上的所有查询。不建议使用此方法。此方法可能导致性能问题的其他实例上运行的查询。

运行以下的 TRANSACT-SQL 语句。
sp_configure 'show advanced options', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO

sp_configure 'max degree of parallelism', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO
最大并行度 选项的详细信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/ms181007.aspx

状态

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

更多信息

有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499Microsoft SQL Server 软件更新程序包的新命名架构
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 912885 - 最后修改: 2007年11月20日 - 修订: 3.5
这篇文章中的信息适用于:
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium-based Systems Community Technology Preview
关键字:?
kbmt kbautohotfix kbsql2005engine kbsql2005presp1fix kbhotfixserver kbfix kbbug kbsqlserv2005fix kbqfe kbpubtypekc KB912885 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 912885
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com