2009-07-22 10 views
4

Ich bin gerade auf etwas beunruhigendes gestoßen, ich versuchte Transaktionsreplikation von einer Datenbank zu implementieren, deren Entwurf nicht unter unserer Kontrolle ist. Diese Replikation diente dazu, Berichte zu erstellen, ohne das System zu sehr zu besteuern. Beim Versuch der Replikation gingen nur einige der Tabellen durch.Transaktionsreplikation ohne Primärschlüssel (eindeutiger Index)

Auf Untersuchung Tabellen wurden nicht ausgewählt, um repliziert werden, weil sie keinen Primärschlüssel haben, dachte ich, dies kann nicht sein, es ist sogar als Primärschlüssel angezeigt, wenn ich ODBC und ms zugreifen, aber nicht in Management Studio. Auch die Abfragen sind nicht lächerlich langsam.

Ich habe versucht, einen doppelten Datensatz einzufügen, und es fehlgeschlagen, über einen eindeutigen Index (kein Primärschlüssel) zu sagen. Scheint so zu sein, dass die Tabellen unter Verwendung eines eindeutigen Indexes als Gegenstück zu einem Primärschlüssel implementiert wurden. Warum ich nicht weiß, dass ich schreien kann.

Gibt es trotzdem eine Transaktionsreplikation oder eine Alternative, muss es live sein (letzte Minute oder zwei). Der Haupt-DB-Server ist derzeit SQL 2000 SP3A und der Berichtsserver 2005.

Das einzige, was ich derzeit versucht habe zu versuchen, ist die Replikation einrichten, als ob es eine andere Art von Datenbank ist. Ich glaube, Replikation zu sagen, Orakel ist möglich, würde dies die Verwendung von sagen, ein ODBC-Treiber wie ich vermute, dass der Zugriff verwendet wird damit einen Primärschlüssel zeigt. Ich weiß nicht, ob das genau richtig ist.

Antwort

7

Als MSDN states ist es nicht möglich, eine Transaktionsreplikation für Tabellen ohne Primärschlüssel zu erstellen. Sie könnten Merge replication (one way) verwenden, das nicht über einen Primärschlüssel benötigt, und es wird automatisch eine rowguid Spalte, wenn sie noch nicht existiert:

Merge-Replikation verwendet eine global eindeutige Kennung (GUID) Spalte zu identifizieren jede Zeile während der Zusammenführung Replikationsprozess. Wenn eine veröffentlichte Tabelle keine eindeutige -Spalte mit der ROWGUIDCOL-Eigenschaft und einen eindeutigen Index aufweist, fügt die Replikation hinzu. Stellen Sie sicher, dass SELECT- und INSERT-Anweisungen , die auf veröffentlichte Tabellen verweisen, Spaltenlisten verwenden. Wenn eine Tabelle nicht mehr veröffentlicht ist und die Replikation die Spalte hinzugefügt hat, wird die Spalte entfernt. Wenn die Spalte bereits vorhanden ist, wird sie nicht entfernt.

Leider werden Sie eine Leistungseinbuße haben, wenn Sie Mergereplikation verwenden.

Wenn Sie Replikation verwenden für nur berichten, und Sie müssen die Daten nicht genau so, wie auf dem Verleger gleich sein, dann könnten Sie Snapshot-Replikation auch prüfen

+1

nicht Mergereplikation tun können, Da eine GUID hinzugefügt wird, wird diese Datenbank regelmäßig geändert, um Spalten usw. hinzuzufügen und Skripte, die an uns gesendet werden, um die Aktualisierungen auszuführen. Wenn ich eine Guid-Spalte hinzufügen würde, könnten sie möglicherweise Support zurückziehen und so weiter. Sieht so aus, als ob ich feststecke, wenn wir nicht auf dem Haupt-Datenbankserver auf SQL 2005 upgraden, dann kann ich das Spiegeln machen und es nur als gelesen betrachten. Muss innerhalb einer Minute Live-Daten leider sein. – PeteT

Verwandte Themen