Pueden replicar instrucciones UPDATE como parejas DELETE/INSERT


Resumen


Si se actualiza una columna que forma parte de una restricción unique, SQL Server implementa la actualización como "actualización diferida", lo que significa como un par de EliminaroInsertar operaciones. Esta "actualización diferida" hace que la replicación enviar un par de EliminaroInsertar instrucciones a los suscriptores. También hay otras situaciones que pueden provocar una actualización diferida. Por lo tanto, cualquier lógica empresarial que implementa en su actualización desencadenadores o procedimientos almacenados personalizados en el suscriptor también debe incluirse en el proceso de EliminaroInsertar desencadenadores o procedimientos almacenados personalizados.

Más información


El comportamiento predeterminado en la duplicación transaccional es utilizar
Insertar, Actualizar y Eliminar procedimientos almacenados personalizados para aplicar los cambios en los suscriptores.

Instrucciones INSERT realizadas en el publicador se aplican a los suscriptores a través de una llamada de procedimiento Insertar almacenados. De igual forma, una instrucción DELETE se aplica a través de una llamada de procedimiento Eliminar almacenados.

Sin embargo, cuando se ejecuta una instrucción UPDATE como "actualización diferida", el agente de lector del registro coloca un par de EliminaroInsertar almacenados procedimiento llama a la base de datos de distribución que se aplicará a los suscriptores en lugar de una actualización almacenados llamada a procedimiento. Por ejemplo, suponga que tiene una tabla de publicación, denominada Tabla1, con estas tres columnas:
  • col1 int
  • col2 int
  • col3 varchar(30).
La restricción unique sólo on tabla1 se define en col1 a través de una restricción primary key. Suponga que tiene un registro (1,1,'Dallas ').

Cuando se ejecuta este código:
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'
SQL Server implementa la instrucción UPDATE como un par de DELETE/ instruccionesINSERT desde que están actualizando col1, que tiene definido un índice único. De este modo, el lector del registro coloca un par de Eliminar/Insertar llamadas en la base de datos de distribución. Esto puede afectar la lógica empresarial que está presente en los desencadenadores o procedimientos almacenados personalizados en el suscriptor. Debe incorporar la lógica empresarial adicional en Eliminar e Insertar desencadenadores o procedimientos almacenados para controlar esta situación.

Si prefiere usar lógica única y desea que todos los comandos de actualización replicados como EliminaroInsertar pares, puede habilitar una marca de seguimiento tal como se describe en este artículo de Microsoft Knowledge Base:
160181 INF: indicador para replicar actualizaciones como par DELETE/INSERT de traza
Además, si utiliza un filtro horizontal de la publicación y la fila actualizada no cumple una condición de filtro, sólo una llamada de procedimiento Eliminar se envía a los suscriptores. Si la fila actualizada anteriormente no cumplía la condición de filtro pero cumple la condición después de la actualización, sólo la llamada de procedimiento Insertar se envía a través del proceso de replicación.


En el ejemplo anterior, suponga que tiene también un filtro horizontal definido en Tabla1: donde col2 = 'Dallas'. Si ejecuta este código:
UPDATE table1 set col2 = 'New York' where col1 = 3
el agente de lector del registro sólo realiza una llamada de procedimiento Eliminar almacenados que se aplicará a los suscriptores, ya que la fila actualizada no cumple los criterios de filtro horizontal.

Ahora, si se ejecuta este código:
UPDATE table1 set col2 = 'Dallas' where col1 = 3
el lector del registro genera sólo el Insertar almacenado llamada a procedimiento, puesto que la fila no cumplían previamente la condición del filtro.

Aunque se realizó una operación de actualización en el publicador, se aplican sólo a los comandos apropiados en el suscriptor.

Referencias


Para SQL Server 2000 Service Pack 1 o posterior, consulte el artículo siguiente en Microsoft Knowledge Base:
302341 INF: nuevo indicador de traza para habilitar la actualización Singleton para la duplicación transaccional