MSSQL_ENG002627

Dettagli messaggio

Nome prodotto

SQL Server

Versione prodotto

10.50

Numero di build del prodotto

 

ID evento

2627

Origine evento

MSSQLSERVER

Componente

Motore di database di SQL Server

Nome simbolico

N/A

Testo del messaggio

Violazione del vincolo %ls '%.*ls'. Impossibile inserire la chiave duplicata nell'oggetto '%.*ls'.

Spiegazione

Questo errore generale può essere generato indipendentemente dal fatto che un database venga o meno replicato. Nei database replicati l'errore viene di solito generato in quanto le chiavi primarie non sono state gestite correttamente nella topologia. In un ambiente distribuito è fondamentale garantire che lo stesso valore non venga inserito in una colonna chiave primaria o in qualsiasi altra colonna univoca in più di un nodo. Le cause possibile includono:

  • Le operazioni di inserimento e aggiornamento su una riga vengono eseguite in più di un nodo. Sebbene la replica di tipo merge e le sottoscrizioni aggiornabili per la replica transazionale consentano il rilevamento e la risoluzione dei conflitti, è preferibile inserire o aggiornare una determinata riga in un unico nodo. La replica transazionale di tipo peer-to-peer non fornisce funzioni di rilevamento e risoluzione dei conflitti e richiede il partizionamento degli inserimenti e degli aggiornamenti.

  • È stata inserita una riga in un Sottoscrittore che dovrebbe essere di sola lettura. I Sottoscrittori delle pubblicazioni snapshot devono essere considerati come di sola lettura, analogamente ai Sottoscrittori delle pubblicazioni transazionali a meno che non vengano utilizzate sottoscrizioni aggiornabili o una replica transazione peer-to-peer.

  • Viene utilizzata una tabella con una colonna Identity, ma la colonna non è gestita in modo appropriato.

Azione utente

L'azione richiesta dipende dal motivo per il quale è stato generato l'errore:

  • Le operazioni di inserimento e aggiornamento su una riga vengono eseguite in più di un nodo.

    Indipendentemente dal tipo di replica utilizzato, è consigliabile partizionare inserimenti e aggiornamenti quando possibile, in modo da ridurre l'elaborazione richiesta per il rilevamento e la risoluzione dei conflitti. Per la replica transazionale peer-to-peer, è richiesto il partizionamento di inserimenti e aggiornamenti. Per ulteriori informazioni, vedere Replica transazionale peer-to-peer.

  • È stata inserita una riga in un Sottoscrittore che dovrebbe essere di sola lettura.

    Non inserire o aggiornare righe nel Sottoscrittore a meno che non si stia utilizzando la replica di tipo merge, la replica transazionale con sottoscrizioni aggiornabili o la replica transazionale peer-to-peer.

  • Viene utilizzata una tabella con una colonna Identity, ma la colonna non è gestita in modo appropriato.

    Per la replica di tipo merge e la replica transazionale con sottoscrizioni aggiornabili, le colonne Identity devono essere gestite automaticamente dalla replica. Per la replica transazionale peer-to-peer, devono invece essere gestite manualmente. Per ulteriori informazioni, vedere Replica di colonne Identity.