Restablecí una base de datos desde una copia de seguridad. La base de datos usa la replicación para publicar en un servidor diferente. Suponiendo que la restauración de la base de datos rompería la replicación, traté de eliminarla y volver a crearla (tenemos un script para volver a crearla desde cero). No estoy seguro de lo que hice exactamente, pero ahora está en un estado completamente desordenado y no puedo solucionarlo.
Primero, trato de deshacerme de la suscripción (en el servidor del editor):
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
Esto parece funcionar. SELECT * FROM syssubscriptions
no muestra resultados Buscando en el servidor del suscriptor, SSMS> {SubscriberServer}> Replicación> Suscripciones locales: la suscripción no está allí.
Entonces trato de eliminar la publicación. SSMS> {Servidor}> Replicación> Publicaciones locales> {PublicationName}> Eliminar. Esto da el siguiente mensaje de error:
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, entonces trato de soltar los artículos:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
y obtén este error:
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, entonces trato de iniciar el Agente de instantáneas y obtengo esta excepción interna de SQL:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Así que he intentado un método alternativo de borrar el artículo, DELETE FROM sysarticles
. Esto parece haber funcionado: ahora me he deshecho de los artículos, pero sigo recibiendo el mismo error 'No se puede descartar la publicación porque al menos existe una suscripción para esta publicación' cuando intento eliminar la publicación.
También he reiniciado SQL Server, no ayudó.
No sé qué está pasando aquí y cómo lo soluciono.
Por cierto, esto es lo que sucede cuando le das a un desarrollador de software que sabe lo suficiente como para ser peligroso las claves de la base de datos. Afortunadamente, este no es un entorno de producción ...
MSPublications
en ladistribution
base de datos revelan que la publicación ya no existe. ¿Se espera esto?Tuve un lío con la replicación y lo resolví con esto
Eso y:
Son los salvadores cuando se limpian las replicaciones desordenadas.
fuente
Restaurar la base de datos interrumpirá la replicación, así que eso es normal. Además, la mayoría de los otros mensajes de error son solo seguimientos porque no ha podido eliminar todas las suscripciones (o al menos SQL cree que sí).
Sabe que tiene su editor (la base de datos de origen) y al menos un suscriptor (la base de datos de destino), y que estos son dos servidores diferentes. Solo quiero mencionar que también hay un distribuidor que está en cualquiera de estos servidores u otro, y probablemente en una base de datos llamada distribución. A veces tiene información útil y otras cosas se caen porque la información entre los tres no coincide.
De todos modos, cuando revisó los suscriptores, ¿también revisó esa sección en el servidor del editor para asegurarse de que no hubiera nada más en la lista? Si encuentra alguno, puede intentar eliminarlo manualmente:
Pero suponiendo que realmente se hayan ido, intente esto en la base de datos del editor:
Háganos saber cómo va. La replicación cuando entra en este estado me confunde a mí y a otros buenos DBA nada que ver con ser un desarrollador en absoluto :-)
fuente
La única forma en que he podido deshacerme de los artefactos de replicación fantasma es soltando las suscripciones, artículos y publicaciones. Si todavía hay suscripciones fantasmas, vuelva a crear la publicación, incluido el suscriptor fantasma. Esto parece funcionar especialmente con versiones anteriores.
fuente
Esto es lo que hago normalmente cuando tengo una publicación que está en mal estado.
Es un poco feo, pero me ha funcionado en muchas ocasiones en diferentes entornos. ¿Qué lo causa? esto es a veces difícil de averiguar, a veces es mejor que empezar de cero, pero incluso para eso se necesita para aclarar
all
laresiduals
de la publicación actual que es defectuoso.solo para ponerlo en contexto:
Esto es lo que veo desde el monitor de replicación:
y cuando uso mi propio monitor de replicación usando T-SQL :
puedes ver 2 líneas en el último cuadro a continuación, y una no debería estar allí:
lo mismo cuando uso este script:
Primero, haga lo que se muestra en las otras respuestas anteriores, si eso funciona , está bien, a veces funciona, el problema está resuelto.
eso sería más o menos:
Ahora, para deshacernos por completo de esta publicación, comenzaremos conectándonos al buscriber, y luego al editor, y luego al distribuidor según el script a continuación:
en este punto, vuelva a crear la publicación como lo haría normalmente
luego ponga la instantánea para ejecutar
espere a que termine de generar la instantánea
MAYBE YOU DONT NEED TO RUN THE SNAP
- intentewithout
ejecutarlo primero, la mayoría de las veces funciona, también puede agregar solo 1-2small
artículos a la publicación para que el complemento se ejecute rápidamentepero si ejecuta la instantánea, debe esperar hasta que finalice antes de poder continuar con el siguiente paso:
drop the publication
después de eso, genera los scripts
drop that publication
según la imagen a continuación:después de eso, con suerte, cuando ejecute nuestros scripts originales anteriores , o eche un vistazo al monitor de replicación, no verá la publicación defectuosa, solo las buenas, en mi caso solo una:
fuente
Tuve el mismo problema en mi cuadro de preproducción, el comando
parece haber trabajado en la limpieza de entradas de suscripción falsas ...
fuente