Condividi tramite


MSSQL_ENG002601

Si applica a: SQL Server Istanza gestita di SQL di Azure

Dettagli messaggio

Attributo Valore
Nome prodotto SQL Server
ID evento 2601
Origine evento MSSQLSERVER
Componente Motore di database di SQL Server
Nome simbolico N/D
Testo del messaggio Impossibile inserire una riga di chiave duplicata nell'oggetto '%.*ls' con indice univoco '%.*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.

  • Nella replica di tipo merge questo errore può verificarsi anche durante un inserimento nella tabella di sistema MSmerge_contents. L'errore generato è simile all'errore "Impossibile inserire la riga di chiave duplicata nell'oggetto 'MSmerge_contents' con indice univoco 'ucl1SycContents'".

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 altre informazioni, vedere Peer-to-Peer Transactional Replication.

  • È 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 altre informazioni, vedere Replicare colonne Identity.

  • L'errore si verifica durante un inserimento nella tabella di sistema MSmerge_contents.

    Tale errore può verificarsi a causa di un valore non corretto per la proprietà del filtro join join_unique_key. Tale proprietà deve essere impostata su TRUE solo se la colonna unita in join nella tabella padre è univoca. Se la proprietà è impostata su TRUE ma la colonna non è univoca, viene generato l'errore. Per ulteriori informazioni sull'impostazione di questa proprietà, vedere Definizione e modifica di un filtro di join tra articoli di merge.