Partilhar via


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

Uma assinatura de uma publicação de mesclagem pode perder a validade se ela não sincronizou com o Publicador dentro do período de retenção de publicação. O período de retenção padrão é de 14 dias; ele é configurado com o uso dos parâmetros @retention e @retention_period_unit do sp_addmergepublication (Transact-SQL). O @ retention_period_unit exige que o nível de compatibilidade de publicação seja 90RTM ou superior. Para os Assinantes que executam versões anteriores do Microsoft SQL Server, o @ retention_period_unit sempre é configurado para 'dia.' Para obter mais informações sobre nível de compatibilidade, consulte a seção "Nível de compatibilidade para publicações de mesclagem" no tópico Usando várias versões do SQL Server em uma topologia de replicação.

Quando uma assinatura perde a validade, ela deve ser reiniciada, pois os metadados da assinatura são removidos (consulte a seção “Limpeza de metadados” neste tópico para obter mais informações). As assinaturas que não forem reinicializadas serão descartadas pelo trabalho de Limpeza de Assinatura Expirada que é executado no Publicador. Por padrão, este trabalho é executado diariamente, ele remove todas as assinaturas push que não sincronizaram por um período duas vezes maior que o período de retenção da publicação. Por exemplo:

  • Se a publicação tiver um período de retenção de 14 dias, uma assinatura poderá expirar se não sincronizar dentro de 14 dias.

    Se o Publicador estiver executando a SQL Server 2005 ou uma versão posterior e o agente para a assinatura for da SQL Server 2005 ou versão posterior, uma assinatura só expirará se ocorreram mudanças nos dados naquela partição da assinatura. Por exemplo, se um Assinante receber dados de cliente apenas de clientes na Alemanha. Se o período de retenção for definido para 14 dias, a assinatura expirar no 14º dia somente se houve mudanças nos dados do cliente alemão nos últimos 14 dias.

  • Do 14º dia até 27 dias após a última sincronização, a assinatura poderá ser reinicializada.

  • 28 dias após a última sincronização, a assinatura é descartada pelo trabalho de Limpeza de Assinatura Expirada. Se uma assinatura push perder a validade, ela será completamente removida, mas as assinaturas pull não. Você deve limpar as assinaturas pull no Assinante. Para obter mais informações, consulte Como excluir uma assinatura pull (Programação Transact-SQL de replicação).

Considerações sobre a configuração do período de retenção de publicação

Lembre-se de manter as considerações a seguir 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 poderá limpar os metadados na publicação e nos bancos de dados de assinatura até que o período de retenção seja atingido. Cuidado ao especificar um valor alto para o período de retenção, pois poderá causar impacto negativo no desempenho da replicação. Recomendamos usar uma definição mais baixa se puder prever com certeza que todos os assinantes sincronizarão normalmente dentro daquele período de tempo.

    • É possível especificar para que as assinaturas nunca percam a validade (um valor de 0 para a @retention), mas recomendamos não usar este valor, pois os metadados não poderão ser limpos.

  • O período de retenção para um republicador deve ser definido para um valor igual ou inferior ao período de retenção definido no Publicador original. Se usar parceiros de sincronização alternados, você deve usar os mesmos valores de retenção da publicação para os Publicadores e todos os parceiros de sincronização alternados. O uso de valores diferentes pode levar a uma não-convergência. Se precisar alterar o valor de retenção de publicação, reinicialize o Assinante para evitar a não-convergência de 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 perderá a validade devido ao aumento no valor da retenção. Porém, o Publicador não tem metadados suficientes para baixar mudanças para o Assinante, o que leva a uma não-convergência.

Limpeza de metadados

A limpeza de metadados na replicação de mesclagem é efetuada pelo procedimento armazenado sp_mergemetadataretentioncleanup (Transact-SQL); a duração da limpeza é baseada no período de retenção da publicação. Sempre que o Merge Agent for executado para uma assinatura, ele chama o procedimento de limpeza. O procedimento remove os metadados mais antigos do que o período de retenção de publicação das seguintes tabelas do sistema:

Estas tabelas são usadas por todas as publicações de 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.