Sintomas
Suponha que você tenha um ambiente de Replicação Transacional 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 de minidespejo é gerado.
Resolução
Depois de aplicar o hotfix, o agente será desligado normalmente em vez de falhar junto com um arquivo de despejo. Você pode adicionar uma etapa de trabalho adicional no trabalho Agente de Distribuição para reiniciar o agente automaticamente quando o agente for interrompido e tiver o status "programado para reinicialização".
Para obter mais informações sobre como adicionar uma etapa de trabalho adicional no trabalho de Agente de Distribuição, consulte a seção Mais Informações.
O problema foi corrigido pela primeira vez na atualização cumulativa seguinte do SQL Server.
Atualização cumulativa 1 para SQL Server 2014 /pt-br/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
Sobre atualizações cumulativas para o SQL Server
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 para o SQL Server:
- Atualização cumulativa mais recente do SQL Server 2014
- Atualização cumulativa mais recente do SQL Server 2012 SP1
- Atualização cumulativa mais recente do SQL Server 2012
- Atualização cumulativa mais recente do SQL Server 2008 R2 SP2
Pacote de atualização de hotfix para o 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 o SQL Server 2008 R2 Service Pack 1.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais informações
Depois de aplicar o hotfix, adicione o seguinte script ao trabalho do Agente de Distribuição:DECLARE @JobID BINARY(16)
DECLARE @AgentID int
DECLARE @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 Etapas NO 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'
AGRUPAR POR Job.job_id, Agent.id
TENDO CONTAGEM(step_id) = 3
OPEN JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
IF (@JobID is not NULL) BEGIN
set @command = N'if (seleciona top 1 runstatus de MSdistribution_history onde agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
raiserror(''O agente foi agendado para nova tentativa. Executando a reinicialização agora'',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;
End
FECHAR JobCur;
DEALLOCATE JobCur;
GO