sql >> Base de Datos >  >> RDS >> Database

Seguimiento de nivel de columna y nivel de fila en la replicación de combinación

En este artículo, revisemos las opciones de seguimiento a nivel de fila y de columna en la replicación de combinación y cómo se utilizan para detectar conflictos durante la replicación de combinación.

Combinar replicación: La replicación de combinación se utiliza para replicar datos en ambos sentidos, es decir, del publicador al suscriptor y del suscriptor al publicador.

La instantánea inicial de los objetos se toma y se aplica a los suscriptores. Los cambios de datos incrementales y los cambios de esquema se rastrean mediante disparadores y se aplican a los suscriptores cuando el suscriptor se sincroniza con el editor.

Conflictos:

En la replicación de mezcla, tanto el suscriptor como el publicador son independientes y los datos se pueden modificar en cualquier nodo.

Cuando los datos se modifican tanto en el publicador como en el suscriptor dentro del ciclo de replicación, y cuando el suscriptor se sincroniza con el publicador, se produce un conflicto. El agente de fusión determina el ganador en ambos lados dependiendo de la resolución de conflictos. De forma predeterminada, el ganador está determinado por diferentes parámetros, como una suscripción de cliente o servidor, suscripción pull o push, etc.

Detección de conflictos:

La detección de conflictos depende del tipo de seguimiento que configuremos para el artículo.

  • Seguimiento a nivel de fila: Si se realizan cambios de datos en cualquier columna de la misma fila en ambos extremos, se considera un conflicto.
  • Seguimiento a nivel de columna: Si se realizan cambios de datos en la misma columna en ambos extremos, este cambio se califica como un conflicto.

Resolutores:

Los solucionadores aplican los datos del ganador en ambos extremos cuando ocurre un conflicto.

De forma predeterminada, si hay un conflicto entre el editor y el suscriptor, el editor siempre gana.

Si se produce un conflicto entre dos suscriptores, el ganador lo determina el suscriptor del cliente/servidor y las suscripciones pull/push.

Además del resolutor predeterminado, también hay algunos resolutores personalizados. Discutiremos los solucionadores personalizados en los próximos artículos.

Configure la replicación de combinación con el seguimiento a nivel de fila:

Base de datos del editor:pub_db

Base de datos de suscriptores:sub_db

Vamos a crear la tabla "TBL_EMP" y agregarla a la replicación de fusión.

CREATE TABLE TBL_EMP
(EmpID INT, Emp_FName varchar(100),Emp_Lname varchar(100))

INSERT INTO TBL_EMP VALUES (1,'Jhon','P')

INSERT INTO TBL_EMP VALUES (2,'Alison','P')

INSERT INTO TBL_EMP VALUES (3,'Angela','P')

Para configurar la replicación de combinación, el publicador debe estar configurado para usar distribución local o distribución remota.

Una vez que la distribución esté configurada, navegue a la carpeta de replicación en SSMS y haga clic con el botón derecho en publicaciones locales.

Haga clic en Siguiente y seleccione la base de datos de publicación, haga clic en Siguiente y seleccione la replicación combinada, seleccione 2008 o posterior y agregue la tabla a la replicación.

Ahora haga clic en las propiedades del artículo y seleccione las propiedades del artículo resaltado.

Seleccione el nivel de seguimiento para que sea el seguimiento a nivel de fila.

De forma predeterminada, será el seguimiento a nivel de fila. Haga clic en Aceptar, Siguiente, Siguiente . Agregue un filtro si desea enviar datos específicos al suscriptor, de lo contrario, ignore, habilite Crear instantánea inmediatamente , configure la seguridad del agente según sus necesidades, habilite Crear publicación , especifique el nombre de la publicación y haga clic en Finalizar .

Una vez que se genera la instantánea inicial, agregue el suscriptor.

Navegue hasta la publicación que creó en la carpeta de replicación del editor, haga clic con el botón derecho y seleccione Nueva suscripción.

Haga clic en Siguiente , seleccione la publicación, haga clic en Siguiente y seleccione la suscripción pull o push según sus necesidades. En este caso, utilicé la suscripción push.

Seleccione la base de datos de suscripciones y haga clic en Siguiente , configure las credenciales de inicio de sesión para el agente de combinación y haga clic en Siguiente .

Elija el horario del agente según sus necesidades. En este caso, utilicé Ejecutar solo bajo demanda . Haga clic en Siguiente , seleccione Inicializar inmediatamente y seleccione cliente como tipo de suscripción, haga clic en Siguiente , habilite Crear suscripción , haga clic en Siguiente y Finalizar .

Una vez que se aplica la instantánea inicial, ejecute la siguiente instrucción en el editor para actualizar el registro.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 1

Ahora, en la base de datos del suscriptor, ejecute la siguiente instrucción para actualizar el apellido.

update TBL_EMP set Emp_Lname = 'A' where empid = 1

Ahora, la misma fila se modificó tanto en la base de datos del editor como en la base de datos del suscriptor dentro del mismo ciclo de replicación.

