Assinantes de replicação e Grupos de Disponibilidade AlwaysOn (SQL Server)
Aplica-se a: SQL Server
Quando um grupo de disponibilidade AlwaysOn faz failover contendo um banco de dados que é um assinante de replicação, a assinatura de replicação poderá falhar. Para assinantes por push de replicação transacional, o agente de distribuição continuará a replicar automaticamente após um failover se a assinatura tiver sido criada usando o nome do ouvinte do grupo de disponibilidade. Para assinantes por pull de replicação transacional, o agente de distribuição continuará a replicar automaticamente após um failover se a assinatura tiver sido criada usando o nome do ouvinte do grupo de disponibilidade e o servidor original do assinante estiver em execução. Isso ocorre porque os trabalhos de agente de distribuição são criados somente no assinante original (réplica primária do grupo de disponibilidade). Para mesclar assinantes, um administrador de replicação deve reconfigurar o assinante manualmente, recriando a assinatura.
O que tem suporte
A replicação do SQL Server tem suporte para o failover automático do publicador e de assinantes transacionais. Os assinantes de mesclagem podem fazer parte de um grupo de disponibilidade. No entanto, é necessário realizar ações manuais para configurar o novo assinante após um failover. Não é possível combinar Grupos de Disponibilidade com cenários WebSync e SQL Server Compact.
Criar uma assinatura transacional em um grupo de disponibilidade
Para a replicação transacional, use as seguintes etapas para configurar e fazer o failover de um grupo de disponibilidade do assinante:
Antes de criar a assinatura, adicione o banco de dados do assinante ao grupo de disponibilidade AlwaysOn apropriado.
Adicione o ouvinte do grupo de disponibilidade do assinante como um servidor vinculado a todos os nós do grupo de disponibilidade. Essa etapa garante que todos os parceiros de failover potenciais estejam cientes de e possam se conectar ao ouvinte.
Usando o script da seção Criando uma assinatura push de replicação transacional, crie a assinatura usando o nome do ouvinte de grupo de disponibilidade do assinante. Depois de um failover, o nome do ouvinte sempre permanecerá válido, enquanto que o nome de servidor real do assinante dependerá do nó real que se tornou o novo primário.
Observação
A assinatura deve ser criada usando um script Transact-SQL e não pode ser criada usando o Management Studio.
Para criar uma assinatura pull:
Usando o script de exemplo da seção Criando uma assinatura pull de replicação transacional, crie a assinatura usando o nome do ouvinte de grupo de disponibilidade do assinante.
Após o failover, crie o trabalho do agente de distribuição na nova réplica primária usando o procedimento armazenado
sp_addpullsubscription_agent
.
Ao criar uma assinatura pull com o banco de dados de assinatura, no grupo de disponibilidade, depois de um failover, é recomendável desabilitar o trabalho do agente de distribuição na réplica primária antiga e habilitar o trabalho na nova réplica primária.
Criar uma assinatura push de replicação transacional
-- 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
Criar uma assinatura pull de replicação transacional
-- 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
Observação
Ao executar sp_addpullsubscription_agent para um assinante que faz parte de um grupo de disponibilidade, você deve passar o valor do parâmetro @Subscriber
para o procedimento armazenado como o nome do Ouvinte do AG. Se você estiver executando o SQL Server 2016 (13.x) e versões anteriores, ou SQL Server 2017 (14.x) antes do CU16, o procedimento armazenado não fará referência ao nome do ouvinte do grupo de disponibilidade; ele será criado com o nome do servidor assinante no qual o comando é executado. Para resolver esse problema, atualize manualmente o parâmetro @Subscriber
no trabalho do Agente de Distribuição com o valor de nome do ouvinte do AG.
Retomar os Agentes de Mesclagem após o failover do grupo de disponibilidade do assinante
Para a replicação de mesclagem, um administrador de replicação deve reconfigurar o assinante manualmente com as seguintes etapas:
Execute
sp_subscription_cleanup
para remover a assinatura antiga para o assinante. Execute esta ação na nova réplica primária (a antiga réplica secundária).Recrie a assinatura criando uma nova assinatura, começando por um novo instantâneo.
Observação
O processo atual não é conveniente para assinantes de replicação de mesclagem; entretanto, o cenário principal para a replicação de mesclagem é de usuários desconectados (áreas de trabalho, laptops, dispositivos de fone) que não usarão os grupos de disponibilidade no assinante.