KB2861456 – OPRAVA: Narušenie prístupu v distribučnom agentovi replikácie v SQL Server transakčnej replikácii

Vzťahuje sa 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)

Príznaky

Predpokladajme, že máte prostredie transakčnej replikácie Microsoft SQL Server 2008 R2, SQL Server 2012 alebo SQL Server 2014. V prostredí existuje viacero inštancií distribúcie SQL Server. V tomto prípade môže dôjsť k narušeniu prístupu a zlyhaniu distribučného agenta replikácie SQL Server. Okrem toho sa vygeneruje minivýpisový súbor.

Riešenie

Po použití rýchlej opravy sa agent riadne vypne namiesto toho, aby zlyhal spolu so súborom s výpisom. Do úlohy distribučného agenta môžete pridať ďalší krok úlohy na automatické reštartovanie agenta, keď sa zastaví a má stav Naplánované reštartovanie.

Ďalšie informácie o pridávaní dodatočného kroku úlohy do úlohy distribučného agenta nájdete v časti Ďalšie informácie.

Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii SQL Server.

Kumulatívna aktualizácia 1 pre SQL Server 2014 /en-us/help/2931693

Kumulatívna aktualizácia 9 pre SQL Server 2012 SP1 /en-us/help/2931078

Kumulatívna aktualizácia 11 pre SQL Server 2012 /en-us/help/2908007

Kumulatívna aktualizácia 9 pre SQL Server 2008 R2 SP2 /en-us/help/2887606

Informácie o kumulatívnych aktualizáciách pre SQL Server

Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:

      

Balík aktualizácie rýchlych opráv pre balík Service Pack 1 pre SQL Server 2008 R2 Oprava tohto problému bola prvýkrát vydaná v balíku aktualizácie rýchlych opráv pre balík Service Pack 1 pre SQL Server 2008 R2.

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Ďalšie informácie

Po použití rýchlej opravy pridajte do úlohy distribučného agenta nasledujúci skript: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 napríklad "%Put Text Mask To Identify Your Publisher DB Jobs Here%" A Cat.name = "REPL-Distribution"
        GROUP BY Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
OPEN JobCur
FETCH NEXT FROM JobCur INTO ,@JobID@AgentID
KÝM @@FETCH_STATUS = 0 BEGIN
        AK (@JobID nie je NULL) BEGIN
                set @command = N'if (select top 1 runstatus from MSdistribution_history kde agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agent bol naplánovaný na zopakovanie. Vykonáva sa reštart teraz'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, @database\_name=N'distribúcia', @step\_name=N'Skontrolovať opakovaný pokus', @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
        END
        FETCH NEXT FROM JobCur INTO ; @JobID@AgentID;
END
CLOSE JobCur;
DEALLOCATE JobCur;
GO