KB2518808-FIX : « expression : (pCopySrc-Command) <= (ent) cmdLength » lorsque vous ajoutez une colonne à une table publiée dans une publication transactionnelle dans SQL Server 2008 R2

S’applique à : SQL Server 2008 R2

Microsoft distribue les correctifs Microsoft SQL Server 2008 R2 sous la forme d’un fichier téléchargeable. Dans la mesure où les correctifs sont cumulatifs, chaque nouvelle version contient tous les correctifs et les correctifs de sécurité inclus dans la version de correctif SQL Server 2008 R2 antérieure.

Symptômes


Prenons l’exemple du scénario suivant :
  • Vous créez une publication transactionnelle dans SQL Server 2008 R2.
  • Vous pouvez ajouter un tableau en tant qu’article à la composition.
  • Vous initialisez la composition transactionnelle et vous générez la capture initiale.
  • Vous essayez d’exécuter une requête pour ajouter une nouvelle colonne à la table. Par exemple, vous essayez d’exécuter la requête suivante pour ajouter le nom de la colonne<> colonne au nom de la table<> :
    Alter table <table name> add <column name> int null
Dans ce scénario, la requête ne s’exécute pas, et vous recevez un message d’erreur qui ressemble à ce qui suit :
Emplacement : replschema. cpp : 1305Expression : (pCopySrc-Command) <= (ent) cmdLengthSPID : <SPID>ID de processus : <ID de processus>
MSG 4902, niveau 16, état 1, ligne 2Cannot recherchez l’objet <nom de la table> parce qu’il n’existe pas ou que vous ne disposez pas des autorisations appropriées. Lorsque ce problème se produit, le message d’erreur suivant est consigné dans le fichier journal des erreurs SQL Server.
Vous pouvez également rencontrer l’erreur légèrement différente suivante :
MSG 3624, niveau 20, état 1, procédure sp_replflush, la vérification d’assertion système de la ligne 1A a échoué. Pour plus d’informations, consultez le journal des erreurs SQL Server. En règle générale, un échec d’assertion est lié à un bogue logiciel ou à des données endommagées. Pour vérifier la corruption de la base de données, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft lors de l’installation, un mini-vidage sera envoyé à Microsoft. Il est possible qu’une mise à jour soit disponible à partir de Microsoft dans le dernier Service Pack ou dans un QFE du support technique.
De plus, les entrées suivantes sont enregistrées dans le journal des erreurs :
2011-03-25 08:56:14.71 spid55 erreur : 17066, gravité : 16, État : 1.2011-03-25 08:56:14.71 spid55 SQL Server assertion : fichier : <replschema. cpp>, ligne = 1305 Failed Assertion = ' (pCopySrc-Command) <= (int) cmdLength'. Cette erreur est éventuellement liée au minutage. Si l’erreur persiste après avoir reexécuté l’instruction, utilisez DBCC CHECKDB pour vérifier l’intégrité structurelle de la base de données, ou redémarrez le serveur pour vérifier que les structures de données en mémoire ne sont pas endommagées. 2011-03-25 08:56:14.92 spid55 erreur : 3624, gravité : 20, État : 1.2011-03-25 08:56:14.92 spid55 Pour plus d’informations, consultez le journal des erreurs SQL Server. En règle générale, un échec d’assertion est lié à un bogue logiciel ou à des données endommagées. Pour vérifier la corruption de la base de données, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft lors de l’installation, un mini-vidage sera envoyé à Microsoft. Il est possible qu’une mise à jour soit disponible à partir de Microsoft dans le dernier Service Pack ou dans un QFE du support technique.

Résolution


Informations sur les mises à jour cumulatives

SQL Server 2008 R2 Service Pack 1

Le correctif de ce problème a été émis pour la première fois dans la mise à jour cumulative 1 pour SQL Server 2008 R2 Service Pack 1. Pour plus d’informations sur la façon d’obtenir ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
2544793 Package de mise à jour cumulative 1 pour SQL Server 2008 R2 Service Pack 1
Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version du correctif contient tous les correctifs et les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008 R2. Nous vous recommandons d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2567616 Builds SQL Server 2008 R2 publiées après la sortie de SQL Server 2008 R2 Service Pack 1
SQL Server 2008 R2 Le correctif de ce problème a été émis pour la première fois dans la mise à jour cumulative 7. Pour plus d’informations sur la façon d’obtenir ce package de mise à jour cumulative pour SQL Server 2008 R2, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
2507770 Package de mise à jour cumulative 7 pour SQL Server 2008 R2
Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version du correctif contient tous les correctifs et les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008 R2. Nous vous recommandons d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
981356 Builds SQL Server 2008 R2 publiées après la sortie de SQL Server 2008 R2

Solution de contournement


Pour contourner ce problème, modifiez le nom de la table de sorte qu’elle contienne moins de 8 caractères.

Statut


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.