Compartir por


MSSQL_ENG002627

Se aplica a: SQL Server Azure SQL Managed Instance

Detalles del mensaje

Attribute Valor
Nombre del producto SQL Server
Id. de evento 2627
Origen de eventos MSSQLSERVER
Componente Motor de base de datos de SQL Server
Nombre simbólico N/D
Texto del mensaje Infracción de la restricción '%.*ls'. No se puede insertar una fila de clave duplicada en el objeto '%.*ls'.

Explicación

Se trata de un error general que puede producirse independientemente de que la base de datos esté replicada o no. En las bases de datos replicadas, el error suele producirse cuando las claves principales no se han administrado adecuadamente en la topología. En un entorno distribuido es fundamental asegurarse de que no se inserta el mismo valor en una columna de clave principal o en otra columna única en más de un nodo. Entre las posibles causas figuran:

  • Se están llevando a cabo inserciones y actualizaciones en una fila en más de un nodo. Tanto la replicación de mezcla como las suscripciones actualizables de la replicación transaccional ofrecen detección y resolución de conflictos, aunque es preferible insertar o actualizar una fila concreta solo en un nodo. La replicación transaccional del mismo nivel no ofrece detección y resolución de conflictos; exige que las inserciones y las actualizaciones estén divididas en particiones.

  • Se ha insertado una fila en un suscriptor que debería ser de solo lectura. Los suscriptores de publicaciones de instantáneas deben tratarse como de solo lectura, al igual que los suscriptores de publicaciones transaccionales, a menos que se utilicen suscripciones actualizables o replicación transaccional del mismo nivel.

  • Se está utilizando una tabla con una columna de identidad, pero la columna no está correctamente administrada.

Acción del usuario

La acción que debe llevarse a cabo depende del motivo por el que se produjo el error:

  • Se están llevando a cabo inserciones y actualizaciones en una fila en más de un nodo.

    Independientemente del tipo de replicación utilizada, se recomienda que, siempre que sea posible, las inserciones y las actualizaciones se dividan en particiones, ya que esto reduce el procesamiento necesario para la detección y resolución de conflictos. En la replicación transaccional del mismo nivel, se exige dividir en particiones las inserciones y las actualizaciones. Para obtener más información, consulte Peer-to-Peer Transactional Replication.

  • Se ha insertado una fila en un suscriptor que debería ser de solo lectura.

    No inserte ni actualice filas en el suscriptor a menos que esté utilizando replicación de mezcla, replicación transaccional con suscripciones actualizables o replicación transaccional del mismo nivel.

  • Se está utilizando una tabla con una columna de identidad, pero la columna no está correctamente administrada.

    En la replicación de mezcla y la replicación transaccional con suscripciones actualizables, las columnas de identidad deben ser administradas automáticamente por la replicación. En la replicación transaccional de punto a punto, es necesario administrarlas manualmente. Para más información, vea Replicar columnas de identidad.