Las instrucciones UPDATE se pueden replicar como pares DELETE/INSERT
En este artículo se describe que las instrucciones Update se pueden replicar como pares DELETE/INSERT.
Versión del producto original: SQL Server
Número de KB original: 238254
Resumen
Si se actualiza cualquier columna que forma parte de una restricción única, SQL Server implementa la actualización como una "actualización diferida", lo que significa como un par de DELETE
/INSERT
operaciones. Esta "actualización diferida" hace que la replicación envíe un par de DELETE
/INSERT
instrucciones a los suscriptores. También hay otras situaciones que pueden provocar una actualización diferida. Por lo tanto, cualquier lógica de negocios que implemente en UPDATE
los desencadenadores o procedimientos almacenados personalizados en el suscriptor también debe incluirse en los DELETE
/INSERT
desencadenadores o procedimientos almacenados personalizados.
Más información
El comportamiento predeterminado en la replicación transaccional es usar INSERT
y UPDATE
DELETE
procedimientos almacenados personalizados para aplicar cambios en los suscriptores.
INSERT
Las instrucciones realizadas en el publicador se aplican a los suscriptores a través de una INSERT
llamada a procedimiento almacenado. De forma similar, una DELETE
instrucción se aplica a través de una llamada a procedimiento DELETE
almacenado.
Sin embargo, cuando una UPDATE
instrucción se ejecuta como una "actualización diferida", el agente de logreader coloca un par de llamadas a procedimientos almacenados en la base de DELETE
/INSERT
datos de distribución que se aplicarán a los suscriptores en lugar de una llamada de procedimiento almacenado de actualización. Por ejemplo, supongamos que tiene una tabla de publicación, denominada TABLE1
, con estas tres columnas:
- col1 int
- col2 int
- col3 varchar(30)
La única restricción única en TABLE1
se define en col1
mediante una restricción de clave principal. Supongamos que tiene un registro (1,1, 'Dallas').
Al ejecutar este código:
UPDATE TABLE1 set col1 = 3 where col3 = 'Dallas'
La UPDATE
instrucción se implementa mediante SQL Server como un par deINSERT
DELETE
/instrucciones, ya que está actualizando col1
, que tiene un índice único definido. Por lo tanto, el logreader coloca un par de llamadas en la base de DELETE
/INSERT
datos de distribución. Esto puede afectar a cualquier lógica de negocios que esté presente en los desencadenadores o procedimientos almacenados personalizados en el suscriptor. Debe incorporar la lógica de negocios adicional en DELETE
y INSERT
desencadenadores o procedimientos almacenados para controlar esta situación.
Si prefiere usar una sola lógica y quiere que todos los UPDATE
comandos se repliquen como DELETE
/INSERT
pares, puede habilitar una marca de seguimiento.
Además, si usa un filtro horizontal en la publicación y la fila actualizada no cumple una condición de filtro, solo se envía una DELETE
llamada de procedimiento 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, solo se envía la INSERT
llamada al procedimiento a través del proceso de replicación.
En el ejemplo anterior, suponga que también tiene un filtro horizontal definido en TABLE1
: where col3 = 'Dallas'
. Si ejecuta este código:
UPDATE table1 set col3 = 'New York' where col1 = 3
El agente de logreader solo realiza una llamada a procedimiento DELETE
almacenado para que se aplique a los suscriptores, ya que la fila actualizada no cumple los criterios de filtro horizontal.
Ahora, si ejecuta este código:
UPDATE table1 set col3 = 'Dallas' where col1 = 3
el logreader genera solo la llamada al INSERT
procedimiento almacenado, ya que la fila no cumplió previamente la condición de filtro.
Aunque se realizó una UPDATE
operación en el publicador, solo se aplican los comandos adecuados en el suscriptor.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de