Symptômes
Supposons que vous disposez d’un environnement de réplication transactionnelle Microsoft SQL Server 2008 R2, SQL Server 2012 ou SQL Server 2014. Il existe plusieurs instances de distribution de SQL Server dans l’environnement. Dans ce cas, une violation d’accès peut se produire et l’agent de distribution de réplication SQL Server se bloque. En outre, un mini fichier de vidage est généré.
Résolution
Après l’application du correctif, l’agent s’arrête correctement au lieu de s’arrêter avec un fichier d’image mémoire. Vous pouvez ajouter une étape de travail supplémentaire dans le travail de l’Agent de distribution pour redémarrer automatiquement l’agent lorsque l’agent s’est arrêté et a le status « redémarrage planifié ».
Pour plus d’informations sur la façon d’ajouter une étape de travail supplémentaire dans le travail de l’Agent de distribution, reportez-vous à la section Plus d’informations.
Le problème a été résolu pour la première fois dans la mise à jour cumulative suivante de SQL Server.
Mise à jour cumulative 1 pour SQL Server 2014 /en-us/help/2931693
Mise à jour cumulative 9 pour SQL Server 2012 SP1 /en-us/help/2931078
Mise à jour cumulative 11 pour SQL Server 2012 /en-us/help/2908007
Mise à jour cumulative 9 pour SQL Server 2008 R2 SP2 /en-us/help/2887606
À propos des mises à jour cumulatives pour SQL Server
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
- Dernière mise à jour cumulative pour SQL Server 2014
- Dernière mise à jour cumulative pour SQL Server 2012 SP1
- Dernière mise à jour cumulative pour SQL Server 2012
- Dernière mise à jour cumulative pour SQL Server 2008 R2 SP2
Correctif logiciel pour SQL Server 2008 R2 Service Pack 1Le correctif pour résoudre ce problème a été publié pour la première fois dans le package de mise à jour de correctif logiciel pour SQL Server 2008 R2 Service Pack 1.
État
Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».
Informations supplémentaires
Après avoir appliqué le correctif logiciel, ajoutez le script suivant au travail de l’Agent de distribution :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
OPEN JobCur
FETCH NEXT FROM JobCur INTO @JobID, @AgentID
ALORS QUE @@FETCH_STATUS = 0 DÉBUT
SI (@JobID n’est pas NULL) DÉBUT
set @command = N’if (select top 1 runstatus from MSdistribution_history where agent_id = ' + convert(varchar, @AgentID)+ N’order by timestamp desc) = 5
raiserror(''L’agent devait être réessayé. Exécution du redémarrage maintenant'',16,1)'
EXEC msdb.dbo.sp_add_jobstep @job\_id=@JobID, 'distribution', @step\_name=N'Vérifier s’il faut réessayer', @step\_id=4, @on\_fail\_action=4@on\_fail\_step\_id=1@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
Fin
FETCH NEXT FROM JobCur INTO @JobID, @AgentID;
Fin
FERMER JobCur ;
DÉSALLOUER JobCur ;
GO