Wenn Sie den folgenden Stapel ausführen, der Teil eines großen Skripts ist:
...
GO
-----------------------------------------------------------------------------------------------
-- Removed the xp_cmdshell for deleting the backup file
-----------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PR_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PR_MyProc]
GO
...
Auf einem Remote-SQL Server wird der folgende Fehler angezeigt:
Meldung 121, Ebene 20, Status 0, Zeile 0 Beim Empfang der Ergebnisse vom Server ist ein Fehler auf Transportebene aufgetreten. (Anbieter: TCP-Anbieter, Fehler: 0 - Das Zeitlimit für das Semaphor ist abgelaufen.)
Wenn wir "xp_cmdshell" aus dem Kommentar entfernen, ist der Stapel erfolgreich. Dieser Fehler tritt nur auf einigen unserer SQL Server auf. Wir führen das Skript remote aus. Die fehlgeschlagene Version von SQL Server lautet:
Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20. Februar 2014 20:04:26 Copyright (c) Microsoft Corporation Standard Edition (64-Bit) unter Windows NT 6.2 (X64) (Build 9200 :) (Hypervisor)
Auf einem anderen Server ist dasselbe Skript erfolgreich. Dieser Server hat diese Version:
Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20. Februar 2014 20:04:26 Copyright (c) Microsoft Corporation Standard Edition (64-Bit) unter Windows NT 6.1 (X64) (Build 7601: Service Pack 1) (Hypervisor)
Auf beiden Servern ist xp_cmdshell aktiviert. Auf dem fehlerhaften Server wird Windows 2012 R2 ausgeführt, und auf dem erfolgreichen Server wird Windows Server 2008 R2 SP1 ausgeführt. Wenn wir das Skript lokal auf dem Server ausführen, ist es erfolgreich. Wenn wir das Skript remote von einem anderen virtuellen Server ausführen, schlägt es fehl. Wir haben auch festgestellt, dass das Skript nur fehlschlägt, wenn der Kommentar "(Leerzeichen) xp_cmdshell (Leerzeichen)" enthält.
Kann mir jemand sagen, warum dieses Skript fehlschlägt? Und warum schlägt es auf einigen Servern fehl und auf anderen nicht?
Auf dem Server wird kein Antivirenprogramm ausgeführt. SQL Server Management Studio ist verbunden. Das Ändern des zu entfernenden Kommentars ist xp_cmdshell
immer erfolgreich und das ursprüngliche Skript schlägt immer fehl.
quelle
--
links hinzufügen, schlägt dies nicht fehl. Wenn Sie es in einer eigenen Zeile, aber ohne Parameter rechts davon haben, wurde ein Syntaxfehler verursacht. Sehr seltsam unabhängig.Unsere Problemumgehung bestand darin, xp_cmdshell aus unseren Kommentaren zu entfernen. Ich habe es durch "xp (space) cmdshell" ersetzt.
quelle