KB2861456 - FIX: toegangsfout in replicatiedistributieagent in SQL Server transactionele replicatie

Van toepassing op
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)

Symptomen

Stel dat u een omgeving hebt met Microsoft SQL Server 2008 R2, SQL Server 2012 of SQL Server 2014 Transactional Replication. Er zijn meerdere distributie-exemplaren van SQL Server in de omgeving. In deze situatie kan er een toegangsfout optreden en loopt de distributieagent voor SQL Server-replicatie vast. Bovendien wordt er een minidumpbestand gegenereerd.

Oplossing

Nadat u de hotfix hebt toegepast, wordt de agent op een prettige manier afgesloten in plaats van vast te lopen met een dumpbestand. U kunt een extra taakstap toevoegen aan de distributieagenttaak om de agent automatisch opnieuw te starten wanneer de agent is gestopt en de status 'gepland voor herstart' heeft.

Raadpleeg de sectie Meer informatie voor meer informatie over het toevoegen van een extra taakstap aan de distributieagenttaak.

Het probleem werd voor het eerst opgelost in de volgende cumulatieve update van SQL Server.

Cumulatieve update 1 voor SQL Server 2014 /nl-nl/help/2931693

Cumulatieve update 9 voor SQL Server 2012 SP1 /nl-nl/help/2931078

Cumulatieve update 11 voor SQL Server 2012 /nl-nl/help/2908007

Cumulatieve update 9 voor SQL Server 2008 R2 SP2 /nl-nl/help/2887606

Informatie over cumulatieve updates voor SQL Server

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die deel uitmaakten van de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

      

Hotfix-updatepakket voor SQL Server 2008 R2 Service Pack 1De oplossing voor dit probleem is voor het eerst uitgebracht in het hotfix-updatepakket voor SQL Server 2008 R2 Service Pack 1.

Status

Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in het gedeelte 'Van toepassing op'.

Meer informatie

Nadat u de hotfix hebt toegepast, voegt u het volgende script toe aan de distributieagenttaak:DECLAREER @JobID BINAIR(16)
DECLARE @AgentID int
DECLAREER @command varchar(max)
DECLARE JobCur CURSOR VOOR 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 Stappen AAN Job.job_id = Steps.job_id
        INNER JOIN distribution.dbo.MSdistribution_agents ALS Agent OP 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'
        GROEPEREN OP Job.job_id, Agent.id
        MET AANTAL(step_id) = 3
OPEN JobCur
VOLGENDE OPHALEN VAN JobCur INTO @JobID, @AgentID
TERWIJL @@FETCH_STATUS = 0 BEGIN
        ALS (@JobID niet NULL is) BEGIN
                set @command = N'if (selecteer top 1 runstatus van MSdistribution_history waarbij agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agent was gepland voor een nieuwe poging. Nu opnieuw opstarten'',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
        HAAL VOLGENDE VAN JobCur IN @JobID, @AgentID;
End
SLUIT JobCur;
DEALLOCATE JobCur;
GO