Compartir a través de


Suscripciones actualizables para la replicación transaccional

Se aplica a: SQL Server 2008 (y versiones posteriores)

Nota:

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

En el SQL Server 2014, la replicación transaccional admite la actualización de los Subscriptores mediante suscripciones actualizables y replicación punto a punto. A continuación se muestran los dos tipos de suscripciones actualizables:

  • Actualización inmediata. El publicador y el suscriptor deben estar conectados para actualizar los datos en el suscriptor.

  • La actualización en cola implica que el publicador y el suscriptor no tienen que estar conectados para actualizar los datos en el suscriptor. Las actualizaciones se pueden realizar mientras el suscriptor o el publicador están sin conexión.

Cuando los datos se actualizan en un suscriptor, primero se propagan al publicador y, a continuación, se propagan a otros suscriptores. Si se usa la actualización inmediata, los cambios se propagan inmediatamente mediante el protocolo de confirmación en dos fases. Si se usa la actualización en espera, los cambios se almacenan en una cola; Las transacciones en cola se aplican de forma asincrónica en el Publicador cuando esté disponible la conectividad de red. Dado que las actualizaciones se propagan de forma asincrónica al publicador, el publicador puede haber actualizado los mismos datos o por otro suscriptor y pueden producirse conflictos al aplicar las actualizaciones. Los conflictos se detectan y resuelven según una directiva de resolución de conflictos que se establece al crear la publicación.

Si crea una publicación transaccional con suscripciones actualizables en el Asistente para nueva publicación, se habilitan la actualización inmediata y la actualización en cola. Si crea una publicación con procedimientos almacenados, puede habilitar una o ambas opciones. Al crear una suscripción a la publicación, se especifica el modo de actualización que se va a usar. Después, puede cambiar entre los modos de actualización si es necesario. Para obtener más información, vea la siguiente sección "Cambiar entre modos de actualización".

Para habilitar suscripciones actualizables para publicaciones transaccionales, habilite suscripciones de actualización para publicaciones transaccionales.

Para crear suscripciones actualizables para publicaciones transaccionales, consulte Creación de una suscripción actualizable a una publicación transaccional.

Cambiar entre modos de actualización

Al usar suscripciones actualizables, puede especificar que una suscripción debe usar un modo de actualización y, a continuación, cambiar a la otra si la aplicación lo requiere. Por ejemplo, puede especificar que una suscripción debe usar la actualización inmediata, pero cambiar a la actualización en cola si un error del sistema produce la pérdida de conectividad de red.

Nota:

La replicación no cambia automáticamente entre los modos de actualización. Debe establecer el modo de actualización a través de SQL Server Management Studio o la aplicación debe llamar sp_setreplfailovermode (Transact-SQL) para cambiar entre modos.

Si cambia de actualización inmediata a actualización en cola, no puede volver a actualizar inmediatamente hasta que el suscriptor y el publicador estén conectados y el Agente de lectura de cola haya aplicado todos los mensajes pendientes de la cola al publicador.

Para cambiar entre modos de actualización

Para cambiar entre los modos de actualización, debe habilitar la publicación y la suscripción para ambos modos de actualización y, a continuación, cambiar entre ellos si es necesario. Para obtener más información, consulta
Cambiar entre modos de actualización para una suscripción transaccional actualizable.

Consideraciones para usar suscripciones actualizables

  • Después de habilitar una publicación para actualizar suscripciones o suscripciones de actualización en cola, la opción no se puede deshabilitar para la publicación (aunque las suscripciones no necesitan usarla). Para deshabilitar la opción, la publicación debe eliminarse y crear una nueva.

  • No se admite la republicación de datos.

  • La replicación agrega la columna msrepl_tran_version a las tablas publicadas con fines de seguimiento. Debido a esta columna adicional, todas las INSERT instrucciones deben incluir una lista de columnas.

  • Para realizar cambios de esquema en una tabla de una publicación que admita la actualización de suscripciones, toda la actividad de la tabla debe detenerse en el publicador y los suscriptores, y los cambios de datos pendientes deben propagarse a todos los nodos antes de realizar cambios de esquema. Esto garantiza que las transacciones pendientes no entren en conflicto con el cambio de esquema pendiente. Una vez que los cambios de esquema se hayan propagado a todos los nodos, la actividad se puede reanudar en las tablas publicadas. Para más información, vea Poner en modo inactivo una topología de replicación (programación de la replicación con Transact-SQL).

  • Si tiene previsto cambiar entre modos de actualización, el Agente de lectura de cola debe ejecutar al menos una vez después de inicializar la suscripción (de forma predeterminada, el Agente de lectura de cola se ejecuta continuamente).

  • Si la base de datos del suscriptor se particiona horizontalmente y hay filas en la partición que existen en el suscriptor, pero no en el publicador, el suscriptor no puede actualizar las filas preexistentes. Al intentar actualizar estas filas, se devuelve un error. Las filas deben eliminarse de la tabla y, a continuación, agregarse en el publicador.

