Einige SQL Server MSX-Ziele werden als "Normal" und "Blockiert" angezeigt


7

Ich habe die Jobs meiner Farm in MSX zentralisiert und ungefähr 70 Instanzen von SQL Server abgedeckt. Scheinbar zufällig, mindestens einmal pro Woche, werden mehrere Instanzen keine Anweisungen mehr annehmen. Innerhalb des MSX-Fensters Verwalten von Zielservern werden anstelle aller Instanzen, die als Normal angezeigt werden , diese als Normal und Blockiert angezeigt . Ich habe nicht herausgefunden, warum dies passiert. Das Defektieren und erneute Eintragen heilt dieses Problem normalerweise, aber das bedeutet, dass Sie dieses Ziel in geeigneten Jobs erneut hinzufügen müssen, sodass ich die Ursache lieber beheben möchte, als die Problemumgehung zu ertragen.

Irgendein Rat? Ich möchte die SQL Server-Tools weiterhin für die Verwaltung mehrerer Server verwenden, bin aber offen für andere Möglichkeiten.


1
Ich habs. Die auszuführende Aktion besteht darin, sp_resync_targetserver von der MSX aus auszuführen. Klappt wunderbar. Danke, BOL!
Oliver

Antworten:


2

Bei Verwendung eines zentralisierten MSX (Multi-Server SQL Agent-Jobs) weist die SSMS-GUI einige Mängel bei der Verwaltung dieser Multi-Server-Jobs auf.

Wenn ein Zielserver Probleme beim Herunterladen von Anweisungen für einen Job hat, werden diese Fehler in aufgelistet msdb.dbo.sysdownloadlist. In der SSMS-GUI wird dies jedoch nur als Job angezeigt, der den Status "Blockiert" aufweist.

Sie können verwenden EXEC sp_help_targetserver @server_name = 'MyServer';, um die Anweisungen anzuzeigen, einschließlich Fehler und nicht gesendeter Anweisungen.

Microsoft empfiehlt, den gesamten Server erneut zu synchronisieren, wenn Sie feststellen, dass er blockiert ist. Dies erfolgt durch Ausführen des Befehls. Dadurch werden EXEC sp_resync_targetserver @server_name = 'MyServer'; alle Jobs auf dem Zielserver gelöscht und neu erstellt. Dies kann störend sein (Sie können sich vorstellen, was schief gehen könnte, wenn Sie alle Ihre Jobs gleichzeitig löschen und neu erstellen, wenn ein Job ausgeführt werden soll). Darüber hinaus führt dies zum Verlust des Auftragsverlaufs auf dem Ziel.

Stattdessen können Sie die spezifischen Jobs, die ein Problem darstellen, manuell reparieren:

DECLARE @server_name sysname = 'MyServer';
DECLARE @job_name    sysname = 'The Job That Broke';

-- Get the Job_ID
DECLARE @job_id uniqueidentifier;
SELECT @job_id = job_id FROM msdb.dbo.sysjobs WHERE name = @job_name;

--Delete existing download instructions for this server/job
DELETE dl
FROM msdb.dbo.sysdownloadlist   AS dl
WHERE dl.target_server = @server_name
AND dl.object_id = @job_id;

--Post new instructions to delete & re-add job
EXECUTE msdb.dbo.sp_post_msx_operation 
                @operation = 'DELETE', 
                @object_type = 'JOB', 
                @job_id = @job_id, 
                @specific_target_server  = @server_name;
EXECUTE msdb.dbo.sp_post_msx_operation 
                @operation = 'INSERT', 
                @object_type = 'JOB', 
                @job_id = @job_id, 
                @specific_target_server  = @server_name;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.