MSSQL_ENG002601

Détails du message

Nom du produit

SQL Server

Version du produit

10.0

Numéro de version

 

ID d'événement

2601

Source de l'événement

MSSQLSERVER

Composant

Moteur de base de données SQL Server

Nom symbolique

Non applicable

Texte du message

Impossible d'insérer une ligne de clé en double dans l'objet « %.*ls » avec un index unique « %.*ls ».

Explication

C'est une erreur générale qui peut être déclenchée qu'une base de données soit répliquée ou non. Dans les bases de données répliquées, l'erreur est généralement déclenchée car les clés primaires n'ont pas été gérés de manière appropriée à travers la topologie. Dans un environnement distribué, il est primordial de s'assurer que la même valeur n'est pas insérée dans une colonne de clé primaire ou toute autre colonne unique sur plus d'un seul nœud. Les raisons peuvent être les suivantes :

  • Les insertions et mises à jour sur une ligne se produisent sur plus d'un seul nœud. La réplication de fusion et les abonnements pouvant être mis à jour pour la réplication transactionnelle permettent tous deux la détection et la résolution des conflits, mais il est quand même préférable de n'insérer ou de ne mettre à jour une ligne donnée que sur un seul nœud. La réplication transactionnelle d'égal à égal ne permet pas la détection et la résolution des conflits, elle nécessite que les insertions et mises à jour soient partitionnées.

  • Une ligne a été insérée sur un abonné qui devrait être en lecture seule. Les abonnés aux publications de captures instantanées, ainsi que les abonnés au publications transactionnelles devraient être traités comme étant en lecture seule à moins d'utiliser des abonnements pouvant être mis à jour ou la réplication transactionnelle d'égal à égal.

  • Une table avec une colonne d'identité est utilisée, mais la colonne n'est par gérée de façon appropriée.

  • Dans la réplication de fusion, cette erreur peut également se produite lors d'une insertion dans une table système MSmerge_contents ; l'erreur déclenchée est similaire à : impossible d'insérer une ligne de clé dupliquée dans l'objet « MSmerge_contents » d'index unique « ucl1SycContents ».

Action utilisateur

L'action requise dépend de la raison du déclenchement de l'erreur :

  • Les insertions et mises à jour sur une ligne se produisent sur plus d'un seul nœud.

    Quel que soit le type de réplication utilisé, il est recommandé de partitionner les insertions et mises à jour chaque fois que cela est possible, car cela réduit le traitement nécessaire pour la détection et la résolution des conflits. Pour la réplication transactionnelle d'égal à égal, le partitionnement d'insertions et de mises à jour est nécessaire. Pour plus d'informations, consultez Réplication transactionnelle d'égal à égal.

  • Une ligne a été insérée sur un abonné qui devrait être en lecture seule.

    N'insérez pas ou ne mettez pas à jour de lignes sur l'Abonné à moins d'utiliser la réplication de fusion, la réplication transactionnelle avec abonnements pouvant être mis à jour ou la réplication transactionnelle d'égal à égal.

  • Une table avec une colonne d'identité est utilisée, mais la colonne n'est par gérée de façon appropriée.

    Pour la réplication de fusion et la réplication transactionnelle avec abonnements pouvant être mis à jour, les colonnes d'identité doivent être gérées automatiquement par la réplication. Pour la réplication transactionnelle d'égal à égal, elles doivent être gérées manuellement. Pour plus d'informations, consultez Réplication de colonnes d'identité.

  • L'erreur se produit pendant l'insertion dans une table système MSmerge_contents.

    Cette erreur peut se produire en raison d'une valeur incorrecte pour la propriété du filtre de jointure join_unique_key. Cette propriété doit être définie avec la valeur TRUE seulement si la colonne de jointure dans la table parente est unique. Si la propriété est définie avec la valeur TRUE mais que la colonne n'est pas unique, cette erreur est déclenchée. Pour plus d'informations sur la définition de cette propriété, consultez Procédure : définir et modifier un filtre de jointure entre des articles de fusion (SQL Server Management Studio) et Procédure : définir et modifier un filtre de jointure entre des articles de fusion (programmation Transact-SQL de la réplication).