2008-09-17 5 views
2

Ich lösche fälschlicherweise alle Zeilen aus einer MS SQL 2000-Tabelle, die bei der Mergereplikation verwendet wird (die Tabelle befindet sich auf dem Herausgeber). Ich fügte das Problem dann hinzu, indem ich eine DTS-Operation verwendete, um die Zeilen aus einer Sicherungsdatenbank abzurufen und die Tabelle erneut zu füllen.Löschen von Zeilen aus einer SQL-Tabelle, die für die Replikation markiert ist

Dies hat das folgende Problem erstellt: Der Löschvorgang markiert die Zeilen zum Löschen auf den Clients, aber die DTS-Operation umgeht die Replikationstrigger, so dass die importierten Zeilen nicht zum Einfügen auf den Abonnenten markiert sind. Tatsächlich verlieren die Abonnenten die Daten, obwohl sie sich auf dem Herausgeber befinden.

Also dachte ich "keine Sorgen" Ich werde nur die Zeilen wieder löschen und dann fügen Sie sie korrekt über eine Insert-Anweisung, und sie werden dann für die Einfügung auf die Abonnenten markiert werden.

Das ist mein Problem: Ich kann die DTSed-Zeilen nicht löschen, da ich eine doppelte Schlüsselzeile im Objekt 'MSmerge_tombstone' mit dem eindeutigen Index 'uc1MSmerge_tombstone' nicht einfügen kann. " Error. Was ich tun möchte ist, die Zeilen aus der Tabelle zu löschen, die den Merge-Replikationstrigger umgehen. Ist das möglich? Ich möchte die Replikation nicht entfernen und wiederholen, da die Abonnenten mehr als 50 Windows Mobile-Geräte haben.

Edit: Ich habe versucht, den Befehl Tabelle abschneiden. Das gibt den folgenden Fehler "Tabelle xxxx kann nicht abgeschnitten werden, da es für Replikation veröffentlicht wird"

Antwort

0

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

ich das Merge-Trigger aus der Tabelle gelöscht werden gelöscht
löschte die DTSed Reihen
die Zusammenführung löschen Recreated Trigger
Meine Zeilen wurden mit einer insert-Anweisung korrekt hinzugefügt.

Ich war ein wenig besorgt Kampf mit den Merge-Triggern, aber alles erscheint, um richtig zu funktionieren.

2

Haben Sie versucht, die Tabelle abschneiden?

+1

Gute Idee ... aber ja, ich habe ... Ich bekomme eine "kann Tabelle nicht abschneiden, weil es für die Replikation veröffentlicht wird." Error. – MBoy

2

Möglicherweise müssen Sie die Tabelle abschneiden und das ID-Feld auf 0 zurücksetzen, wenn die eingefügten Zeilen die gleiche ID haben müssen. Wenn nicht, einfach abschneiden und es sollte in Ordnung sein.

1

Sie könnten auch versuchen, den eindeutigen Index vorübergehend zu löschen und ihn nach dem Hinzufügen wieder hinzuzufügen.

+0

Der eindeutige Index befindet sich in der Zusammenführungstabelle. Ich mache mir Sorgen darüber, damit zu spielen. – MBoy

0

Wäre das Erstellen einer zweiten Tabelle eine Option? Sie könnten eine zweite Tabelle erstellen, sie mit den erforderlichen Daten füllen, die Integritätsregeln/Indizes hinzufügen, dann die erste Tabelle löschen und die zweite Tabelle umbenennen. Dies sollte Ihnen die Daten mit den richtigen Schlüsseln geben ... und es sollte alles aus SQL-Anweisungen bestehen, die die Replikation durchnässen dürfen. Es ist einfach nicht die beste Leistung ... und würde definitiv ein gewisses Risiko bedeuten.

Ich habe diese erste Hand in einer replizierten Umgebung nicht versucht ... aber es kann zumindest wert sein, es auszuprobieren.

1

Blick in sp_mergedummyupdate

0

Error: Tabelle kann nicht abgeschnitten werden, weil sie für die Replikation veröffentlicht oder für die Datenerfassung aktiviert ist.

Wenn Sie diese Fehlermeldung erhalten,

SQL Server erfüllt alle folgenden Bedingungen: Sie nicht TRUNCATE TABLE, wo die Tabellen referenziert werden von einem Fremdschlüssel Sie können nicht TRUNCATE TABLE verwenden können wo die Tabellen an einer indizierten Sicht teilnehmen.
Sie können TRUNCATE TABLE nicht verwenden, wenn die Tabellen an der Transaktionsreplikation beteiligt sind. Sie können TRUNCATE TABLE nicht verwenden, wenn die Tabellen an der Mergereplikation beteiligt sind.

Work around: Verwenden Sie die DELETE-Anweisung anstelle von TRUNCATE TABLE. weil es nicht ratsam ist, Replikations-, CDC- oder Indexansichten zu entfernen.

Verwandte Themen