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:
- Meest recente cumulatieve update voor SQL Server 2014
- Laatste cumulatieve update voor SQL Server 2012 SP1
- Meest recente cumulatieve update voor SQL Server 2012
- Laatste cumulatieve update voor SQL Server 2008 R2 SP2
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