KB2861456 – FIX: Zugriffsverletzung bei Replikations-Verteilungs-Agent in SQL Server Transaktionsreplikation

Gilt 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)

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:

      

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