Frage

Das Grundproblem ist wie folgt aus:
Ein Teilnehmer hat eine Zeile aus dem Verlag erfolgreich repliziert, unter Verwendung der Transaktionsreplikation. Nun, wie halten wir die Zeit dieser Reihe verfolgen sein zuletzt erfolgreich repliziert?

Ein Freund hat die folgende Lösung vorgeschlagen, die er für seine SQL Server verwendet 2000:
1) Fügen Sie eine Datetime-Spalte.
2) Ändern Sie die Replikation gespeicherte Prozedur der Datetime-Spalte zu aktualisieren (!).

Der Schritt # 2 Sätze auf alle Arten von Alarmglocken in mir, so dass ich mich gefragt, ob es bessere Lösungen für SQL Server 2005 in dieser Situation ist, bevor ich gehe sogar ins Detail mit seiner Lösung.

War es hilfreich?

Lösung

Ich würde genau das tun, was Ihr Freund vorgeschlagen. Auf diese Weise ruft nur auf die Replikationsprozedur würde den Zeitstempel aktualisieren.

Das Problem bei diesem Ansatz ist, dass Sie eine Schreibsperre benötigen, aber ich don‘andere praktische Art und Weise sehen.

Sie könnten sonst einen Trigger verwenden, die ausgelöst wird, wenn Sie die Zeile holen (zitieren Sie mich nicht an, dass ich sehr selten Auslöser verwendet), aber das scheint nicht richtig (möglicherweise mit falschen Positiven Ende)

Andere Tipps

Ich hatte genau dieses Problem vor ein paar Wochen versucht, die Datensätze zu finden, die vor kurzem geändert haben.

Erstellen Sie eine neue Spalte und setzen Sie den Datentyp TIMESTAMP. SS2005 wird automatisch aktualisiert, um diese Art, wenn die Zeile aktualisiert wird. Das einzige Problem ist, dass dieser ‚Zeitstempel‘ gar nichts hat mit einem Datum oder Zeit zu tun, es ist nur eine Zahl, das die letzte erfolgreiche Aktualisierung dieser Zeile (jede Aktualisierung, nicht nur über die Replikation) widerspiegelt. Wenn das alles ist, was Sie brauchen, dann sollten Sie in Ordnung sein.

Wenn Sie die letzte Replikation update, Dinge könnte ein bisschen schwierig, und Sie müssen Ihre Hände schmutzig mit Triggern und Stored Procs erhalten.

http://www.sqlteam.com/article/timestamps -vs-Datetime-Datentypen

Hope, das ~

hilft

Wenn Sie mit Transaktionsreplikation arbeiten, warum gehst du nicht nur Rekordzeit von Primärdaten zu aktualisieren und halten es mit den anderen Datenbanken auf der nächsten Replikationsauftrag repliziert wurde?

@Philippe: Das Hauptproblem bei diesem Ansatz ist die Replikation eine Weile dauern kann, einige der weiter entfernten Datenbank, aufgrund schlechter Netzwerkverbindung zu erreichen. So wird die Aktualisierungszeit des Hauptsatzes nicht die Zeit des Datensatz reflektiert tatsächlich in der entfernten Datenbank repliziert werden.

Wie auch immer, ich habe meine Freundin Verfahren getestet, und es ist für unsere Forderung gut.

Wenn jemand will, dies auch tun, hier ist ein wichtiger Hinweis: Seien Sie vorsichtig über das Abonnement und zukünftige Schemaänderungen zu initialisieren.

Für meinen Fall, entschieden wir uns zu den Snapshot initialisieren manuell um die hinzugefügt Datetime-Spalte in der Teilnehmerdatenbank zu halten. Ein weiterer möglicher Ansatz könnte sein, Initialisierung zu ermöglichen, aber die vorhandenen gespeicherten Prozeduren ändern zu ignorieren, die hinzugefügt Datetime-Spalte zu replizieren.

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