Adicionar Artigos e Eliminar Artigos de Publicações Existentes

Aplica-se a: SQL ServerAzure SQL Managed Instance

Depois de uma publicação ser criada, é possível adicionar e eliminar artigos. Os artigos podem ser adicionados a qualquer momento, mas as ações necessárias para eliminar artigos dependem do tipo de replicação e de quando o artigo é retirado.

Adição de Artigos

Adicionar um artigo implica: adicionar o artigo à publicação; criar um novo instantâneo para a publicação; sincronizar a subscrição para aplicar o esquema e os dados do novo artigo.

Note

Se adicionar um artigo a uma publicação de fusão e um artigo existente depender do novo artigo, deve especificar uma ordem de processamento para ambos os artigos usando o parâmetro @processing_ordersp_addmergearticle e sp_changemergearticle. Considere o seguinte cenário: publica uma tabela mas não publica uma função que a tabela referencia. Se não publicar a função, a tabela não pode ser criada pelo Assinante. Ao adicionar a função à publicação: especifique um valor de 1 para o parâmetro @processing_orderde sp_addmergearticle; e especificar um valor de 2 para o parâmetro @processing_orderde sp_changemergearticle, especificando o nome da tabela para o parâmetro @article. Esta ordem de processamento assegura que cria a função no Assinante antes da tabela que dela depende. Pode usar números diferentes para cada artigo, desde que o número da função seja inferior ao número da tabela.

  1. Adicione um ou mais artigos através de um dos seguintes métodos:

  2. Após adicionar um artigo a uma publicação, deve criar um novo snapshot para a publicação (e para todas as partições se for uma publicação de fusão com filtros parametrizados). O Distribution Agent ou Merge Agent copia então o esquema e os dados do novo artigo para o Assinante (não reinicializa toda a publicação).

  3. Após a criação do snapshot, sincronize a subscrição para copiar o esquema e os dados do novo artigo.

Eliminação de Artigos

Os artigos podem ser retirados de uma publicação a qualquer momento, mas deve ter em conta os seguintes comportamentos:

  • Eliminar um artigo de uma publicação não remove o objeto da base de dados da publicação nem o objeto correspondente da base de dados por subscrição. Use o DROP <Object> para remover estes objetos, se necessário. Quando eliminar um artigo relacionado com outros artigos publicados por restrições de chave estrangeira, recomendamos que elimine a tabela no Subscritor manualmente ou utilizando a execução de scripts a pedido: especifique um script que inclua as instruções DROP <objeto> adequadas. Para mais informações, consulte Executar Scripts durante a Sincronização (Programação Transact-SQL de Replicação).

  • Para publicações de fusão com um nível de compatibilidade de 90RTM ou superior, os artigos podem ser retirados a qualquer momento, mas é necessário um novo snapshot. Additionally:

    • Se um artigo for um artigo principal num filtro de junção ou numa relação de registo lógico, as relações devem ser removidas primeiro, o que requer uma reinicialização.

    • Se um artigo tiver o último filtro parametrizado numa publicação, as subscrições devem ser reiniciadas.

  • Para publicações de fusão com um nível de compatibilidade inferior a 90RTM, os artigos podem ser retirados sem considerações especiais antes da sincronização inicial das subscrições. Se um artigo for cancelado após uma ou mais subscrições serem sincronizadas, as subscrições devem ser canceladas, recriadas e sincronizadas.

  • Para publicações instantâneas ou transacionais, os artigos podem ser retirados sem considerações especiais antes da criação das subscrições. Se um artigo for cancelado após a criação de uma ou mais subscrições, as subscrições devem ser canceladas, recriadas e sincronizadas. Para mais informações sobre a cancelação de subscrições, consulte Subscrever Publicações e sp_dropsubscription (Transact-SQL). sp_dropsubscription permite retirar um único artigo da subscrição em vez de toda a subscrição.

  1. Remover um artigo de uma publicação consiste em remover o artigo e criar um novo instantâneo para a publicação. Remover um artigo invalida a captura atual; por isso, tem de ser criada uma nova captura.

  2. Depois de remover um artigo de uma publicação, tem de criar um novo snapshot da publicação (e de todas as partições, se se tratar de uma publicação de intercalação com filtros parametrizados).

Como referido acima, em alguns casos, eliminar um artigo exige que as subscrições sejam canceladas, recriadas e depois sincronizadas. Para mais informações, consulte Subscrever Publicações e Sincronizar Dados.

Note

O SQL Server 2014 (12.x) Service Pack 2 ou superior e o SQL Server 2016 (13.x) Service Pack 1 ou superior suportam a eliminação de uma tabela usando DROP TABLE o comando DDL para artigos que participam na Replicação Transacional. Se uma DROP TABLE DDL for suportada pela(s) publicação(ões), então a operação DROP TABLE eliminará a tabela da publicação e da base de dados. O agente leitor de registos publicará um comando de limpeza para a base de dados de distribuição da tabela descartada e fará a limpeza dos metadados do publisher. Se o leitor de logs não tiver processado todos os registos de log relativos à tabela eliminada, então ignorará os novos comandos associados à tabela eliminada. Os registos já processados serão entregues à base de dados de distribuição. Podem ser aplicadas na base de dados de assinantes se o Distribution Agent as processar antes de o Log Reader limpar o(s) artigo(s) obsoleto (eliminado). A configuração padrão para todas as publicações de replicação transacional consiste em não suportar DROP TABLE DDL. KB 3170123 tem mais detalhes sobre esta melhoria.