Cómo funcionan las suscripciones actualizables

Las suscripciones actualizables para réplica transaccional permiten a los suscriptores replicar cambios en el publicador. Se agregan desencadenadores a las tablas publicadas en la base de datos de suscripciones, y cuando se realiza un cambio en el suscriptor, el desencadenador se activa:

  • Para las suscripciones de actualización inmediata, el cambio se propaga directamente al publicador y se aplica mediante el Coordinador de transacciones distribuidas de Microsoft (MSDTC).
  • Para las suscripciones de actualización en cola, el cambio se propaga primero a una fila y después se aplica al publicador mediante el Agente de lectura de cola.

Los cambios realizados en el publicador se replican en los suscriptores de la misma manera que las publicaciones transaccionales con suscriptores de sólo lectura. Para obtener más información, vea Cómo funciona la réplica transaccional.

Actualización inmediata

Las suscripciones de actualización inmediata utilizan los siguientes componentes:

  • Columna de seguimiento para cada tabla publicada
    Cuando se publica una tabla en una publicación que permite suscripciones actualizables, se agrega la columna msrepl_tran_version a la tabla. Esta columna se utiliza para realizar el seguimiento de los cambios y la detección de conflictos. Se producen conflictos en la actualización inmediata si el suscriptor actualiza una copia desfasada de los datos.
  • MSDTC
    Para cada cambio realizado en un suscriptor, MSDTC administra la operación de confirmación de dos fases entre el publicador y el suscriptor que confirma el cambio. Esta solución no tiene las limitaciones de disponibilidad de utilizar una confirmación de dos fases con todos los sitios participantes, ya que sólo tiene que estar disponible el publicador. Una vez que el cambio se realiza en el publicador utilizando una confirmación de dos fases, el Agente de distribución lo replica en otros suscriptores.
  • Desencadenadores en tablas de la base de datos de suscripciones
    Se agregan desencadenadores de inserción, actualización y eliminación a cada tabla publicada en la base de datos de suscripciones. Los desencadenadores se crean utilizando el modificador NOT FOR REPLICATION de la instrucción CREATE TRIGGER para que los cambios aplicados por el Agente de distribución no activen los desencadenadores. Para obtener más información, vea Controlar restricciones, identidades y desencadenadores con NOT FOR REPLICATION.
    Para las suscripciones de actualización inmediata, los desencadenadores también administran valores para las columnas identity y timestamp del suscriptor. Los valores se generan en el publicador para estos tipos de columnas y se propagan al suscriptor como parte de la operación de confirmación de dos fases.
  • Procedimientos almacenados
    Cuando se crea una aplicación y se habilita para suscripciones de actualización inmediata, se crean en la base de datos de publicaciones procedimientos almacenados de inserción, actualización y eliminación para cada tabla publicada. Cuando se produce un cambio en el suscriptor, un desencadenador de réplica emite una llamada a procedimiento remoto a través de MSDTC al procedimiento almacenado correspondiente del publicador, el cual aplica seguidamente el cambio.
    Los procedimientos almacenados del publicador sólo aplican cambios si no están en conflicto con los cambios efectuados en el publicador después de que el suscriptor haya recibido la última copia de las filas modificadas. Si se detecta algún conflicto, la transacción se rechaza y se revierte en el publicador y en el suscriptor.

En la siguiente ilustración se muestran los componentes principales utilizados en una topología que incluye suscripciones de actualización inmediata.

Componentes de actualización inmediata y flujo de datos

  1. Un desencadenador de la tabla de suscripción captura el cambio realizado en el suscriptor.
  2. El desencadenador llama a través de MSDTC al correspondiente procedimiento almacenado en el publicador.
  3. El procedimiento almacenado realiza la inserción, actualización o eliminación a menos que haya un conflicto. Si hay un conflicto, el cambio se revierte en el publicador y el suscriptor.
  4. Los cambios realizados en el publicador como resultado de los cambios replicados de un suscriptor se propagarán a los demás suscriptores según la programación del Agente de distribución.

Actualización en cola

Las suscripciones de actualización en cola utilizan los siguientes componentes:

  • Columna de seguimiento para cada tabla publicada
    Cuando se publica una tabla en una publicación que permite suscripciones actualizables, se agrega la columna msrepl_tran_version a la tabla. Esta columna se utiliza para realizar el seguimiento de los cambios y la detección de conflictos.
  • Desencadenadores en tablas de la base de datos de suscripciones
    Se agregan desencadenadores de inserción, actualización y eliminación a cada tabla publicada en la base de datos de suscripciones. Los desencadenadores se crean utilizando el modificador NOT FOR REPLICATION de la instrucción CREATE TRIGGER para que los cambios aplicados por el Agente de distribución no activen los desencadenadores. Para obtener más información, vea Controlar restricciones, identidades y desencadenadores con NOT FOR REPLICATION.
  • Procedimientos almacenados
    Cuando se crea una aplicación y se habilita para suscripciones de actualización en cola, se crean en la base de datos de publicaciones procedimientos almacenados de inserción, actualización y eliminación para cada tabla publicada.
    El Agente de lectura de cola llama a los procedimientos almacenados para aplicar transacciones en el publicador, detectar conflictos y, si fuera necesario, generar comandos de compensación que se publican en la base de datos de distribución y después se entregan en el suscriptor.
    También se crea en el publicador un procedimiento almacenado para registrar información de conflictos en el publicador y, opcionalmente, enviar información de conflictos a los suscriptores relevantes. Lo invoca el Agente de lectura de cola si se detecta un conflicto.
  • Microsoft Cola de Microsoft SQL Server
    Cada base de datos de suscripciones contiene la tabla del sistema MSreplication_queue, que almacena los cambios del suscriptor.
  • Agente de lectura de cola de SQL Server
    El Agente de lectura de cola lee los cambios de MSreplication_queue y los aplica al publicador. Para obtener más información, vea Replication Queue Reader Agent.

En la siguiente ilustración se muestran los componentes principales utilizados en una topología que incluye suscripciones de actualización en cola.

Componentes de actualización en cola y flujo de datos

  1. Los desencadenadores de las tablas de suscripción capturan las actualizaciones realizadas en el suscriptor. Los desencadenadores almacenan estas actualizaciones en MSreplication_queue.
  2. El Agente de lectura de cola lee en MSreplication_queue y, a continuación, aplica las transacciones en cola a la publicación correspondiente mediante procedimientos almacenados de réplica.
  3. Al aplicar las transacciones en cola, se detectan y resuelven los conflictos existentes según una directiva de resolución de conflictos establecida al crear la publicación. Como resultado, pueden generarse comandos de compensación para revertir una transacción a un suscriptor mediante el proceso estándar de distribución de réplica transaccional, pero sólo se enviarán al suscriptor que causó el conflicto. Para obtener más información, vea Detección y resolución de conflictos de actualización en cola.
  4. Los cambios realizados en el publicador como resultado de los cambios replicados de un suscriptor se propagarán a los demás suscriptores según la programación del Agente de distribución.

Vea también

Conceptos

Cómo funciona la réplica transaccional
Suscripciones actualizables para réplica transaccional

Ayuda e información

Obtener ayuda sobre SQL Server 2005