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;