KB2861456 - REMEDIERE: Violare acces în replicare Agent de distribuire în SQL Server reproducere tranzacțională

Se aplică la
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)

Simptome

Să presupunem că aveți un mediu de replicare tranzacțională Microsoft SQL Server 2008 R2, SQL Server 2012 sau SQL Server 2014. Există mai multe instanțe de distribuire ale SQL Server în mediu. În această situație, poate apărea o încălcare a accesului și agentul de distribuire SQL Server Replication se defectează. În plus, este generat un fișier mini-dump.

Rezolvare

După ce aplicați remedierea rapidă, agentul se va închide corect în loc să se blocheze împreună cu un fișier dump. Puteți adăuga un pas suplimentar de activitate în activitatea Agent de distribuire pentru a reporni automat agentul atunci când agentul s-a oprit și are starea "planificat pentru repornire".

Pentru mai multe informații despre adăugarea unui pas de activitate suplimentar în activitatea de Agent de distribuție, consultați secțiunea Mai multe informații.

Problema a fost remediată pentru prima dată în următoarea actualizare cumulativă a SQL Server.

Actualizarea cumulativă 1 pentru SQL Server 2014 /en-us/help/2931693

Actualizarea cumulativă 9 pentru SQL Server 2012 SP1 /en-us/help/2931078

Actualizarea cumulativă 11 pentru SQL Server 2012 /en-us/help/2908007

Actualizarea cumulativă 9 pentru SQL Server 2008 R2 SP2 /en-us/help/2887606

Despre actualizările cumulative pentru SQL Server

Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:

      

Pachetul de actualizare pentru remedieri rapide pentru SQL Server 2008 R2 Service Pack 1Remedierea pentru această problemă a fost lansată pentru prima dată în pachetul de actualizare pentru remedieri rapide pentru SQL Server 2008 R2 Service Pack 1.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.

Mai multe informații

După ce aplicați remedierea rapidă, adăugați următorul script la activitatea Agent de distribuire: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 like '%Put Text Mask To Identify Your Publisher DB Jobs Here%' AND Cat.name = 'REPL-Distribution'
        GROUP BY Job.job_id, Agent.id
        HAVING COUNT(step_id) = 3
DESCHIDEȚI JobCur
PRELUAȚI URMĂTORUL DE LA JobCur ÎN @JobID, @AgentID
WHILE @@FETCH_STATUS = 0 BEGIN
        IF (@JobID nu este NULL) BEGIN
                set @command = N'if (select top 1 runstatus din MSdistribution_history unde agent_id = ' + convert(varchar, @AgentID)+ N' order by timestamp desc) = 5
        raiserror(''Agentul a fost programat pentru reîncercare. Se efectuează repornirea acum'',16,1)'
                EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, @database\_name=N'distribuire', @step\_name=N'Verificare reîncercări', @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
        PRELUAȚI URMĂTORUL DE LA JobCur ÎN @JobID, @AgentID;
END
ÎNCHIDEȚI JobCur;
DEALLOCATE JobCur;
GO