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:
- Cea mai recentă actualizare cumulativă pentru SQL Server 2014
- Cea mai recentă actualizare cumulativă pentru SQL Server 2012 SP1
- Cea mai recentă actualizare cumulativă pentru SQL Server 2012
- Cea mai recentă actualizare cumulativă pentru SQL Server 2008 R2 SP2
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