Suscriptores de replicación y grupos de disponibilidad Always On (SQL Server)
Se aplica a: SQL Server
Cuando un grupo de disponibilidad (AG) Always On que contiene una base de datos que es un suscriptor de replicación conmuta por error, se puede producir un error en la suscripción de replicación. Para los suscriptores de inserción de replicación transaccional, el agente de distribución se seguirá replicando automáticamente después de una conmutación por error si la suscripción se creó mediante el nombre de la escucha de grupo de disponibilidad. Para los suscriptores de extracción de replicación transaccional, el agente de distribución se seguirá replicando automáticamente después de una conmutación por error si la suscripción se creó mediante el nombre de la escucha de grupo de disponibilidad y el servidor del suscriptor original está activo y en ejecución. El motivo es que los trabajos del agente de distribución solo se crean en el suscriptor original (réplica principal del grupo de disponibilidad). Para los suscriptores de mezcla, un administrador de replicación debe volver a configurar manualmente el suscriptor volviendo a crear la suscripción.
Qué se admite
La replicación de SQL Server admite la conmutación por error automática del publicador y la conmutación por error automática de los suscriptores transaccionales. Los suscriptores de mezcla pueden formar parte de un grupo de disponibilidad, pero se requieren acciones manuales para configurar el nuevo suscriptor después de una conmutación por error. Los grupos de disponibilidad no se pueden combinar con escenarios de WebSync y SQL Server Compact.
Creación de una suscripción transaccional en un grupo de disponibilidad
En la replicación transaccional, use los pasos siguientes para configurar y conmutar por error un grupo de disponibilidad de suscriptor:
Antes de crear la suscripción, agregue la base de datos del suscriptor al grupo de disponibilidad adecuado.
Agregue el cliente de escucha del grupo de disponibilidad del suscriptor como un servidor vinculado a todos los nodos del grupo de disponibilidad. Este paso garantiza que todos los posibles asociados de conmutación por error sean conscientes del agente de escucha y se puedan conectar al mismo.
Con el script de la sección Crear una suscripción de inserción de replicación transaccional, cree la suscripción y use el nombre del cliente de escucha del grupo de disponibilidad del suscriptor. Después de una conmutación por error, el nombre del agente de escucha siempre sigue siendo válido, mientras que el nombre de servidor real del suscriptor dependerá del nodo real que se convirtió en el nuevo primario.
Nota:
Es preciso que la suscripción se cree mediante un script de Transact-SQL y no se puede crear con Management Studio.
Para crear una suscripción de extracción:
Con el script de ejemplo de la sección Crear una suscripción de extracción de replicación transaccional, cree la suscripción y use el nombre del cliente de escucha del grupo de disponibilidad del suscriptor.
Después de una conmutación por error, cree el trabajo del agente de distribución en la nueva réplica principal con el procedimiento almacenado
sp_addpullsubscription_agent
.
Al crear una suscripción de extracción, con la base de datos de suscripciones en un grupo de disponibilidad, después de cada conmutación por error, se recomienda deshabilitar el trabajo del agente de distribución en la réplica principal anterior y habilitar dicho trabajo en la nueva réplica principal.
Crear una suscripción de inserción de replicación transaccional
-- commands to execute at the publisher, in the publisher database:
USE [<publisher database name>];
GO
EXEC sp_addsubscription @publication = N'<publication name>',
@subscriber = N'<AG listener name>',
@destination_db = N'<subscriber database name>',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0;
GO
EXEC sp_addpushsubscription_agent @publication = N'<publication name>',
@subscriber = N'<AG listener name>',
@subscriber_db = N'<subscriber database name>',
@job_login = NULL,
@job_password = NULL,
@subscriber_security_mode = 1;
GO
Crear una suscripción de extracción de replicación transaccional
-- commands to execute at the subscriber, in the subscriber database:
USE [<subscriber database name>];
GO
EXEC sp_addpullsubscription @publisher = N'<publisher name>',
@publisher_db = N'<publisher database name>',
@publication = N'<publication name>',
@subscription_type = N'pull';
GO
EXEC sp_addpullsubscription_agent @publisher = N'<publisher name>',
@subscriber = N'<AG listener name>',
@distributor = N'<distributor AG listener name>', -- this parameter should only be used if the distribution database is part of an AG.
@publisher_db = N'<publisher database name>',
@publication = N'<publication name>',
@job_login = NULL,
@job_password = NULL,
@subscriber_security_mode = 1;
GO
Nota:
Al ejecutar sp_addpullsubscription_agent para un suscriptor que forma parte de un grupo de disponibilidad, debe pasar el valor del parámetro @Subscriber
al procedimiento almacenado como nombre del cliente de escucha del grupo de disponibilidad. Si ejecuta SQL Server 2016 (13.x) y versiones anteriores, o SQL Server 2017 (14.x) antes de CU 16, el procedimiento almacenado no hará referencia al nombre del cliente de escucha del grupo de disponibilidad; se creará con el nombre del servidor suscriptor en el que se ejecuta el comando. Para resolver este problema, actualice manualmente el parámetro @Subscriber
en el trabajo de Agente de distribución con el valor del nombre del cliente de escucha del grupo de disponibilidad.
Reanudar los agentes de mezcla después de la conmutación por error del grupo de disponibilidad del suscriptor
Para la replicación de mezcla, un administrador de replicación debe volver a configurar manualmente el suscriptor con los pasos siguientes:
Ejecute
sp_subscription_cleanup
para eliminar la suscripción antigua del suscriptor. Realice esta acción en la nueva réplica principal (que era antes la réplica secundaria).Vuelva a crear la suscripción, para ello cree una nueva suscripción, comenzando por una nueva instantánea.
Nota:
El proceso actual no es apto para los suscriptores de replicación de mezcla, aunque el escenario principal para la replicación de mezcla son los usuarios desconectados (escritorio, equipos portátiles, teléfonos móviles) que no usarán grupos de disponibilidad en el suscriptor.