Compartilhar via


Como a replicação de mesclagem gerencia a expiração da assinatura e a limpeza de metadados

Uma assinatura de uma publicação de mesclagem irá expirar se não tiver sido sincronizada com o Editor dentro do período de retenção da publicação. O período de retenção padrão é de 14 dias. Ele é definido usando os parâmetros @retention e @retention_period_unit de sp_addmergepublication. O @retention_period_unit requer que o nível de compatibilidade da publicação seja 90RTM ou superior. Para assinantes que executam versões anteriores do Microsoft SQL Server, @retention_period_unit é sempre definido como day. Para obter mais informações sobre o nível de compatibilidade, consulte a seção "Nível de Compatibilidade para Publicações de Mesclagem" no artigo Usando várias versões do SQL Server em uma topologia de replicação.

Quando uma assinatura expira, ela deve ser reinicializada, pois os metadados da assinatura são removidos. Para obter mais informações, consulte a limpeza de metadados. As assinaturas que não são reinicializadas são descartadas pela tarefa de limpeza de assinaturas expiradas executada no Publicador. Por padrão, esse trabalho é executado diariamente e remove todas as assinaturas push que não foram sincronizadas por um período que é 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 assinatura poderá expirar se não tiver sido sincronizada dentro de 14 dias.

    Uma assinatura só expirará se houver alterações nos dados na partição dessa assinatura. Por exemplo, suponha que um Assinante receba dados do cliente somente para clientes na Alemanha. Se o período de retenção for definido como 14 dias, a assinatura expirará no dia 14 somente se houver alterações nos dados do cliente dessa região nos últimos 14 dias.

  • De 14 a 27 dias após a última sincronização, a assinatura pode ser reinicializada.

  • No 28º dia após a última sincronização, a assinatura será descartada pelo trabalho de Limpeza de assinaturas expiradas. Se uma assinatura push expirar, ela será completamente removida, mas as assinaturas pull não serão. Você deve limpar as assinaturas pull no Assinante. Para obter mais informações, consulte Delete a Pull Subscription.

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

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

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

    • A replicação não pode limpar metadados nos bancos de dados de publicações e assinaturas até que o período de retenção seja alcançado. Tenha cuidado ao especificar um valor alto para o período de retenção, pois isso pode afetar negativamente o desempenho da replicação. Você deverá usar uma configuração inferior se puder prever de forma confiável que todos os Assinantes serão sincronizados regularmente dentro desse período.

    • É possível especificar que as assinaturas nunca expiram (um valor de 0 para @retention), mas você não deve usar esse valor, pois os metadados não podem ser limpos.

  • O período de retenção para qualquer republicador deve ser definido como um valor igual ou menor que o período de retenção definido no Publicador original. Se você usar parceiros de sincronização alternativos, deverá usar os mesmos valores de retenção de publicação para os publicadores e todos os parceiros de sincronização alternativos. O uso de valores diferentes pode levar à não conformidade. Se você precisar alterar o valor de retenção da publicação, reinicialize o assinante para evitar a falta de convergência dos dados.

  • Se, após a limpeza, o período de retenção da publicação aumentar e uma assinatura tentar a mesclagem com o Publicador (que já excluiu os metadados), a assinatura não expirará devido ao aumento no valor da retenção. No entanto, o Publicador não possui metadados suficientes para baixar alterações para o Assinante, o que leva à não convergência.

Limpeza de metadados

A limpeza de metadados na replicação de mesclagem é executada pelo procedimento armazenado sp_mergemetadataretentioncleanup. O tempo de limpeza se baseia no período de retenção da publicação. Sempre que o Agente de Mesclagem é executado para uma assinatura, ele chama o procedimento de limpeza. O procedimento remove metadados mais antigos do que o período de retenção de publicação das seguintes tabelas do sistema:

Essas tabelas são usadas por todas as publicações em um banco de dados de publicação: se houver mais de uma publicação, o período de retenção mais longo sempre será usado para determinar quando os metadados podem ser removidos.