Ich habe eine Datenbank aus einem Backup wiederhergestellt. Die Datenbank verwendet die Replikation, um auf einem anderen Server zu veröffentlichen. Unter der Annahme, dass die Datenbankwiederherstellung die Replikation unterbrechen würde, habe ich versucht, die Replikation zu löschen und neu zu erstellen (wir haben ein Skript, um sie von Grund auf neu zu erstellen). Ich bin mir nicht sicher, was ich genau getan habe, aber jetzt ist es in einem völlig durcheinander geratenen Zustand und ich kann es nicht reparieren.
Zuerst versuche ich, das Abonnement (auf dem Publisher-Server) loszuwerden:
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
Das scheint zu funktionieren. SELECT * FROM syssubscriptions
zeigt keine Ergebnisse. Auf dem Abonnentenserver SSMS> {SubscriberServer}> Replikation> Lokale Abonnements - das Abonnement ist nicht vorhanden.
Also versuche ich die Publikation zu löschen. SSMS> {Server}> Replikation> Lokale Veröffentlichungen> {Veröffentlichungsname}> Löschen. Dies gibt die folgende Fehlermeldung aus:
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, also versuche ich die Artikel fallen zu lassen:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
und erhalte diesen Fehler:
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, ich versuche den Snapshot Agent zu starten und erhalte diese interne SQL-Ausnahme:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Also habe ich eine alternative Methode zum Löschen des Artikels ausprobiert DELETE FROM sysarticles
. Dies scheint funktioniert zu haben. Ich habe die Artikel jetzt entfernt, erhalte jedoch immer noch den Fehler "Die Veröffentlichung kann nicht gelöscht werden, da für diese Veröffentlichung mindestens ein Abonnement vorhanden ist", wenn ich versuche, die Veröffentlichung zu löschen.
Ich habe auch SQL Server neu gestartet - hat nicht geholfen.
Ich weiß nicht, was hier los ist und wie ich es behebe.
Übrigens passiert dies, wenn Sie einem Softwareentwickler, der gerade genug weiß, um die Schlüssel für die Datenbank gefährlich zu machen, geben. Zum Glück ist dies keine Produktionsumgebung ...
MSPublications
in derdistribution
Datenbank zeigt, dass die Veröffentlichung tatsächlich weg ist. Wird das erwartet?Ich hatte ein Durcheinander mit der Replikation und löste es damit
Das und:
Sind die Retter beim Aufräumen durcheinandergebrachte Replikationen?
quelle
Durch das Wiederherstellen der Datenbank wird die Replikation unterbrochen. Das ist also normal. Außerdem handelt es sich bei den meisten anderen Fehlermeldungen nur um Folgemeldungen, da Sie nicht alle Abonnements entfernen konnten (oder zumindest SQL dies glaubt).
Sie wissen, dass Sie Ihren Herausgeber (die Quellendatenbank) und mindestens einen Abonnenten (die Zieldatenbank) haben und dass dies zwei verschiedene Server sind. Ich möchte nur erwähnen, dass es auch einen Distributor gibt, der sich auf einem dieser oder einem anderen Server befindet und wahrscheinlich in einer Datenbank namens Distribution. Manchmal enthält es einige nützliche Informationen, und manchmal fallen die Dinge um, weil die Informationen zwischen den drei nicht übereinstimmen.
Haben Sie bei der Überprüfung der Abonnenten auch diesen Abschnitt auf dem Publisher- Server überprüft, um sicherzustellen, dass nichts anderes aufgeführt ist? Wenn Sie welche finden, können Sie versuchen, sie manuell zu entfernen:
Angenommen, sie sind wirklich alle verschwunden, versuchen Sie dies in der Publisher-Datenbank:
Lassen Sie uns wissen, wie es geht. Die Replikation in diesem Zustand verwirrt mich und andere gute Datenbankadministratoren und hat überhaupt nichts damit zu tun, Entwickler zu sein :-)
quelle
Die einzige Möglichkeit, Phantomreplikationsartefakte zu entfernen, besteht darin, Abonnements, Artikel und Veröffentlichungen zu löschen. Wenn noch Phantomabonnements vorhanden sind, erstellen Sie die Publikation einschließlich des Phantomabonnements neu. Dies scheint besonders bei älteren Versionen zu funktionieren.
quelle
Dies ist, was ich normalerweise mache, wenn ich eine Publikation habe, die durcheinander ist.
Es ist ein bisschen hässlich, aber es hat bei vielen Gelegenheiten in verschiedenen Umgebungen für mich funktioniert. Was verursacht es? , Das ist manchmal schwierig , um es herauszufinden, am besten manchmal ist von Grund auf neu zu beginnen, aber auch für die Sie brauchen , um aufzuräumen
all
dieresiduals
von der aktuellen Publikation , die fehlerhaft ist.nur um es in einen Zusammenhang zu bringen:
Folgendes sehe ich auf dem Replikationsmonitor:
und wenn ich meinen eigenen Replikationsmonitor mit T-SQL verwende :
Sie können 2 Zeilen im letzten Feld unten sehen - und eine sollte nicht vorhanden sein:
das gleiche, wenn ich dieses Skript benutze:
Zuerst machen Sie das, was in den anderen Antworten oben gezeigt wird. Wenn das funktioniert , ist das in Ordnung, es funktioniert manchmal, das Problem ist gelöst.
das wäre mehr oder weniger:
Um diese Veröffentlichung vollständig zu entfernen, beginnen wir mit der Verbindung zum Buscriber und dann zum Publisher und dann zum Distributor gemäß dem folgenden Skript:
Erstellen Sie zu diesem Zeitpunkt die Publikation wie gewohnt neu
Setzen Sie dann den Schnappschuss zum Laufen
Warten Sie, bis der Snapshot erstellt ist
MAYBE YOU DONT NEED TO RUN THE SNAP
- Versuchen Siewithout
, es zuerst auszuführen. Meistens funktioniert es. Außerdem können Siesmall
der Publikation nur 1-2 Artikel hinzufügen , damit der Snap schnell ausgeführt wirdWenn Sie den Snapshot jedoch ausführen, müssen Sie warten, bis er abgeschlossen ist, bevor Sie mit dem nächsten Schritt fortfahren können.
drop the publication
Danach generieren Sie die Skripte
drop that publication
gemäß dem folgenden Bild:Wenn Sie danach unsere obigen Originalskripte ausführen oder einen Blick auf den Replikationsmonitor werfen , sehen Sie hoffentlich nicht die fehlerhafte Veröffentlichung, sondern nur die guten, in meinem Fall nur eine:
quelle
Ich hatte das gleiche Problem mit meiner Vorproduktionsbox, dem Befehl
scheinen an der Bereinigung gefälschter Abonnementeinträge gearbeitet zu haben ...
quelle