KB2861456 — LABOJUMS: piekļuves pārkāpums replicēšanā Izplatīšanas aģents SQL Server transakciju replicēšanā

Attiecas uz
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)

Pazīmes

Pieņemsim, ka jums ir Microsoft SQL Server 2008 R2, SQL Server 2012 vai SQL Server 2014 transakciju replicēšanas vide. Vidē ir vairākas SQL Server izplatīšanas instances. Šādā gadījumā var rasties piekļuves pārkāpums un SQL Server replicēšanas izplatīšanas aģents avarē. Turklāt tiek ģenerēts mini izmetes fails.

Risinājums

Pēc labojumfaila lietošanas aģents tiks novērsts pareizi, nevis avarēs kopā ar izmetes failu. Sadales aģenta darbā varat pievienot papildu darba darbību, lai automātiski restartētu aģentu, kad aģents ir apstājies un tam ir statuss "ieplānota restartēšana".

Papildinformāciju par to, kā pievienot papildu darba darbību sadales aģenta darbā, skatiet sadaļā Papildinformācija.

Šī problēma pirmo reizi tika novērsta nākamajā SQL Server kumulatīvajā atjauninājumā.

1. kumulatīvais atjauninājums sistēmai SQL Server 2014 /en-us/help/2931693

9. kumulatīvais atjauninājums operētājsistēmai SQL Server 2012 SP1 /en-us/help/2931078

Kumulatīvais atjauninājums 11 operētājsistēmai SQL Server 2012 /lv-LV/help/2908007

SQL Server 2008 R2 SP2 9. kumulatīvais atjauninājums /en-us/help/2887606

Par SQL Server kumulatīvajiem atjauninājumiem

Katrā jaunajā SQL Server kumulatīvajā atjauninājumā ir visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos SQL Server kumulatīvos atjauninājumus:

      

Labojumfailu atjaunināšanas pakotne SQL Server 2008 R2 1. servisa pakotneiŠīs problēmas labojums pirmo reizi tika izlaists labojumfailu atjauninājumu pakotnē SQL Server 2008 R2 1. servisa pakotnei.

Statuss

Microsoft apstiprināja, ka šī ir problēma Microsoft produktos, kas norādīti sadaļā "attiecas uz".

Papildinformācija

Pēc labojumfaila lietošanas pievienojiet tālāk norādīto skriptu sadales aģenta uzdevumam: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, piemēram, '%Put text mask to identify your publisher DB jobs here%' AND Cat.name = 'REPL-Distribution'
        GRUPĒT PĒC Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
ATVĒRT JobCur
IENEST NĀKAMO NO JobCur INTO @JobID, @AgentID
KAMĒR @@FETCH_STATUS = 0 SĀKAS
        IF (@JobID nav NULL) BEGIN
                set @command = N'if (atlasīt top 1 runstatus no MSdistribution_history kur agent_id = ' + convert(varchar, @AgentID)+ N' secība pēc timestamp desc) = 5
        raiserror(''Aģentam bija ieplānots atkārtots mēģinājums. Veic restartēšanu tūlīt'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'izplatīšana', @step\_name=N'Pārbaudīt, vai nav atkārtota mēģinājuma', @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
        ATNEST NĀKAMO NO JobCur INTO @JobID, @AgentID;
END
AIZVĒRT JobCur;
SADALĪT JobCur;
GO