Actualizaciones para el abonado

  • Las actualizaciones del suscriptor se propagan al publicador incluso si una suscripción ha expirado o está inactiva. Asegúrese de que todas estas suscripciones se quitan o reinicializan.

  • Si se usan columnas TIMESTAMP o IDENTITY y se replican como tipos de datos base, los valores de estas columnas no deben actualizarse en el Suscriptor.

  • Los suscriptores no pueden actualizar ni insertar valores text, ntext o image porque no es posible leer de las tablas insertadas o eliminadas en los desencadenadores de replicación de seguimiento de cambios. Del mismo modo, los suscriptores no pueden actualizar ni insertar text o image valores mediante WRITETEXT o UPDATETEXT porque el publicador sobrescribe los datos. En su lugar, podría dividir las text columnas y image en una tabla independiente y modificar las dos tablas dentro de una transacción.

    Para actualizar objetos grandes en un suscriptor, use los tipos varchar(max)de datos , , varbinary(max)nvarchar(max)en lugar de , y image los tipos de textntextdatos, respectivamente.

  • Las actualizaciones de claves únicas (incluidas las claves principales) que generan duplicados (por ejemplo, no se permite una actualización del formulario UPDATE <column> SET <column> =<column>+1 y se rechazarán debido a una infracción de unicidad. Esto se debe a que la replicación propaga las actualizaciones establecidas en el suscriptor como instrucciones individuales UPDATE para cada fila afectada.

  • Si la base de datos del suscriptor se particiona horizontalmente y hay filas en la partición que existen en el suscriptor, pero no en el publicador, el suscriptor no puede actualizar las filas preexistentes. Al intentar actualizar estas filas, se devuelve un error. Las filas deben eliminarse de la tabla e insertarse de nuevo.

Desencadenadores definidos por el usuario

  • Si la aplicación requiere desencadenadores en el suscriptor, los desencadenadores deben definirse con la NOT FOR REPLICATION opción en el publicador y el suscriptor. Esto garantiza que los desencadenadores se activen solo para el cambio de datos original, pero no cuando se replique ese cambio.

    Asegúrese de que el desencadenador definido por el usuario no se activa cuando el desencadenador de replicación actualiza la tabla. Esto se logra llamando al procedimiento sp_check_for_sync_trigger en el cuerpo del desencadenador definido por el usuario. Para obtener más información, vea sp_check_for_sync_trigger (Transact-SQL).

Actualización inmediata

  • Para las suscripciones de actualización inmediata, los cambios en el suscriptor se propagan al publicador y se aplican mediante el Coordinador de transacciones distribuidas de Microsoft (MS DTC). Asegúrese de que MS DTC está instalado y configurado en el publicador y el suscriptor. Para obtener más información, consulte la documentación de Windows.

  • Los desencadenadores usados por las suscripciones de actualización inmediata requieren una conexión al publicador para replicar los cambios.

  • Si la publicación permite suscripciones de actualización inmediata y un artículo de la publicación tiene un filtro de columna, no puede filtrar columnas que no aceptan valores NULL sin valores predeterminados.

Actualización en espera

  • Las tablas incluidas en una publicación de combinación tampoco se pueden publicar como parte de una publicación transaccional que permita suscripciones de actualización en cola.

  • No se recomiendan las actualizaciones realizadas en las columnas de clave principal al usar la actualización en cola porque la clave principal se usa como localizador de registros para todas las consultas. Cuando la directiva de resolución de conflictos se establece en Suscriptor gana, las actualizaciones de las claves principales deben tenerse en cuenta con precaución. Si las actualizaciones de la clave principal se realizan en el publicador y en el suscriptor, el resultado será dos filas con claves principales diferentes.

  • Para las columnas de datos de tipo SQL_VARIANT: cuando los datos se insertan o actualizan en el suscriptor, son asignados de la siguiente manera por el Agente de lectura de colas cuando se copian del suscriptor a la cola:

    • BIGINT, DECIMAL, NUMERIC, MONEYy SMALLMONEY se asignan a NUMERIC.

    • BINARY y VARBINARY se asignan a los datos de VARBINARY.

Detección y resolución de conflictos

  • En el caso de la política de conflictos del suscriptor, no se admite la resolución de conflictos para las actualizaciones de las columnas de clave principal.

  • La replicación no resuelve los conflictos debidos a errores de restricción de clave externa:

    • Si no se esperan conflictos y los datos están bien particionados (los suscriptores no actualizan las mismas filas), puede usar restricciones de clave externa en el publicador y los suscriptores.

    • Si se esperan conflictos: no debe usar restricciones de clave externa en el publicador o el suscriptor si utiliza la resolución de conflictos "Gana el suscriptor"; no debe usar restricciones de clave externa en el suscriptor si utiliza la resolución de conflictos "Gana el publicador".

Véase también

Replicación transaccional entre pares
Replicación transaccional
Publicar datos y objetos de base de datos
Suscribirse a publicaciones