KB2861456 – PATAISYMAS: Replikavimo tarnybos kreipties pažeidimas Paskirstymo agentas „SQL Server“ operacijų replikavime

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

Požymiai

Tarkime, kad turite "Microsoft „SQL Server“ 2008 R2", "„SQL Server“ 2012" arba "„SQL Server“ 2014 Transactional Replication" aplinką. Aplinkoje yra keli „SQL Server“ platinimo egzemplioriai. Tokiu atveju gali įvykti prieigos pažeidimas ir „SQL Server“ replikavimo paskirstymo agentas sugenda. Be to, sugeneruojamas mini iškelties failas.

Sprendimas

Pritaikius karštąją pataisą, agentas sklandžiu būdu išsijungs, o ne sugenda kartu su iškelties failu. Į paskirstymo agento užduotį galite įtraukti papildomą užduoties veiksmą, kad agentas būtų automatiškai paleistas iš naujo, kai agentas sustoja ir jo būsena yra "suplanuota paleisti iš naujo".

Daugiau informacijos apie tai, kaip įtraukti papildomą užduoties veiksmą paskirstymo agento užduotyje, ieškokite skyriuje Daugiau informacijos.

Problema pirmą kartą buvo išspręsta šiame kaupiamajame „SQL Server“ naujinime.

1 kaupiamasis naujinimas, skirtas „SQL Server“ 2014 /en-us/help/2931693

9 kaupiamasis naujinimas, skirtas „SQL Server“ 2012 SP1 /en-us/help/2931078

11 kaupiamasis naujinimas, skirtas „SQL Server“ 2012 /en-us/help/2908007

9 kaupiamasis naujinimas, skirtas „SQL Server“ 2008 R2 SP2 /en-us/help/2887606

Apie kaupiamuosius „SQL Server“ naujinimus

Kiekviename naujame „SQL Server“ kaupiamajame naujinime yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius "„SQL Server“" kaupiamuosius naujinimus:

      

Karštųjų pataisų naujinimo paketas, skirtas „SQL Server“ R2 1 pakeitimų paketuiŠios problemos pataisa pirmą kartą buvo išleista karštųjų pataisų naujinimo pakete, skirtame „SQL Server“ R2 1 pakeitimų paketui.

Būsena

„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.

Daugiau informacijos

Pritaikę karštąją pataisą, į paskirstymo agento užduotį įtraukite šį scenarijų:DEKLARUOTI @JobID DVEJETAINĮ(16)
DECLARE int @AgentID
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 agentas 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'
        GRUPUOTI PAGAL Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
ATIDARYTI JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
TUO TARPU @@FETCH_STATUS = 0 BEGIN
        IF (@JobID is not NULL) BEGIN
                set @command = N'if (pasirinkite top 1 runstatus from MSdistribution_history where agent_id = ' + convert(varchar, N' @AgentID)+ order by timestamp desc) = 5
        raiserror(''Agentas buvo suplanuotas pakartoti. Atliekamas paleidimas iš naujo dabar'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'paskirstymas', @step\_name=N'Tikrinti, ar yra pakartotinai', @step\_id=4, @on\_fail\_step\_id=1@on\_fail\_action=4@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
UŽDARYTI JobCur;
PASKIRSTYTI "JobCur";
GO