Symptomer
Anta at du har en Microsoft SQL Server 2008 R2, SQL Server 2012 eller overførbar replikering for SQL Server-2014 miljø. Det finnes flere distribusjon forekomster av SQL-Server i miljøet. I denne situasjonen kan oppstå et brudd på tilgangstillatelse, og SQL Server-replikering distribusjon agent krasjer. I tillegg genereres det en minidump-fil.
Oppløsning
Når du har installert hurtigreparasjonen, agenten vil bli avsluttet elegant i stedet for krasjer med en dump-fil. Du kan legge til et ekstra jobb trinn i distribusjonen Agent jobben til agenten starter automatisk på nytt når agenten har sluttet og har statusen "planlagt for omstart".
Hvis du vil ha mer informasjon om hvordan du legger til et ekstra jobb trinn i distribusjonen Agent jobben, kan du se delen mer informasjon.
Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.
Samleoppdatering 1 for SQLServer-2014/en-us/help/2931693
Kumulativ oppdatering 9 for SQL Server 2012 SP1/en-us/help/2931078
Kumulativ oppdatering 11 for SQLServer 2012/en-us/help/2908007
Kumulativ oppdatering 9 for SQL Server 2008 R2 SP2/en-us/help/2887606
Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:
Oppdateringen Hurtigreparasjonspakke for SQL Server 2008 R2 Service Pack 1Hurtigreparasjonen for dette problemet ble først utgitt i hurtigreparasjonspakken for oppdateringen for SQL Server 2008 R2 Service Pack 1.
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Hvis du vil ha mer informasjon
Når du har installert hurtigreparasjonen, må du legge til følgende skript distribusjon Agent jobben: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 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) = 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 (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;
END
CLOSE JobCur;
DEALLOCATE JobCur;
GO