Společnost Microsoft distribuuje opravy Microsoft SQL Server 2012 v jednom souboru ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny aktualizace zabezpečení, které byly součástí předchozí verze aktualizace systému SQL Server 2012.
Příznaky
Předpokládejme, že spustíte mnoho xp_cmdshell uložených procedur současně na více relacích v Microsoft SQL serveru 2012. V této situaci není první xp_cmdshell spuštění uložené procedury dokončeno, dokud nebude dokončeno poslední spuštění.
Příčina
K tomuto problému dochází, protože popisovač dědí procesy, které se používají, když spustíte xp_cmdshell uložené procedury najednou. Rozhraní API CreateProcess vyžaduje dědičnost popisovačů, aby přesměroval standardní výstup a chybovou zprávu. Pokud je současně spuštěno více spouštění uložené procedury xp_cmdshell , mohou nově otevřené procesy dědit popisovač z existujících procesů. Xp_cmdshell uložená procedura ale čeká, až všechny otevřené procesy zavře popisovač. Proto, když více procesů dědí popisovač, musí všechny spuštěné xp_cmdshell počkat, dokud nebude popisovač zavřený nejdelším procesem.
Řešení
Tento problém vyřešíte instalací následující kumulativní aktualizace. Tato aktualizace přidá možnosti STARTUPINFOEX API CreateProcess, které zabraňují dědění popisovačů pro Křížový proces.
Informace o kumulativní aktualizaci
Kumulativní aktualizace 1 pro SQL Server 2012 Service Pack 1
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 1. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2012 Service Pack 1, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2765331 Kumulativní aktualizace 1 pro SQL Server 2012 Service Pack 1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2772858 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Service Pack 1
SQL Server 2012
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 4. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2012, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2758687 Kumulativní aktualizace 4 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Odkazy
Další informace o funkci CreateProcess získáte, když přejdete na následující web MSDN:
Obecné informace o funkci CreateProcessDalší informace o uložené proceduře xp_cmdshell najdete v tomto článku:
Obecné informace o uložené proceduře xp_cmdshell Další informace o podobném problému najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
315939 PRB: při volání CreateProcess zdědí podřízené objekty nezamýšlené popisovače.