Problembeschreibung
Angenommen, Sie verfügen über eine Microsoft SQL Server 2008 R2-, SQL Server 2012-oder SQL Server 2014-Transaktions Replikationsumgebung. Es gibt mehrere Verteilungs Instanzen von SQL Server in der Umgebung. In diesem Fall kann eine Zugriffsverletzung auftreten, und der SQL Server-Replikations Verteilungs-Agent stürzt ab. Darüber hinaus wird eine Minispeicherabbild Datei generiert.
Fehlerbehebung
Nachdem Sie den Hotfix angewendet haben, wird der Agent ordnungsgemäß heruntergefahren, anstatt zusammen mit einer Dumpdatei abzustürzen. Sie können einen zusätzlichen Auftragsschritt im Verteilungs-Agent-Auftrag hinzufügen, um den Agenten automatisch neu zu starten, wenn der Agent angehalten wurde und den Status "geplant für Neustart" aufweist. Weitere Informationen zum Hinzufügen eines weiteren Auftragsschritts im Verteilungs-Agent-Auftrag finden Sie im Abschnitt Weitere Informationen. Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Kumulatives Update 1 für SQL Server 2014 /en-us/help/2931693
Kumulatives Update 9 für SQL Server 2012 SP1 /en-us/help/2931078
Kumulatives Update 11 für SQL Server 2012 /en-us/help/2908007
Kumulatives Update 9 für SQL Server 2008 R2 SP2 /en-us/help/2887606
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Hotfix-Update-Paket für SQL Server 2008 R2 Service Pack 1Der Fix für dieses Problem wurde erstmals im Hotfix-Updatepaket für SQL Server 2008 R2 Service Pack 1veröffentlicht.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Weitere Informationen
Nachdem Sie den Hotfix angewendet haben, fügen Sie dem Verteilungs-Agent-Auftrag das folgende Skript hinzu:DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @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) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@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;ENDCLOSE JobCur;DEALLOCATE JobCur;GO