Sintomas
Suponha que você tenha um ambiente de replicação Transaction multifuncional do Microsoft SQL Server 2008 R2, do SQL Server 2012 ou do SQL Server 2014. Há várias instâncias de distribuição do SQL Server no ambiente. Nessa situação, pode ocorrer uma violação de acesso e o agente de distribuição de replicação do SQL Server falha. Além disso, um arquivo mini de despejo é gerado.
Resolução
Depois de aplicar o hotfix, o agente será desligado normalmente, em vez de falhar juntos com um arquivo de despejo. Você pode adicionar uma etapa de trabalho adicional no trabalho do agente de distribuição para reiniciar o agente automaticamente quando o agente for interrompido e tiver o status "agendado para reiniciar". Para obter mais informações sobre como adicionar uma etapa de trabalho adicional no trabalho do agente de distribuição, consulte a seção mais informações. O problema foi corrigido primeiro na atualização cumulativa a seguir do SQL Server.
Atualização cumulativa 1 para SQL Server 2014 /en-us/help/2931693
Atualização cumulativa 9 para SQL Server 2012 SP1 /en-us/help/2931078
Atualização cumulativa 11 para SQL Server 2012 /en-us/help/2908007
Atualização cumulativa 9 para SQL Server 2008 R2 SP2 /en-us/help/2887606
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Pacote de atualização de hotfix para SQL Server 2008 R2 Service Pack 1A correção para esse problema foi lançada pela primeira vez no pacote de atualização de hotfix para SQL Server 2008 R2 Service Pack 1.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Informações adicionais
Depois de aplicar o hotfix, adicione o seguinte script ao trabalho do agente de distribuição: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