Symptome
Angenommen, Sie verfügen über eine Microsoft SQL Server 2008 R2-, SQL Server 2012- oder SQL Server 2014-Transaktionsreplikationsumgebung. In der Umgebung sind mehrere Verteilungsinstanzen von SQL Server vorhanden. In diesem Fall kann es zu einer Zugriffsverletzung kommen, und der Replikationsverteilungs-Agent von SQL Server stürzt ab. Zusätzlich wird eine Miniabbilddatei generiert.
Lösung
Nachdem Sie den Hotfix angewendet haben, wird der Agent ordnungsgemäß heruntergefahren, anstatt zusammen mit einer Sicherungsdatei abzustürzen. Sie können einen zusätzlichen Jobschritt im Auftrag Verteilungs-Agent hinzufügen, um den Agent automatisch neu zu starten, wenn der Agent gestoppt wurde und den Status "Für Neustart geplant" hat.
Weitere Informationen zum Hinzufügen eines zusätzlichen Jobschritts im Auftrag Verteilungs-Agent finden Sie im Abschnitt Weitere Informationen.
Das Problem wurde erstmals im folgenden kumulativen Update von SQL Server behoben.
Kumulatives Update 1 für SQL Server 2014 /de-de/help/2931693
Kumulatives Update 9 für SQL Server 2012 SP1 /en-us/help/2931078
Kumulatives Update 38 für SQL Server 2012 /de-de/help/2908007
Kumulatives Update 38 für SQL Server 2008 R2 SP2 /en-us/help/2887606
Informationen zu kumulativen Updates für SQL Server
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
- Neuestes kumulative Update für SQL Server 2014
- Neuestes kumulatives Update für SQL Server 2012 SP1
- Neuestes kumulative Update für SQL Server 2012
- Neuestes kumulatives Update für SQL Server 2008 R2 SP2
Hotfixupdatepaket für SQL Server 2008 R2 Service Pack 1Der Fix für dieses Problem wurde zuerst im Hotfixupdatepaket für SQL Server 2008 R2 Service Pack 1 veröffentlicht.
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Weitere Informationen
Nachdem Sie den Hotfix angewendet haben, fügen Sie das folgende Skript zum Auftrag des Verteilungs-Agenten hinzu: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
ANZAHL(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. Neustart wird jetzt durchgeführt'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, @database\_name=N'distribution', @step\_name=N'Auf Wiederholung prüfen', @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
ENDE
FETCH NEXT FROM JobCur INTO @JobID, @AgentID;
ENDE
SCHLIESSEN JobCur;
ZUWEISUNG AUFHEBEN, JobCur;
GO