Eu restaurei um banco de dados a partir de um backup. O banco de dados usa replicação para publicar em um servidor diferente. Supondo que a restauração do banco de dados interrompa a replicação, tentei excluí-la e recriá-la (temos um script para recriá-la do zero). Não sei exatamente o que fiz, mas agora ele está completamente bagunçado e não posso consertá-lo.
Primeiro, tento me livrar da assinatura (no servidor do editor):
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
Isso parece funcionar. SELECT * FROM syssubscriptions
não mostra resultados. Procurando no servidor do assinante, SSMS> {SubscriberServer}> Replicação> Assinaturas Locais - a assinatura não existe.
Então, eu tento excluir a publicação. SSMS> {Servidor}> Replicação> Publicações Locais> {Nome da Publicação}> Excluir. Isso fornece a seguinte mensagem de erro:
Could not delete publication 'PublicationName'.
Could not drop article. A subscription exists on it.
Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046)
Ok, então eu tento soltar os artigos:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
e obtenha este erro:
Invalidated the existing snapshot of the publication. Run the Snapshot Agent again to generate a new snapshot.
Msg 14046, Level 16, State 1, Procedure sp_MSdrop_article, Line 75
Could not drop article. A subscription exists on it.
Ok, então eu tento iniciar o Snapshot Agent e recebo esta exceção SQL interna:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Então, tentei um método alternativo de excluir o artigo DELETE FROM sysarticles
,. Isso parece ter funcionado - agora me livrei dos artigos, mas continuo com o mesmo erro 'Não é possível descartar a publicação porque existe pelo menos uma assinatura para esta publicação' quando tento excluir a publicação.
Também reiniciei o SQL Server - não ajudou.
Não sei o que está acontecendo aqui e como faço para corrigir isso?
Aliás, é isso que acontece quando você fornece a um desenvolvedor de software que sabe o suficiente para ser perigoso as chaves do banco de dados. Felizmente, este não é um ambiente de produção ...
MSPublications
nodistribution
banco de dados revela que a publicação realmente se foi. Isso é esperado?Eu tive uma bagunça com a replicação e resolvi com isso
Isso e:
São os salvadores ao limpar as replicações desarrumadas.
fonte
Restaurar o banco de dados interromperá a replicação, o que é normal. Além disso, a maioria das outras mensagens de erro são apenas subseqüentes porque você não conseguiu remover todas as assinaturas (ou pelo menos o SQL pensa assim).
Você sabe que possui seu editor (o banco de dados de origem) e pelo menos um assinante (o banco de dados de destino) e que esses são dois servidores diferentes. Eu só quero mencionar que também há um distribuidor que está em um desses servidores ou em outro, e provavelmente em um banco de dados chamado distribuição. Às vezes, há algumas informações úteis e, às vezes, as coisas acontecem porque as informações entre os três não coincidem.
De qualquer forma, quando você verificou os assinantes, também verificou essa seção no servidor do editor para garantir que não havia mais nada listado? Se você encontrar algum, tente removê-lo manualmente:
Mas, supondo que eles realmente se foram, tente isso no banco de dados do editor:
Deixe-nos saber como vai. A replicação quando entra nesse estado me confunde e outros DBAs bons não têm nada a ver com ser um desenvolvedor :-)
fonte
A única maneira de me livrar dos artefatos de replicação fantasma é descartar as assinaturas, artigos, publicações. Se ainda houver assinaturas fantasmas, recrie a publicação, incluindo o assinante fantasma. Isso parece funcionar especialmente com versões mais antigas.
fonte
é o que normalmente faço quando tenho uma publicação que está bagunçada.
é um pouco feio, mas funcionou para mim em várias ocasiões em diferentes ambientes. o que causa isso? que às vezes é difícil descobrir isso, melhor, por vezes, é começar do zero, mas mesmo para isso você precisa de esclarecer
all
aresiduals
partir da publicação atual que está com defeito.apenas para colocar em contexto:
É o que vejo no monitor de replicação:
e quando eu uso meu próprio monitor de replicação usando T-SQL :
você pode ver duas linhas na última caixa abaixo - e uma delas não deve estar lá:
o mesmo quando eu uso este script:
Primeiro, faça o que é mostrado nas outras respostas acima, se isso funcionar , tudo bem, às vezes funciona, problema resolvido.
isso seria mais ou menos isso:
Agora, para se livrar completamente desta publicação, começaremos por conexão com o buscriber, e depois o editor e o distribuidor conforme o script abaixo:
neste ponto, recrie a publicação como faria normalmente
em seguida, coloque o instantâneo para executar
espere que ele termine de gerar o instantâneo
MAYBE YOU DONT NEED TO RUN THE SNAP
- tentewithout
executá-lo primeiro, na maioria das vezes ele funciona, você também pode adicionar apenas 1-2small
artigos à publicação para que o snap seja executado rapidamentemas se você executar o instantâneo, precisará esperar até que ele termine para poder ir para a próxima etapa -
drop the publication
Depois disso, você gera os scripts
drop that publication
conforme a imagem abaixo:depois disso, esperançosamente, quando você executar nossos scripts originais acima ou dar uma olhada no monitor de replicação, não verá a publicação com defeito, apenas as boas, no meu caso, apenas uma:
fonte
Eu tive o mesmo problema na minha caixa de pré-produção, o comando
parecem ter trabalhado na limpeza de entradas de assinatura falsas ...
fonte