Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La replicación transaccional punto a punto permite insertar, actualizar o eliminar datos en cualquier nodo de una topología y hacer que los cambios de datos se propaguen a los demás nodos. Dado que puede cambiar los datos en cualquier nodo, los cambios de datos en distintos nodos podrían entrar en conflicto entre sí. Si se modifica una fila en más de un nodo, puede provocar un conflicto o incluso una actualización perdida cuando la fila se propaga a otros nodos.
La replicación punto a punto en SQL Server 2008 y versiones posteriores proporciona la opción de habilitar la detección de conflictos en una topología punto a punto. Esta opción ayudaría a evitar los problemas causados por conflictos no detectados, incluido el comportamiento incoherente de la aplicación y las actualizaciones perdidas. Con esta opción habilitada, de forma predeterminada, un cambio en conflicto se trata como un error crítico que provoca el error del Agente de distribución. En caso de conflicto, la topología permanece en un estado incoherente hasta que se resuelve el conflicto y los datos se hacen coherentes en toda la topología.
Nota:
Para evitar posibles incoherencias de datos, asegúrese de evitar conflictos en una topología punto a punto, incluso con la detección de conflictos habilitada. Para asegurarse de que las operaciones de escritura de una fila determinada se realicen solo en un nodo, las aplicaciones que acceden y cambian los datos deben dividir las operaciones de inserción, actualización y eliminación. Esta creación de particiones garantiza que las modificaciones de una fila determinada que se originan en un nodo se sincronicen con todos los demás nodos de la topología antes de que un nodo diferente modifique la fila. Si una aplicación requiere capacidades sofisticadas de detección y resolución de conflictos, use la replicación por mezcla. Para obtener más información, consulte Replicación de mezcla y Detección y resolución de conflictos de replicación de mezcla.
Descripción de conflictos y detección de conflictos
En una base de datos única, los cambios realizados en la misma fila por diferentes aplicaciones no provocan un conflicto. Esto se debe a que las transacciones se serializan y los bloqueos se usan para controlar los cambios simultáneos. En un sistema distribuido asincrónico, como la replicación punto a punto, las transacciones actúan independientemente en cada nodo; y no hay ningún mecanismo para serializar transacciones entre varios nodos. Se podría usar un protocolo como la confirmación en dos fases, pero esto afecta significativamente al rendimiento.
En sistemas como la replicación punto a punto, no se detectan conflictos cuando se confirman cambios en pares individuales. En su lugar, se detectan cuando esos cambios se replican y se aplican en otros pares. En la replicación punto a punto, los procedimientos almacenados detectan conflictos que aplican cambios a cada nodo, en función de una columna oculta en cada tabla publicada. Esta columna oculta almacena un identificador que combina un identificador de origen que se especifica para cada nodo y la versión de la fila. Durante la sincronización, el Agente de distribución ejecuta procedimientos para cada tabla. Estos procedimientos aplican operaciones de inserción, actualización y eliminación de otros pares. Si uno de los procedimientos detecta un conflicto cuando lee el valor de la columna oculta, genera el error 22815 que tiene un nivel de gravedad de 16:
A conflict of type '%s' was detected at peer %d between peer %d (incoming), transaction id %s and peer %d (on disk), transaction id %s
De forma predeterminada, este error hace que el Agente de distribución deje de aplicar cambios a ese nodo. Para obtener información sobre cómo controlar los conflictos detectados, vea "Control de conflictos" más adelante en este tema.
Nota:
Solo puede acceder a la columna oculta un usuario que haya iniciado sesión a través de la conexión de administrador dedicado (DAC). Para obtener información sobre la DAC, vea Conexión de diagnóstico para administradores de bases de datos.
La replicación punto a punto detecta los siguientes tipos de conflictos:
Insertar inserción
Todas las filas de cada tabla que participan en la replicación punto a punto se identifican de forma única mediante valores de clave principal. Un conflicto de inserción ocurre cuando se ha insertado una fila con el mismo valor de clave en más de un nodo.
Actualización-actualización
Se produce cuando se actualizó la misma fila en más de un nodo.
Inserción-actualización
Se produce si una fila se actualizó en un nodo, pero se eliminó la misma fila y, a continuación, se reinsertó en otro nodo.
Insertar-eliminar
Se produce si se eliminó una fila en un nodo, pero se eliminó la misma fila y, a continuación, se reinsertó en otro nodo.
Actualizar-eliminar
Se produce si una fila se actualizó en un nodo, pero la misma fila se eliminó en otro nodo.
Eliminar-eliminar
Se produce cuando se eliminó una fila en más de un nodo.
Habilitación de la detección de conflictos
Para usar la detección de conflictos, todos los nodos deben ejecutar SQL Server 2008 o una versión posterior; y la detección deben estar habilitadas para todos los nodos. En SQL Server 2008 y versiones posteriores, de forma predeterminada, la detección de conflictos está habilitada en SQL Server Management Studio. Se recomienda que tenga habilitada la detección, incluso en escenarios en los que no se espera ningún conflicto. La detección de conflictos se puede habilitar y deshabilitar mediante Management Studio o Transact-SQL procedimientos almacenados:
Puede habilitar y deshabilitar la detección en Management Studio mediante la página Opciones de suscripción del cuadro de diálogo Propiedades de la Publicación o la página Configurar topología del Asistente para configurar topología punto a punto.
Si configura la detección de conflictos mediante Management Studio, el Agente de distribución se configura para dejar de aplicar cambios cuando se detecta un conflicto.
También puede habilitar y deshabilitar la detección mediante los siguientes procedimientos almacenados: sp_addpublication o sp_configure_peerconflictdetection.
Si configura la detección de conflictos mediante procedimientos almacenados, puede especificar si el Agente de distribución debe dejar de aplicar cambios cuando se detecta un conflicto. El valor predeterminado es que el agente se detenga. Se recomienda usar la configuración predeterminada.
Control de conflictos
Cuando se produce un conflicto en la replicación punto a punto, se genera la alerta de detección de conflictos punto a punto. Se recomienda configurar esta alerta para que se le notifique cuando se produzca un conflicto. Para obtener más información sobre las alertas, consulte Uso de alertas para eventos del Agente de replicación.
Una vez que se detenga el Agente de distribución y se genere la alerta, use uno de los métodos siguientes para controlar los conflictos que se produjeron:
Reinicializa el nodo donde se detectó el conflicto desde la copia de seguridad de un nodo que contiene los datos necesarios (el enfoque recomendado). Este método garantiza que los datos están en un estado coherente.
Intente volver a sincronizar el nodo al permitir que el Agente de distribución siga aplicando los cambios:
Ejecute sp_changepublication: especifique "p2p_continue_onconflict" para el @property parámetro y
truepara el @value parámetro .Reinicie el Agente de distribución.
Compruebe los conflictos detectados mediante el visor de conflictos y determine las filas implicadas, el tipo de conflicto y el ganador. El conflicto se resuelve en función del valor de identificador de origen que especificó durante la configuración: la fila que se originó en el nodo con el identificador más alto gana el conflicto. Para obtener más información, vea Ver conflictos de datos para publicaciones transaccionales (SQL Server Management Studio).
Ejecute la validación para asegurarse de que las filas en conflicto convergen correctamente. Para obtener más información, consulte Validar datos replicados.
Nota:
Si los datos son incoherentes después de este paso, debe actualizar manualmente las filas del nodo que tiene la prioridad más alta y, a continuación, permitir que los cambios se propague desde este nodo. Si no hay más cambios en conflicto en la topología, todos los nodos se incorporarán a un estado coherente.
Ejecute sp_changepublication: especifique "p2p_continue_onconflict" para el @property parámetro y
falsepara el @value parámetro .