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 a SQL Server în mediu. În această situație, se poate produce o încălcare de acces și agentul de distribuire SQL Server replicare se defectează. În plus, se generează un fișier de imagine mini.
Rezolvare
După ce aplicați remedierea rapidă, agentul se va închide grațios în loc să se prăbușească împreună cu un fișier de imagine memorie. Puteți adăuga un pas suplimentar pentru lucrare în activitatea agentului de distribuire pentru a reporni automat agentul atunci când agentul s-a oprit și a avut starea "programat pentru repornire". Pentru mai multe informații despre cum să adăugați un pas suplimentar pentru lucrare în activitatea agentului de distribuire, consultați secțiunea mai multe informații. Problema a fost remediată pentru prima dată în următoarea actualizare cumulativă de 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
Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:
Pachetul de actualizare de remediere rapidă pentru SQL Server 2008 R2 Service Pack 1Remedierea pentru această problemă a fost lansată pentru prima dată în pachetul de actualizare de remediere rapidă pentru SQL Server 2008 R2 Service Pack 1.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.
Mai multe informații
După ce aplicați remedierea rapidă, Adăugați următorul script la activitatea agentului de distribuire:DECLARE @JobID BINARY(16)DECLARE @AgentID intDECLARE @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) = 3OPEN JobCurFETCH NEXT FROM JobCur INTO @JobID, @AgentIDWHILE @@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 was scheduled for retry. Performing restart now'',16,1)' EXEC msdb.dbo.sp_add_jobstep @job_id=@JobID, @database_name=N'distribution', @step_name=N'Check for retry', @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;ENDCLOSE JobCur;DEALLOCATE JobCur;GO