Estou tentando adicionar novos artigos a uma publicação existente no SQL Server 2012.
Estou adicionando o artigo à publicação com a sintaxe
--add the table into the correct publication
sp_addarticle @publication='<publicationname>', @article='CardBookingType_tbl', @source_object='CardBookingType_tbl'
Anteriormente, no SQL Server 2008, eu costumava usar a seguinte sintaxe para assinar apenas 1 tabela e, em seguida, executar o instantâneo. Isso não funciona mais no SQL 2012, pois você precisa assinar todos os artigos.
--add the table into the subscription
EXEC sp_addsubscription
@publication = '<publicationname>',
@subscriber = '<Servername>',
@destination_db = '<dbname>'
GO
No SQL Server 2012, se eu adicionar a tabela por meio da GUI e, em seguida, executar o agente de instantâneo, ele selecionará a nova tabela. Mas se eu adicionar por meio do script, ele aparecerá no gui, mas o instantâneo relata que nenhum novo item foi detectado.
Parece que estou perdendo um pedaço de código para sinalizar os assinantes como faltando um artigo?
Talvez a ideia de Brandon aqui ajude: Como adicionar um artigo à replicação existente
Resumo de suas sugestões para corrigir:
Escrevi algum código para ajudar a identificar os "artigos órfãos no assinante":
Já experimentei isso várias vezes, onde adicionei um novo artigo a uma publicação existente, adicionei uma assinatura de todos os assinantes e, em seguida, executei o agente instantâneo em meu distribuidor remoto.
Às vezes, o instantâneo não é detectado por nenhum assinante, às vezes por uma seleção aparentemente aleatória de assinantes! Não testemunhei nenhum padrão (tenho 6 e parece acontecer em qualquer um deles de vez em quando).
Não descobri a causa raiz, mas o remédio é simples, se não frustrante. Eliminar as assinaturas dos assinantes que não detectaram o novo instantâneo e adicionar novamente a assinatura antes de executar o instantâneo pela segunda vez resolveu o problema.
Eu enfrentei um problema semelhante. Se você criar um script com os detalhes do assinante, poderá encontrá-los. Se você encontrar sp_addsubscription em parameters. Se você encontrar addsubscription apenas para artigos específicos, precisará modificar o parâmetro Articles como 'all'. Em seguida, elimine essa assinatura e recrie com o script modificado e reinicie. Vai funcionar.