Ознаки
Припустимо, що у вас є 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, перелічених у розділі "застосовується до".
Додаткові відомості
Після того як ви застосуєте виправлення, додайте наведений нижче сценарій до завдання агента розподілу.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