MSSQL_ENG002627

Détails du message

Nom du produit

SQL Server

Version du produit

10.0

Numéro de version

 

ID d'événement

2627

Source de l'événement

MSSQLSERVER

Composant

Moteur de base de données SQL Server

Nom symbolique

Non applicable

Texte du message

Violation de %ls contrainte « %.*ls ». Impossible d'insérer une clé dupliquée dans l'objet « %.*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.

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é.