Frage

ich alle Zeilen aus einer MS SQL 2000-Tabelle fälschlicherweise löschen, die in Mergereplikation verwendet wird (die Tabelle auf dem Verleger ist). Ich verstärkt dann das Problem durch ein DTS-Betrieb mit den Zeilen aus einer Backup-Datenbank abzurufen und die Tabelle neu zu besiedeln.

Dies hat folgende Ausgabe erstellt: Der Löschvorgang markiert die Zeilen zum Löschen auf den Clients aber die DTS Betrieb umgeht die Replikation löst so die importierten Zeilen zum Einfügen nicht auf den Abonnenten gekennzeichnet sind. In der Tat verlieren die Teilnehmer die Daten, obwohl es auf dem Verleger ist.

So dachte ich, „keine Sorgen“ Ich werde nur die Zeilen wieder löschen und dann richtig über eine Insert-Anweisung hinzufügen, und sie werden dann an den Abonnenten zum Einsetzen markiert werden.

Das ist mein Problem: Ich kann die DTSed Zeilen nicht löschen, weil ich eine bekommen „Kann keine doppelte Schlüsselzeile in Objekt‚MSmerge_tombstone‘mit eindeutigem Index‚uc1MSmerge_tombstone‘eingefügt werden.“ Error. Was ich möchte, ist irgendwie tun, um die Zeilen aus der Tabelle löschen Sie den Mergereplikation Trigger umgehen. Ist das möglich? Ich will nicht entfernen und die Replikation zu wiederholen, da die Abonnenten windows mobile Geräte 50+ sind.

Edit: Ich habe den Truncate Table Befehl versucht. Dies gibt die folgende Fehlermeldung „Can not Tabelle xxxx gestutzt, weil es für die Replikation veröffentlicht wird“

War es hilfreich?

Lösung 6

Danke für die Tipps ... Ich fand schließlich eine Lösung:

Ich löschte die merge-Trigger aus der Tabelle löschen
Gelöschte die DTSed Reihen
Neu erstellt löschen die Zusammenführung Auslöser
Hinzugefügt meine Zeilen richtig ein Insert-Anweisung.

Ich war ein wenig besorgt Kampf mit den merge Auslöser Hantieren aber alles, was erscheint korrekt zu funktionieren.

Andere Tipps

Haben Sie versucht, die Tabelle Kürzen?

Sie haben möglicherweise die Tabelle kürzen und das ID-Feld wieder auf 0 zurückgesetzt, wenn Sie die eingefügten Zeilen müssen die gleiche ID haben. Wenn nicht, nur gestutzt und es sollte in Ordnung sein.

Sie können auch in vorübergehend schauen den eindeutigen Index fallen und das Hinzufügen es zurück, wenn Sie fertig sind.

Schauen Sie in sp_mergedummyupdate

Erstellen wäre eine zweite Tabelle eine Option sein? Sie könnten eine zweite Tabelle, füllen Sie es mit den benötigten Daten erstellen, fügen Sie die Einschränkungen / Indizes, dann die erste Tabelle löschen und Ihre zweite Tabelle umbenennen. Dies sollten Sie die Daten mit den richtigen Schlüssel geben ... und es sollten alle bestehen aus SQL-Anweisungen, die die Replikation herabrieseln erlaubt sind. Es ist einfach nicht wahrscheinlich das beste auf die Leistung ... und auf jeden Fall ein gewisses Risiko darstellen würde.

Ich habe nicht versucht, diese aus erster Hand in einer replizierten Umgebung ... aber es kann zumindest ein Versuch wert sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top