Según la opción de seguimiento que configuramos, es decir, el seguimiento a nivel de fila, el cambio se considera un conflicto y se registrará en las tablas de conflictos cuando se ejecute el agente de combinación.

Navegue hasta la publicación que creó y amplíe la publicación para ver las suscripciones. Haga clic con el botón derecho en la suscripción, seleccione Ver estado de sincronización y haga clic en Iniciar.

Una vez que el agente de combinación se haya ejecutado con éxito, vaya al suscriptor y verifique los datos usando la siguiente declaración.

use sub_db
select * from TBL_EMP  where empid = 1 

Podemos ver que el cambio del editor ha ganado y el cambio del suscriptor ha perdido.

La información del conflicto se almacena en las tablas de conflictos y se puede ver en el visor de conflictos.

Navegue hasta el editor, haga clic con el botón derecho y seleccione Ver conflictos.

Seleccione la tabla de conflictos y haga clic en Aceptar para ver los detalles.

Cambiar el nivel de seguimiento

Ahora cambiemos el nivel de seguimiento al seguimiento a nivel de columna. Navegue hasta la publicación, haga clic con el botón derecho en ella y seleccione Propiedades del editor. Haga clic en Artículos, seleccione la tabla, haga clic en Propiedades del artículo, configure las propiedades del artículo de la tabla resaltado, seleccione Seguimiento a nivel de columna, haga clic en Aceptar, haga clic en Aceptar y luego haga clic en Marcar para reinicializar.

Esto marcará a todos los suscriptores para la reinicialización ya que estamos cambiando el nivel de seguimiento existente a uno nuevo.

Navegue hasta la publicación, haga clic con el botón derecho en la publicación y haga clic en Ver el estado del agente de instantáneas , haz clic en Iniciar para generar una nueva instantánea. También hay otras formas de generar una instantánea.

Ahora, ejecute la siguiente declaración contra el editor para actualizar un registro.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 2

Ahora, ejecute la siguiente instrucción en la base de datos del suscriptor para actualizar el Apellido.

update TBL_EMP set Emp_Lname = 'A' where empid = 2

Ejecute el agente de combinación manualmente. Todavía veo el conflicto en el registro a pesar de que actualizamos dos columnas diferentes y establecimos el nivel de seguimiento en el nivel de columna.

Podemos ver los detalles en el visor de conflictos. Cambiar el nivel de seguimiento existente no funcionó. Entonces, reconfiguré la publicación, establecí el nivel de seguimiento en el nivel de columna antes de generar la instantánea inicial. Se creó una instantánea y se agregó un suscriptor a la publicación.

Una vez que se aplica la instantánea inicial al suscriptor, ejecute las siguientes instrucciones en la base de datos del editor.

update TBL_EMP set Emp_Fname = 'Amanda' where empid = 3

Ejecute la siguiente instrucción en la base de datos de suscriptores.

update TBL_EMP set Emp_Lname = 'A' where empid = 3

Ejecute el agente de combinación manualmente. Ahora, en la base de datos de suscriptores, consulta la tabla TBL_EMP.

La actualización del publicador y del suscriptor no se considera un conflicto, ya que ambos están en columnas diferentes y el nivel de seguimiento se establece en el nivel de seguimiento de la columna. No se registra ningún conflicto en las tablas de conflictos, las actualizaciones tanto del editor como del suscriptor en diferentes columnas no se pierden.

Actualicemos la misma columna en el editor y el suscriptor.

Ejecute la siguiente instrucción en la base de datos del editor.

use pub_db
update TBL_EMP set Emp_Lname = 'B' where empid = 1

Ejecute la siguiente instrucción en la base de datos de suscriptores.

use sub_db
update TBL_EMP set Emp_Lname = 'C' where empid = 1

Ejecute el agente de combinación y consulte la tabla TBL_EMP en el suscriptor. Se pierde la actualización del suscriptor y se registra el conflicto.

Rendimiento:

Puede haber una sobrecarga de rendimiento con el seguimiento a nivel de columna en comparación con el seguimiento a nivel de fila cuando hay grandes actualizaciones. Pero en mi caso, no noté ninguna diferencia en los tiempos de sincronización tanto para el seguimiento a nivel de fila como a nivel de columna en caso de grandes actualizaciones, ya que la tabla puede tener una estructura simple (es decir, muy pocas columnas) y tanto el suscriptor como el editor están en la misma instancia del servidor SQL.

Notas:

  • De forma predeterminada, siempre se realiza un seguimiento a nivel de fila cuando se configura la replicación de combinación.
  • La opción de nivel de seguimiento depende de una tabla. Por lo tanto, puede tener un nivel de fila en una tabla y un nivel de columna en otra tabla.
  • Estas opciones solo ayudan cuando se detecta un conflicto basado en una actualización, sin resolverlo.
  • Vuelva a configurar la publicación si cambiar el nivel de seguimiento existente no funciona.
  • Establezca el nivel de seguimiento de acuerdo con las necesidades de su empresa.