KB2861456 – POPRAVAK: povreda prava pristupa u replicaciji Agent za distribuciju u SQL Server transakcijskoj replicaciji

Primjenjuje se na
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)

Simptomi

Pretpostavimo da imate okruženje za transakcijsku replikaciju sustava Microsoft SQL Server 2008 R2, SQL Server 2012 ili SQL Server 2014. U okruženju postoji više instanci distribucije sustava SQL Server. U toj situaciji može doći do povrede prava pristupa i pada agenta za distribuciju replikacije SQL Server. Osim toga, generira se mala datoteka izvatka o stanju pri padu.

Rješenje

Kada primijenite hitni popravak, agent će se uredno isključiti umjesto da se sruši zajedno s datotekom izvatka stanja sustava. Možete dodati dodatni korak zadatka u zadatak agenta za raspodjelu da biste automatski ponovno pokrenuli agenta kada se agent zaustavi i ima status "zakazano za ponovno pokretanje".

Dodatne informacije o dodavanju koraka zadatka za zadatak agenta za raspodjelu potražite u odjeljku Dodatne informacije.

Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server.

Kumulativno ažuriranje 1 za SQL Server 2014 /en-us/help/2931693

Kumulativno ažuriranje 9 za SQL Server 2012 SP1 /en-us/help/2931078

Kumulativno ažuriranje 11 za SQL Server 2012 /en-us/help/2908007

Kumulativno ažuriranje 9 za SQL Server 2008 R2 SP2 /en-us/help/2887606

O kumulativnim ažuriranjima za SQL Server

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

      

Paket ažuriranja hitnih popravaka za SQL Server 2008 R2 Service Pack 1Rješenje tog problema prvi je put objavljeno u paketu ažuriranja hitnih popravaka za SQL Server 2008 R2 Service Pack 1.

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Dodatne informacije

Nakon primjene hitnog popravka dodajte sljedeću skriptu u posao agenta za raspodjelu: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 poput '%Stavite tekstualnu masku da biste ovdje identificirali zadatke baze podataka izdavača%' I Cat.name = 'REPL-Distribution'
        GRUPIRAJ PREMA Job.job_id Agent.id
        HAVING COUNT(step_id) = 3
OPEN JobCur
FETCH NEXT FROM JobCur INTO ,@JobID@AgentID
DOK @@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 je zakazan za ponovni pokušaj. Ponovno pokretanje izvodi se sada'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'distribucija', @step\_name=N'Provjeri ima li ponovnog pokušaja', @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
        FETCH NEXT FROM JobCur INTO @JobID, @AgentID;
END
ZATVORI JobCur;
DEALLOCATE JobCur;
GO