KB2861456 – RETTELSE: Adgangsovertrædelse i replikeringsdistributionsagenten i SQL Server transaktionsreplikering

Gælder for
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)

Symptomer

Antag, at du har et Microsoft SQL Server 2008 R2-, SQL Server 2012- eller SQL Server 2014-transaktionsreplikeringsmiljø. Der er flere distributionsforekomster af SQL Server i miljøet. I denne situation kan der opstå en adgangsfejl, og SQL Server-replikeringsdistributionsagenten går ned. Desuden genereres en minidumpfil.

Løsning

Når du har anvendt hotfixet, lukkes agenten problemfrit i stedet for at gå ned sammen med en dumpfil. Du kan tilføje et ekstra jobtrin i jobbet Distributionsagent for at genstarte agenten automatisk, når agenten er stoppet og har statussen "planlagt til genstart".

Du kan finde flere oplysninger om, hvordan du tilføjer et ekstra jobtrin i jobbet Distributionsagent, i afsnittet Flere oplysninger.

Problemet blev først løst i følgende kumulative opdatering af SQL Server.

Samlet opdatering 1 til SQL Server 2014 /en-us/help/2931693

Samlet opdatering 9 til SQL Server 2012 SP1 /en-us/help/2931078

Samlet opdatering 11 til SQL Server 2012 /en-us/help/2908007

Samlet opdatering 9 til SQL Server 2008 R2 SP2 /en-us/help/2887606

Om kumulative opdateringer til SQL Server

Hver ny kumulativ opdatering til SQL Server indeholder alle de hotfixes og alle de sikkerhedsrettelser, der fulgte med den forrige kumulative opdatering. Se de seneste kumulative opdateringer til SQL Server:

      

Hotfixopdateringspakke til SQL Server 2008 R2 Service Pack 1Rettelsen til dette problem blev først udgivet i hotfixopdateringspakken til SQL Server 2008 R2 Service Pack 1.

Status

Microsoft har bekræftet, at dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Flere oplysninger

Når du har anvendt hotfixet, skal du føje følgende script til Distribution Agent-jobbet:DECLARE @JobID BINARY(16)
DECLARE @AgentID INT
DECLARE @command varchar(max)
DEKLARER JobCur-MARKØR 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
        HVOR Job.name som '%Sæt tekstmaske for at identificere dine udgiver-DB-job her%' OG Cat.name = 'REPL-Distribution'
        GRUPPÉR EFTER Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
ÅBN JobCur
HENT NÆSTE FRA JobCur TIL @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
        IF (@JobID is not NULL) BEGIN
                set @command = N'if (vælg top 1 runstatus fra MSdistribution_history hvor agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agenten var planlagt til at blive forsøgt igen. Udfører genstart nu'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'distribution', @step\_name=N'Check for retry', @step\_id=4, @on\_fail\_action=4@on\_fail\_step\_id=1@database\_name=N@command=@command
                EXEC msdb.dbo.sp_update_jobstep @job\_id=@JobID, @step\_id=2, @on\_success\_action=4, , @on\_success\_step\_id=4
        End
        HENT NÆSTE FRA JobCur TIL @JobID, @AgentID;
End
LUK JobCur;
ALLOKERE JobCur;
START