Expiração e desativação da subscrição

Aplica-se a:SQL ServerAzure SQL Managed Instance

As subscrições podem ser desativadas ou expirar se não estiverem sincronizadas dentro de um período de retenção especificado. A ação que ocorre depende do tipo de replicação e do período de retenção que é ultrapassado.

Para definir períodos de retenção, consulte Definir o Período de Expiração para Subscrições, Definir o Período de Retenção de Distribuição para Publicações Transacionais (SQL Server Management Studio) e Configurar Publicação e Distribuição.

Replicação transacional

A replicação transacional utiliza o período máximo de retenção da distribuição (o @max_distretention parâmetro de sp_adddistributiondb (Transact-SQL)) e o período de retenção de publicação (o @retention parâmetro de sp_addpublication (Transact-SQL)):

  • Se uma subscrição não estiver sincronizada dentro do período máximo de retenção da distribuição (padrão de 72 horas) e houver alterações na base de dados de distribuição que não são entregues ao Assinante, a subscrição é marcada como desativada pelo trabalho de limpeza da Subscrição Expirada que corre no Distribuidor. Tem de reiniciar a subscrição.

  • Se uma subscrição não estiver sincronizada dentro do período de retenção da publicação (padrão de 336 horas), a subscrição expira e é cancelada pelo trabalho de limpeza da subscrição expirada que corre no Publisher. (Antes da correção em KB4014798, a tarefa chamava-se Limpeza da distribuição.) Tem de recriar e sincronizar a subscrição.

    Se uma subscrição push expirar, é completamente removida, mas as subscrições pull não são. Deve limpar as subscrições de pull no Assinante. Para mais informações, consulte Eliminar uma Subscrição Retirada.

Replicação de mesclagem

A replicação por fusão utiliza o período de retenção de publicações (os parâmetros @retention e @retention_period_unit de sp_addmergepublication (Transact-SQL)). Quando uma subscrição expira, tem de a reinicializar porque o processo remove os metadados da subscrição. O trabalho de limpeza da subscrição expirada que corre no Publisher elimina as subscrições que não são reinicializadas. Por predefinição, esta tarefa é executada diariamente. Remove todas as subscrições push que não sincronizam durante o dobro do período de retenção da publicação. Por exemplo:

  • Se uma publicação tiver um período de retenção de 14 dias, uma subscrição pode expirar se não sincronizar no prazo de 14 dias.

    Se o Publisher estiver a executar o SQL Server 2005 (9.x) ou uma versão posterior e o agente da subscrição for do SQL Server 2005 (9.x) ou de uma versão posterior, uma subscrição só expira se houver alterações nos dados na partição dessa subscrição. Por exemplo, suponha que um Assinante recebe dados de clientes apenas para clientes na Alemanha. Se o período de retenção for fixado em 14 dias, a subscrição expira apenas no dia 14 se houver alterações nos dados dos clientes alemães nos últimos 14 dias.

  • De 14 a 27 dias após a última sincronização, pode reiniciar a subscrição.

  • 28 dias após a última sincronização, a tarefa de limpeza de subscrições expiradas remove a subscrição. Se uma subscrição "push" expirar, é removida por completo, mas o mesmo não acontece com as subscrições "pull". Deve limpar as subscrições de pull no Assinante. Para mais informações, consulte Eliminar uma Subscrição Retirada.

Considerações para definir o período de retenção de publicações para publicações de fusão

Tenha em conta as seguintes considerações ao definir o período de retenção para publicações da fusão:

  • O período de retenção para publicações fundidas inclui um período de carência de 24 horas para acomodar assinantes em diferentes fusos horários. Por exemplo, se definir um período de retenção de um dia, o período real de retenção é de 48 horas.

  • A limpeza dos metadados de replicação de fusão depende do período de retenção da publicação:

    • A replicação não pode limpar os metadados nos bancos de dados de publicação e subscrição até que o período de retenção seja atingido. Tenha cautela ao especificar um valor elevado para o período de retenção, pois isso pode afetar negativamente o desempenho da replicação. Use uma configuração mais baixa se conseguir prever de forma fiável que todos os Subscritores irão sincronizar regularmente durante esse período.

    • Pode especificar que as subscrições nunca expiram (um valor de 0 para @retention), mas não use esse valor porque os metadados não podem ser limpos.

  • Defina o período de retenção de qualquer reeditor para um valor igual ou inferior ao período de retenção definido no Publisher original. Além disso, utilize os mesmos valores de retenção de publicações para todos os editores e seus parceiros alternativos de sincronização. Usar valores diferentes pode levar à não convergência. Se precisar de alterar o valor de retenção de publicações, reinicie o Subscritor para evitar a não convergência dos dados.

  • Se aumentar o período de retenção de publicações após uma limpeza e uma subscrição tentar fundir-se com o Publisher (que já eliminou os metadados), a subscrição não expira devido ao aumento do valor de retenção. No entanto, o Publisher não tem metadados suficientes para descarregar alterações ao assinante, o que leva à não convergência.