KB2861456 – ÅTGÄRD: Åtkomstfel i replikeringsdistributionsagenten i SQL Server transaktionsreplikering

Gäller för
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Symptom

Anta att du har en Microsoft SQL Server 2008 R2-, SQL Server 2012- eller SQL Server 2014-transaktionsreplikeringsmiljö. Det finns flera distributionsinstanser av SQL Server i miljön. I det här fallet kan ett åtkomstfel inträffa och distributionsagenten för replikering från SQL Server kraschar. Dessutom genereras en minidumpfil.

Lösning

När du har installerat snabbkorrigeringen avslutas agenten smidigt i stället för att krascha tillsammans med en dumpfil. Du kan lägga till ytterligare ett jobbsteg i distributionsagentjobbet för att starta om agenten automatiskt när agenten har stoppats och har statusen "schemalagd för omstart".

Mer information om hur du lägger till ytterligare ett jobbsteg i jobbet Distributionsagent finns i avsnittet Mer information.

Problemet åtgärdades först i följande kumulativa uppdatering av SQL Server.

Kumulativ uppdatering 1 för SQL Server 2014 /en-us/help/2931693

Kumulativ uppdatering 9 för SQL Server 2012 SP1 /en-us/help/2931078

Kumulativ uppdatering 11 för SQL Server 2012 /en-us/help/2908007

Kumulativ uppdatering 9 för SQL Server 2008 R2 SP2 /en-us/help/2887606

Om kumulativa uppdateringar för SQL Server

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingick i den tidigare kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:

      

Snabbkorrigeringsuppdateringspaket för SQL Server 2008 R2 Service Pack 1Korrigeringen för det här problemet släpptes först i snabbkorrigeringsuppdateringspaketet för SQL Server 2008 R2 Service Pack 1.

Status

Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".

Mer information

När du har tillämpat snabbkorrigeringen lägger du till följande skript i distributionsagentjobbet:DECLARE @JobID BINARY(16)
DEKLARERA INT @AgentID
DECLARE @command varchar(max)
DEKLARERA JobCur MARKÖREN FÖR 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 steg ON Job.job_id = Steps.job_id
        INNER JOIN distribution.dbo.MSdistribution_agents SOM agent PÅ 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
ÖPPNA JobCur
HÄMTA NÄSTA FRÅN JobCur INTO @JobID, @AgentID
MEDAN @@FETCH_STATUS = 0 BEGIN
        OM (@JobID är inte NULL) BÖRJA
                set @command = N'if (välj topp 1 runstatus från MSdistribution_history där agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agenten var schemalagd för ett nytt försök. Utför omstart nu'',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
        HÄMTA NÄSTA FRÅN JobCur INTO @JobID, @AgentID;
END
STÄNG JobCur;
FRIGÖR JobCur;
GO