Sei sulla pagina 1di 4

Deteccin de conflictos en la replicacin punto a punto

Este tema an no ha recibido ninguna valoracin - Valorar este tema La replicacin transaccional punto a punto permite insertar, actualizar o eliminar datos en cualquier nodo de una topologa y propagar los cambios de los datos a los dems nodos. Dado que se pueden cambiar los datos de cualquier nodo, podran producirse conflictos entre los datos modificados en los distintos nodos. Si una fila se modifica en ms de un nodo, puede producirse un conflicto o incluso la prdida de una actualizacin cuando la fila se propaga a otros nodos. La replicacin punto a punto de SQL Server 2008 y versiones posteriores ofrece la posibilidad de habilitar la deteccin de conflictos en una topologa punto a punto. Esta opcin contribuye a evitar los problemas causados por los conflictos no detectados, como son el comportamiento incoherente de las aplicaciones y las actualizaciones perdidas. Cuando se habilita esta opcin, de forma predeterminada, un cambio conflictivo se trata como un error crtico que produce el error del Agente de distribucin. En caso de conflicto, la topologa permanece en un estado incoherente hasta que se resuelve el conflicto y se restablece la coherencia de los datos en toda la topologa. Descripcin de los conflictos y de la deteccin de conflictos

En una nica base de datos, los cambios realizados en la misma fila por parte de aplicaciones diferentes no provocan conflictos. Esto se debe a que las transacciones se serializan y se utilizan bloqueos para controlar los cambios simultneos. En un sistema distribuido asincrnico, como en uno de replicacin punto a punto, las transacciones se producen de forma independiente en cada nodo, y no hay ningn mecanismo para serializarlas por los distintos nodos. Se podra usar una confirmacin en dos fases de tipo protocolo, pero esto afecta de forma significativa al rendimiento. En sistemas como la replicacin punto a punto, los conflictos no se detectan cuando los cambios se confirman en cada uno de los nodos del mismo nivel. En su lugar, se detectan al replicar los cambios y aplicarlos a los dems nodos del mismo nivel. En la replicacin punto a punto, los conflictos se detectan mediante los procedimientos almacenados que aplican los cambios a cada nodo, basndose en una columna oculta de cada tabla publicada. En esta columna oculta, se almacena un identificador que combina la versin de la fila con un identificador de originador que se especifica para cada nodo. Durante la sincronizacin, el Agente de distribucin ejecuta los procedimientos para cada tabla. Estos procedimientos aplican las operaciones de insercin, actualizacin y eliminacin procedentes de los dems nodos del mismo nivel. 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 Este error hace que, de forma predeterminada, el Agente de distribucin deje de aplicar cambios a ese nodo. Para obtener informacin sobre cmo tratar los conflictos detectados, vea "Controlar los conflictos" ms adelante en este tema. a replicacin punto a punto detecta los tipos de conflictos siguientes:

Insercin-insercin Todas las filas de cada tabla que participa en una replicacin punto a punto se identifican de forma exclusiva mediante valores de clave principal. Se produce un conflicto de insercin-insercin al insertar una fila con el mismo valor de clave en ms de un nodo.

Actualizacin-actualizacin Se produce cuando se actualiza la misma fila en ms de un nodo.

Insercin-actualizacin Se produce cuando se actualiza una fila en un nodo, pero la misma fila se ha eliminado y, a continuacin, se ha vuelto a insertar en otro nodo.

Insercin-eliminacin Se produce cuando se elimina una fila en un nodo, pero la misma fila se ha eliminado y, a continuacin, se ha vuelto a insertar en otro nodo.

Actualizacin-eliminacin Se produce cuando se actualiza una fila en un nodo, pero la misma fila se ha eliminado en otro nodo.

Eliminacin-eliminacin Se produce cuando se elimina una fila en ms de un nodo.

Habilitar la deteccin de conflictos

Para usar la deteccin de conflictos, todos los nodos deben ejecutar SQL Server 2008 o una versin posterior, y la deteccin debe habilitarse para todos los nodos. En SQL Server 2008 y versiones posteriores, la deteccin de conflictos est habilitada en SQL Server Management Studio de forma predeterminada. Se recomienda tener habilitada la deteccin, incluso en escenarios en los que no se espere ningn conflicto. La deteccin de conflictos se puede habilitar y deshabilitar utilizando Management Studio o procedimientos almacenados de Transact-SQL:

Puede habilitar y deshabilitar la deteccin en Management Studio mediante la pgina Opciones de suscripcin del cuadro de dilogo Propiedades de la publicacin o con la pgina Configurar topologa del Asistente de configuracin de la topologa punto a punto. Para obtener ms informacin, vea Deteccin de conflictos en la replicacin punto a punto. Si configura la deteccin de conflictos mediante Management Studio, el Agente de distribucin se configura para que deje de aplicar cambios cuando se detecte un conflicto.

Tambin puede habilitar y deshabilitar la deteccin con los procedimientos almacenados siguientes: sp_addpublication o sp_configure_peerconflictdetection. Para obtener ms informacin, vea Deteccin de conflictos en la replicacin punto a punto. Si configura la deteccin de conflictos mediante procedimientos almacenados, puede especificar si el Agente de distribucin debe dejar de aplicar cambios cuando se detecte un conflicto. La configuracin predeterminada hace que el agente se detenga. Se recomienda utilizar la configuracin predeterminada.

Controlar los conflictos

Cuando se produce un conflicto en la replicacin punto a punto, se genera la Peer-topeer conflict detection alert. Se recomienda configurar esta alerta para que se notifique la existencia de conflictos. Para obtener ms informacin sobre las alertas, vea Usar alertas para eventos del Agente de replicacin. Una vez que se detenga el Agente de distribucin y se genere la alerta, use uno de los mtodos siguientes para controlar los conflictos existentes:

Reinicialice el nodo en el que se detect el conflicto a partir de la copia de seguridad de un nodo que contenga los datos necesarios (este es el enfoque recomendado). Este mtodo garantiza que los datos sean coherentes. Intente sincronizar de nuevo el nodo permitiendo que el Agente de distribucin contine aplicando los cambios: 1. Ejecute sp_changepublication: especifique 'p2p_continue_onconflict' para el parmetro @property y true para el parmetro @value. 2. Reinicie el Agente de distribucin. 3. Use el visor de conflictos para comprobar los conflictos detectados y determine las filas afectadas, el tipo de conflicto y la fila ganadora. El conflicto se resuelve en funcin del valor del identificador de originador que se especific durante la configuracin: la fila procedente del nodo con el identificador ms alto gana el conflicto. Para obtener ms informacin, vea Ver conflictos de datos para publicaciones transaccionales (SQL Server Management Studio). 4. Ejecute la validacin para asegurarse de que las filas en conflicto convergieron correctamente. Para obtener ms informacin, vea Validar datos replicados.

Potrebbero piacerti anche