Симптоми
Приемете, че имате Microsoft SQL Server 2008 R2, SQL Server 2012 или SQL Server 2014 среда за реплицирана репликация. Има множество екземпляри за разпространение на SQL Server в околната среда. В този случай може да възникне нарушение на достъпа, а агентът за разпространение на репликация на SQL Server се срива. Освен това се генерира мини дъмп файл.
Решение
След като приложите актуалната корекция, агентът ще се изключи елегантно, вместо да се срива заедно със дъмп файла. Можете да добавите допълнителна стъпка за работа в задачата за разпространение на агент, за да рестартирате агента автоматично, когато агентът е спрял, и има състоянието "планирано за рестартиране". За повече информация как да добавите допълнителна стъпка за работа в работата на агента за разпространение, прегледайте секцията още информация. Проблемът е коригиран първо в следващата сборна актуализация на SQL Server.
Сборна актуализация 1 за SQL Server 2014 /en-us/help/2931693
Кумулативна актуализация 9 за SQL Server 2012 SP1 /en-us/help/2931078
Кумулативна актуализация 11 за SQL Server 2012 /en-us/help/2908007
Кумулативна актуализация 9 за SQL Server 2008 R2 SP2 /en-us/help/2887606
Всяка нова сборна актуализация за SQL Server съдържа всички поправки и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Пакет за актуализиране на актуална корекция за SQL Server 2008 R2 Service Pack 1Корекцията за този проблем е издадена за първи път в пакета за актуализиране на актуална корекция за SQL Server 2008 R2 Service Pack 1.
Състоянието
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".
Повече информация
След като приложите актуалната корекция, добавете следния скрипт към заданието на агент за разпространение:DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @command varchar(max)DECLARE JobCur CURSOR FOR SELECT Job.job_id, Agent.id FROM msdb.dbo.sysjobs AS Job INNER JOIN msdb.dbo.syscategories AS Cat ON Job.category_id = Cat.category_id INNER JOIN msdb.dbo.sysjobsteps AS Steps ON Job.job_id = Steps.job_id INNER JOIN distribution.dbo.MSdistribution_agents AS Agent ON Job.job_id = Agent.job_id WHERE Job.name like '%Put Text Mask To Identify Your Publisher DB Jobs Here%' AND Cat.name = 'REPL-Distribution' GROUP BY Job.job_id, Agent.id HAVING COUNT(step_id) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@FETCH_STATUS = 0 BEGIN IF (@JobID is not NULL) BEGIN set @command = N'if (select top 1 runstatus from MSdistribution_history where agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5 raiserror(''Agent was scheduled for retry. Performing restart now'',16,1)' EXEC msdb.dbo.sp_add_jobstep @job_id=@JobID, @database_name=N'distribution', @step_name=N'Check for retry', @step_id=4, @on_fail_action=4, @on_fail_step_id=1, @command=@command EXEC msdb.dbo.sp_update_jobstep @job_id=@JobID, @step_id=2, @on_success_action=4, @on_success_step_id=4 END FETCH NEXT FROM JobCur INTO @JobID, @AgentID;ENDCLOSE JobCur;DEALLOCATE JobCur;GO