Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2012 в одном загружаемом файле. Поскольку исправления являются кумулятивными, каждый новый выпуск содержит все исправления и все обновления для системы безопасности, которые были включены в предыдущий выпуск обновления для SQL Server 2012.
Проблемы
Предположим, что вы одновременно запускаете несколько хранимых процедур xp_cmdshell для нескольких сеансов в Microsoft SQL Server 2012. В этой ситуации первое выполнение хранимой процедуры xp_cmdshell не завершается, пока не завершится выполнение последнего выполнения.
Причина
Эта проблема возникает из-за того, что дескриптор наследуется процессами, которые открываются при выполнении xp_cmdshell хранимые процедуры. Чтобы перенаправить стандартный вывод и сообщение об ошибке, в API-интерфейсе CreateProcess требуется дескриптор наследования. Если одновременно выполняются несколько запусков хранимой процедуры xp_cmdshell , вновь открытые процессы могут наследовать дескриптор из существующих процессов. Однако хранимая процедура xp_cmdshell ожидает, пока дескриптор не будет закрыт всеми открытыми процессами. Таким образом, когда несколько процессов наследуют дескриптор, все выполнения xp_cmdshell должны подождать, пока дескриптор не закроется самым длительным процессом.
Решение
Чтобы устранить эту проблему, установите следующее накопительное обновление. Это обновление добавляет параметры STARTUPINFOEX API для CreateProcess, предотвращающие наследование дескрипторов для разных процессов.
Сведения о накопительном пакете обновления
Накопительный пакет обновления 1 (SP1) для SQL Server 2012 с пакетом обновления 1 (SP1)
Исправление для этой проблемы впервые выпущено в накопительном обновлении 1. За дополнительными сведениями о том, как получить этот накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 (SP1), щелкните следующий номер статьи базы знаний Майкрософт:
2765331 Накопительный пакет обновления 1 (SP1) для SQL Server 2012 с пакетом обновления 1 (SP1)Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2772858 Сборки SQL Server 2012, выпущенные после выпуска пакета обновления 1 (SP1) для SQL Server 2012
SQL Server 2012
Исправление для этой проблемы впервые выпущено в накопительном обновлении 4. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012, щелкните следующий номер статьи базы знаний Майкрософт:
2758687 Накопительный пакет обновления 4 для SQL Server 2012Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2692828 Сборки SQL Server 2012, выпущенные после выпуска SQL Server 2012
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Ссылки
Дополнительные сведения о функции CreateProcess можно найти на веб-сайте MSDN по следующему адресу:
Общие сведения о функции CreateProcessДля получения дополнительных сведений о xp_cmdshell сохраненных процедурах перейдите на следующий веб-сайт MSDN:
Общие сведения о xp_cmdshell хранимой процедуры Чтобы получить дополнительные сведения о подобной ошибке, щелкните следующий номер статьи базы знаний Майкрософт:
315939 PRB: дочерние объекты наследуют непредусмотренные дескрипторы во время вызова CreateProcess.