Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Quando um grupo de disponibilidade Always On (AG) falha, que contém uma base de dados que é um subscritor de replicação, a assinatura de replicação pode falhar. Para subscritores de replicação push transacional, o agente de distribuição continuará a replicar automaticamente após um failover se a subscrição foi criada usando o nome do ouvinte AG. Para subscritores de replicação transacional pull, o agente de distribuição continuará a replicar automaticamente após um failover, se a subscrição for criada usando o nome do listener AG e o servidor do assinante original estiver operacional. Isto porque os jobs de agente de distribuição só são criados no assinante original (réplica primária do AG). Para assinantes de fusão, um administrador de replicação deve reconfigurar manualmente o assinante, recriando a subscrição.
O que é suportado
A replicação do SQL Server suporta o failover automático do publicador e dos assinantes transacionais. Os subscritores da fusão podem fazer parte de um AG. No entanto, são necessárias ações manuais para configurar o novo assinante após um failover. Os AGs não podem ser combinados com cenários de WebSync e SQL Server Compact.
Crie uma subscrição transacional num grupo de disponibilidade
Para replicação transacional, utilize os seguintes passos para configurar e transferir a função para um AG assinante:
Antes de criar a subscrição, adicione a base de dados de subscritores ao AG apropriado.
Adicione o ouvinte AG do assinante como servidor ligado a todos os nós do AG. Este passo garante que todos os potenciais parceiros de failover estejam cientes e possam ligar-se ao ouvinte.
Usando o script na secção Criar uma subscrição push de replicação transacional, crie a subscrição usando o nome do listener AG do assinante. Após um failover, o nome do ouvinte permanece sempre válido, enquanto o nome real do servidor do assinante depende do nó real que se tornou o novo primário.
Observação
Deve usar um script Transact-SQL para criar a subscrição. Não podes usar o Management Studio.
Para criar uma subscrição de pull:
Usando o script de exemplo na secção Criar uma replicação transacional pull subscrição , crie a subscrição usando o nome do ouvinte AG do assinante.
Após um failover, crie o trabalho do agente de distribuição na nova réplica primária usando o procedimento armazenado
sp_addpullsubscription_agent.
Quando crias uma subscrição pull com a base de dados de subscrição num AG, após cada failover, deves desativar o trabalho do agente de distribuição na réplica primária antiga e ativar o trabalho na nova réplica primária.
Criar uma subscrição 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
Crie uma subscrição de 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 or alias>',
@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
Requisitos do ouvinte do grupo de disponibilidade
Quando executar sp_addpullsubscription_agent para um assinante que faz parte de um AG, deves fornecer o valor do parâmetro @subscriber ao procedimento armazenado como o nome do listener AG. Se correr o SQL Server 2016 (13.x) e versões anteriores, ou o SQL Server 2017 (14.x) antes do CU 16, o procedimento armazenado não faz referência ao nome do ouvinte AG. Cria a subscrição com o nome do servidor assinante onde o comando é executado. Para resolver este problema, atualize manualmente o @subscriber parâmetro no Replication Distribution Agent com o valor do nome do ouvinte AG.
Se o ouvinte AG do assinante utilizar uma porta não padrão, incluir o número da porta como parte do nome do ouvinte AG no parâmetro @subscriber não é suportado no Windows. Como solução alternativa, pode criar um alias para o ouvinte e portar para o editor, distribuidor e servidor de assinantes usando Aliases (SQL Server Configuration Manager) ou a ferramenta SQL Server Client Network Utility (cliconfg) para SQL Server 2022 (16.x) e versões posteriores, e passar o alias como valor do @subscriber parâmetro.
Retomar os agentes de fusão após ocorrer um failover no grupo de disponibilidade do sistema do assinante
Para a replicação da fusão, um administrador de replicação deve reconfigurar manualmente o assinante com os seguintes passos:
Execute
sp_subscription_cleanuppara remover a subscrição antiga do assinante. Realize esta ação na nova réplica primária (que anteriormente era a réplica secundária).Recrie a subscrição criando uma nova subscrição, começando por um novo snapshot.
Observação
Este processo é inconveniente para os subscritores de replicação de fusões. No entanto, o principal cenário para a replicação por fusão são utilizadores desconectados (desktops, portáteis, dispositivos móveis), que não utilizam AGs no lado do subscritor.