Detectar y solucionar conflictos en registros lógicos

 

Se aplica a: SQL Server 2016

En este tema se tratan las diferentes combinaciones de opciones de detección y resolución de conflictos posibles al utilizar registros lógicos. Los conflictos en la replicación de mezcla se producen cuando más de un nodo cambia los mismos datos o, al replicar cambios, la replicación de mezcla encuentra determinados tipos de errores, por ejemplo una infracción de restricción. Para obtener más información acerca de la detección y resolución de conflictos, vea Advanced Merge Replication Conflict Detection and Resolution.

Para especificar el seguimiento de conflictos y el nivel de resolución para un artículo, vea Specify the Conflict Tracking and Resolution Level for Merge Articles.

La manera en la que se detectan conflictos de registros lógicos viene determinada por dos propiedades del artículo: column_tracking y logical_record_level_conflict_detection. Resultado de y versiones posteriores también admiten la detección de nivel de registro lógico.

El logical_record_level_conflict_detection propiedad del artículo puede establecerse en TRUE o FALSE. El valor solamente se debe establecer para el artículo primario de nivel superior y se omitirá en los artículos secundarios. Si este valor es FALSE, la replicación de mezcla detecta los conflictos de versiones anteriores de SQL Server, basados únicamente en el valor de la column_tracking propiedad para el artículo. Si este valor es TRUE, la replicación de mezcla omitirá la column_tracking propiedad del artículo y detectará un conflicto si se realizan cambios en cualquier parte del registro lógico. Por ejemplo, considere este escenario:

Tres registros lógicos de tabla con valores

Un conflicto se detecta si dos usuarios cambian cualquier valor del registro lógico Customer2 en las tablas Customers, Ordersu OrderItems . Este ejemplo conlleva cambios realizados mediante una instrucción UPDATE, pero el conflicto también se puede detectar mediante los cambios realizados con las instrucciones INSERT o DELETE.

De manera predeterminada, la replicación de mezcla utiliza la lógica basada en prioridad para solucionar conflictos. Si se realiza un cambio conflictivo en dos bases de datos de suscriptor, gana el cambio para el suscriptor con la prioridad de suscripción más alta. O bien, si la prioridad es la misma, gana el primer cambio que llegue al publicador. Con la detección en el nivel de fila y de columna, toda la fila ganadora sobrescribe siempre la fila perdedora.

El logical_record_level_conflict_resolution propiedad del artículo puede establecerse en TRUE o FALSE. El valor solamente se debe establecer para el artículo primario de nivel superior y se omitirá en los artículos secundarios. Si el valor es TRUE, todo el registro lógico ganador sobrescribe el registro lógico perdedor. Si es FALSE, las filas ganadoras individuales pueden proceder de diferentes suscriptores o publicadores. Por ejemplo, el suscriptor A puede ganar un conflicto en una fila de la tabla Orders , y el suscriptor B puede ganar en una fila relacionada de la tabla OrderItems . El resultado es un registro lógico con la fila Orders del suscriptor A y la fila OrderItems del suscriptor B.

La aparición de conflictos depende de la configuración de la interacción de detección y resolución de conflictos. En los siguientes ejemplos se supone que se ha utilizado la resolución de conflictos basada en prioridad. Al utilizar registros lógicos, las posibilidades son:

  • Detección en el nivel de fila o columna, resolución en el nivel de fila

  • Detección en el nivel de columna, resolución de registro lógico

  • Detección en el nivel de fila, resolución de registro lógico

  • Detección en el nivel de registro lógico, resolución de registro lógico

Detección en el nivel de fila o columna, resolución en el nivel de fila

En este ejemplo, la publicación se ha configurado de la siguiente manera:

  • column_tracking es TRUE o FALSE

  • logical_record_level_conflict_detection es FALSE

  • logical_record_level_conflict_resolution es FALSE

En este caso, la detección se produce en el nivel de fila o columna, y la resolución tiene lugar en el nivel de fila. Esta configuración se utiliza para aprovechar que todos los cambios de un registro lógico se repliquen como una unidad, pero sin detección ni resolución de conflictos en el nivel de registro lógico.

Detección en el nivel de columna, resolución de registro lógico

En este ejemplo, la publicación se ha configurado de la siguiente manera:

  • column_tracking es TRUE

  • logical_record_level_conflict_detection es FALSE

  • logical_record_level_conflict_resolution es TRUE

Un publicador y un suscriptor empiezan con el mismo conjunto de datos y se define un registro lógico entre las tablas orders y customers . El publicador cambia la columna custcol1 en la tabla customers y la columna ordercol1 en la tabla orders . El suscriptor cambia custcol1 en la misma fila de la tabla customers y la columna ordercol2 en la misma fila de la tabla orders . Los cambios en la misma columna de la tabla customer dan como resultado un conflicto, pero los cambios de la tabla orders no están en conflicto.

Debido a que los conflictos se resuelven en el nivel de registro lógico, los cambios ganadores realizados en el publicador sustituyen a los cambios realizados en las tablas del suscriptor durante el proceso de replicación.

Series de tablas en las que se muestran cambios en filas relacionadas

Detección en el nivel de fila, resolución de registro lógico

En este ejemplo, la publicación se ha configurado de la siguiente manera:

  • column_tracking es FALSE

  • logical_record_level_conflict_detection es FALSE

  • logical_record_level_conflict_resolution es TRUE

Un publicador y un suscriptor empiezan con el mismo conjunto de datos. El publicador cambia la columna custcol1 en la tabla customers . El suscriptor cambia la columna custcol2 en la tabla customers y la columna ordercol2 en la tabla orders . Los cambios en la misma fila de la tabla customers dan como resultado un conflicto, pero los cambios de suscriptor la tabla orders no están en conflicto.

Debido a que los conflictos se resuelven en el nivel de registro lógico, durante la sincronización los cambios ganadores realizados en el publicador reemplazan los cambios realizados en las tablas del suscriptor.

Series de tablas en las que se muestran cambios en filas relacionadas

Detección en el nivel de registro lógico, resolución de registro lógico

En este ejemplo, la publicación se ha configurado de la siguiente manera:

  • logical_record_level_conflict_detection es TRUE

  • logical_record_level_conflict_resolution es TRUE

Un publicador y un suscriptor empiezan con el mismo conjunto de datos. El publicador cambia la columna custcol1 en la tabla customers . El suscriptor cambia la columna ordercol1 en la tabla orders . No hay ningún cambio en la misma fila o columna, pero dado que los cambios se realizan en el mismo registro lógico para custid= 1, los cambios se detectan como un conflicto en el nivel de registro lógico.

Puesto que los conflictos también se resuelven en el nivel de registro lógico, durante la sincronización los cambios ganadores realizados en el publicador reemplazan los cambios realizados en las tablas del suscriptor.

Series de tablas en las que se muestran cambios en filas relacionadas

Agrupar cambios en filas relacionadas con registros lógicos

Adiciones de comunidad

AGREGAR
Mostrar: