某些 SQL Server MSX 目标显示为“正常”、“已阻止”

Oli*_*ver 7 sql-server sql-server-agent

我已将我场的作业集中在 MSX 中,涵盖大约 70 个 SQL Server 实例。看似随机,至少每周一次,有几个实例将停止接受指令。内MSX窗口管理目标服务器,而不是显示所有实例的标准,它们显示为正常,阻止。我无法弄清楚为什么会发生这种情况。叛逃和重新入伍通常可以治愈这种病,但这意味着必须在任何适当的工作中重新添加该目标,因此我宁愿解决原因而不是忍受变通方法。

有什么建议吗?我想继续使用 SQL Server 的工具进行多服务器管理,但我对其他途径持开放态度。

AMt*_*two 3

使用集中式 MSX(多服务器 SQL 代理作业)时,SSMS GUI 在管理这些多服务器作业时存在一些缺点。

当目标服务器在下载作业指令时出现问题时,这些错误将在 中列出msdb.dbo.sysdownloadlist。但是,在 SSMS GUI 中,这仅表现为作业显示为“已阻止”状态。

您可以用来EXEC sp_help_targetserver @server_name = 'MyServer';查看说明,包括错误和未发送的说明。

Microsoft 建议您在发现整个服务器被阻止时重新同步。这是通过执行命令来完成的。EXEC sp_resync_targetserver @server_name = 'MyServer'; 执行此操作将删除并重新创建目标服务器上的所有作业。这可能会造成破坏(您可以想象,如果您在作业应该运行的同时删除并重新创建所有作业,可能会出现什么问题)。此外,这还会导致目标上的工作历史记录丢失。

相反,您可以选择手动修复有问题的特定作业:

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;
Run Code Online (Sandbox Code Playgroud)