Applies ToSQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Developer SQL Server 2012 Enterprise

Microsoft 在一个可下载文件中分发 Microsoft SQL Server 2012 修复程序。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2012 更新版本附带的所有修补程序和所有安全更新。

症状

假设你在 Microsoft SQL Server 2012 中的多个会话上同时运行多个 xp_cmdshell 存储过程。 在这种情况下, xp_cmdshell 存储过程的第一次执行在最后一次执行完成之前不会完成。

原因

出现此问题的原因是,当你同时运行 xp_cmdshell 存储过程时打开的进程会继承句柄。 CreateProcess API 需要处理继承以重定向标准输出和错误消息。 如果同时运行多个 xp_cmdshell 存储过程,则新打开的进程可以继承现有进程的句柄。 但是, xp_cmdshell 存储过程将等待句柄由所有打开的进程关闭。 因此,当多个进程继承该句柄时,所有 xp_cmdshell 执行都必须等待,直到该句柄被最长运行的进程关闭。

解决方案

若要解决此问题,请应用以下累积更新。 此更新添加了用于阻止跨进程的句柄继承的 CreateProcess API STARTUPINFOEX 选项。

累积更新信息

SQL Server 2012 Service Pack 1 的累积更新包1

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

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

2772858 在发布 SQL Server 2012 Service Pack 1 之后发布的 SQL Server 2012 版本

SQL Server 2012

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

2758687 SQL Server 2012 累积更新程序包4注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2012 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2692828 在 SQL Server 2012 发布后发布的 SQL Server 2012 版本

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考

有关 CreateProcess 函数的详细信息,请转到以下 MSDN 网站:

有关 CreateProcess 函数的常规信息有关 xp_cmdshell 存储过程的详细信息,请转到以下 MSDN 网站:

有关 xp_cmdshell 存储过程的常规信息 有关类似问题的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

315939 PRB:在 CreateProcess 调用期间,子元素继承了不应的句柄

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。