KB2861456 - CORRECTIF : Violation d’accès dans la réplication Agent de distribution dans la réplication transactionnelle SQL Server

S’applique à
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)

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 :

      

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