MSSQL_ENG002627

gäller för:SQL ServerAzure SQL Managed Instance

Meddelandedetaljer

Attribute Value
Produktnamn SQL Server
Händelse-ID 2627
Händelsekälla MSSQLSERVER
Component SQL Server-databasmotor
Symboliskt namn N/A
Meddelandetext Brott mot %ls-begränsning "%.*ls". Det går inte att infoga dubblettnyckeln i objektet%.*ls.

Explanation

Detta är ett allmänt fel som kan uppstå oavsett om en databas är replikerad eller inte. I replikerade databaser uppstår felet vanligtvis eftersom primärnycklar inte har hanterats korrekt över topologin. I en distribuerad miljö är det avgörande att säkerställa att samma värde inte infogas i en primärnyckelkolumn eller någon annan unik kolumn på mer än en nod. Möjliga orsaker är följande:

  • Insättningar och uppdateringar i en rad sker på mer än en nod. Sammanslagen replikering och uppdaterbara prenumerationer för transaktionell replikering ger båda konfliktdetektering och lösning, men det är fortfarande att föredra att infoga eller uppdatera en viss rad på endast en nod. Peer-to-peer-transaktioner erbjuder inte konfliktupptäckt och lösning; Det kräver att inserts och uppdateringar partitioneras.

  • En rad lades in vid en prenumerant som skulle vara skrivskyddad. Prenumeranter på snapshot-publikationer bör behandlas som skrivskyddade, liksom prenumeranter på transaktionspublikationer, såvida inte uppdaterbara prenumerationer eller peer-to-peer-transaktionell replikation används.

  • En tabell med en identitetskolumn används, men kolumnen hanteras inte korrekt.

Användaråtgärd

Den åtgärd som krävs beror på anledningen till att felet togs upp:

  • Insättningar och uppdateringar i en rad sker på mer än en nod.

    Oavsett vilken typ av replikering som används rekommenderar vi att du partitionerar insättningar och uppdateringar när det är möjligt, eftersom detta minskar den bearbetning som krävs för konfliktupptäckt och lösning. För peer-to-peer transaktionell replikering krävs partitionering av insättningar och uppdateringar. Mer information finns i Peer-to-Peer Transaktionsreplikering.

  • En rad lades in vid en prenumerant som skulle vara skrivskyddad.

    Sätt inte in eller uppdatera rader hos prenumeranten om du inte använder sammanslagen replikering, transaktionell replikering med uppdaterbara prenumerationer eller peer-to-peer-transaktionell replikering.

  • En tabell med en identitetskolumn används, men kolumnen hanteras inte korrekt.

    För sammanslagen replikering och transaktionell replikering med uppdaterbara prenumerationer bör identitetskolumner hanteras automatiskt genom replikering. För peer-to-peer-transaktionell replikation måste de hanteras manuellt. Mer information finns i Replikera identitetskolumner.