sys.sp_mergecleanupmetadata (Transact-SQL)

Aplica-se a: SQL Server

Deve ser usado apenas em topologias de replicação que incluem servidores a correr versões do SQL Server anteriores ao SQL Server 2000 (8.x) Service Pack 1. sp_mergecleanupmetadata permite aos administradores limpar metadados nas MSmerge_genhistorytabelas , MSmerge_contents, e MSmerge_tombstone do sistema. Este procedimento armazenado é executado no Publisher no banco de dados de publicação.

Transact-SQL convenções de sintaxe

Syntax

sys.sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

Arguments

[ @publication = ] N'publicação'

O nome da publicação. @publication é sysname, com um padrão de %, que limpa os metadados de todas as publicações. A publicação já deve existir se for explicitamente especificada.

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

Especifica se deve reinicializar o Assinante. @reinitialize_subscriber é nvarchar(5), com um padrão de true.

  • Se true, as subscrições são marcadas para reinicialização.
  • Se false, as subscrições não estão marcadas para reinicialização.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Remarks

sp_mergecleanupmetadatadeve ser usado apenas em topologias de replicação que incluem servidores a executar versões do SQL Server anteriores ao SQL Server 2000 (8.x) Service Pack 1. Topologias que incluam apenas o SQL Server 2000 (8.x) Service Pack 1 ou versões posteriores devem usar limpeza automática de metadados baseada em retenção. Ao executar este procedimento armazenado, esteja atento ao crescimento necessário e potencialmente grande do ficheiro de registo no computador onde o procedimento armazenado está a correr.

Após sp_mergecleanupmetadata a execução, por defeito, todas as subscrições nos Assinantes de publicações que tenham metadados armazenados em MSmerge_genhistory, MSmerge_contents e MSmerge_tombstone que estejam marcadas para reinicialização, quaisquer alterações pendentes no Assinante são perdidas e o snapshot atual é marcado como obsoleto.

Se existirem várias publicações numa base de dados, e qualquer uma dessas publicações usar um período infinito de retenção de publicações (@retention é 0), correr sp_mergecleanupmetadata não limpa os metadados de rastreio de alterações da replicação da fusão para a base de dados. Por esta razão, use com cautela a retenção infinita de publicações.

Ao executar este procedimento armazenado, pode escolher se reinicializa os Subscritores definindo o parâmetro @reinitialize_subscriber para true (o padrão) ou false. Se sp_mergecleanupmetadata for executado com o parâmetro @reinitialize_subscriber definido para true, um snapshot é reaplicado no Assinante mesmo que a subscrição tenha sido criada sem um snapshot inicial (por exemplo, se os dados e o esquema do snapshot foram aplicados manualmente ou já existiam no Assinante). Definir o parâmetro para false deve ser usado com cautela, porque se a publicação não for reinicializada, deve garantir que os dados no Publisher e no Assinante estão sincronizados.

Independentemente do valor de @reinitialize_subscriber, sp_mergecleanupmetadata falha se houver processos de fusão em curso que estejam a tentar carregar alterações para um Publisher ou para um Assinante republicado no momento em que o procedimento armazenado é invocado.

Executar sp_mergecleanupmetadata com @reinitialize_subscriber = N'verdadeiro'

  1. É recomendado, mas não obrigatório, que parem todas as atualizações das bases de dados de publicações e subscrições. Se as atualizações continuarem, quaisquer atualizações feitas num Assinante desde a última fusão perdem-se quando a publicação é reinicializada, mas a convergência dos dados mantém-se.

  2. Execute uma fusão executando o Merge Agent. Recomendamos que utilize a opção de linha de comandos -Validate agent em cada assinante quando executar o Merge Agent. Se estiver a executar fusões em modo contínuo, veja Considerações Especiais para Fusão em Modos Contínuos mais adiante nesta secção.

  3. Depois de todas as fusões estarem completas, execute sp_mergecleanupmetadata.

  4. Executar sp_reinitmergepullsubscription em todos os subscritores usando subscrição pull nomeada ou anónima para garantir a convergência dos dados.

  5. Se estiver a executar fusões em modo contínuo, veja Considerações Especiais para Fusão em Modos Contínuos mais adiante nesta secção.

  6. Regenerar ficheiros snapshot para todas as publicações de fusão envolvidas em todos os níveis. Se tentar fundir sem gerar primeiro o snapshot, recebe um pedido para regenerar o snapshot.

  7. Faz backup da base de dados de publicações. A falha em fazê-lo pode causar uma falha na fusão após a restauração da base de dados de publicação.

Executar sp_mergecleanupmetadata com @reinitialize_subscriber = N'falso'

  1. Pare todas as atualizações das bases de dados de publicações e subscrições.

  2. Execute uma fusão executando o Merge Agent. Recomendamos que utilize a -Validate opção de linha de comandos do agente em cada assinante quando executar o Merge Agent. Se estiver a executar fusões em modo contínuo, veja Considerações especiais para fusões em modo contínuo mais adiante neste artigo.

  3. Depois de todas as fusões estarem completas, execute sp_mergecleanupmetadata.

  4. Se estiver a executar fusões em modo contínuo, veja Considerações Especiais para Fusão em Modos Contínuos mais adiante nesta secção.

  5. Regenerar ficheiros snapshot para todas as publicações de fusão envolvidas em todos os níveis. Se tentar fundir sem gerar primeiro o snapshot, recebe um pedido para regenerar o snapshot.

  6. Faz backup da base de dados de publicações. A falha em fazê-lo pode causar uma falha na fusão após a restauração da base de dados de publicação.

Considerações especiais para fusões de modos contínuos

Se estiveres a correr fusões em modo contínuo, deves ou:

  • Parar o Merge Agent e depois realizar outra fusão sem o -Continuous parâmetro especificado.

  • Desative a publicação com sp_changemergepublication para garantir que quaisquer fusões em modo contínuo que estejam a sondar o estado da publicação falham.

    EXECUTE central..sp_changemergepublication
        @publication = 'dynpart_pubn',
        @property = 'status',
        @value = 'inactive';
    

Quando completares o passo 3 da corrida sp_mergecleanupmetadata, retoma as fusões em modo contínuo com base em como as paraste. Uma das seguintes opções:

  • Adicione novamente o parâmetro -Continuous para o Merge Agent.

  • Reative a publicação com sp_changemergepublication.

    EXECUTE central..sp_changemergepublication
        @publication = 'dynpart_pubn',
        @property = 'status',
        @value = 'active';
    

Permissions

Apenas os membros do papel fixo de servidor administrador do sistema ou db_owner papel fixo de base de dados podem executar sp_mergecleanupmetadata.

Para usar este procedimento armazenado, o Publisher deve estar a executar o SQL Server 2000 (8.x). Os Assinantes devem estar a correr ou o SQL Server 2000 (8.x) ou o SQL Server 7.0, Service Pack 2.