Ich habe 8 einzelne SQL Server 2008 R2-Computer, auf denen jeweils 1 Datenbank gehostet wird. Jede Datenbank hat eine identische Tabellenstruktur und ein identisches Schema sowie vollständig eindeutige Daten.
Ich möchte einen Berichtsserver einrichten (möglicherweise 2008 oder 2012), der die Zeilen aus ausgewählten Tabellen auf den 8 Quellservern in einer einzelnen Instanz dieser Tabellen auf dem Berichtsserver konsolidiert. Dies ist eine One-Way-Replikation (es werden keine Änderungen am Berichtsserver vorgenommen). Ich muss Änderungen aus den Quelldatenbanken mit relativ geringer Latenz replizieren (z. B. 20-30 Sekunden).
Darüber hinaus möchte ich Methoden finden, um dies zu erreichen und dabei die Quellserver so wenig wie möglich zu belasten. Agenten, Trigger oder Schema-Modifikationen von Drittanbietern für diese Server sind in meiner Umgebung schwierig.
Meine Fragen:
- Was sind vielversprechende Architekturen und Technologien, um dieses Ziel zu erreichen?
- Ich habe mir SQL Server Merge Replication angesehen, bin aber besorgt über die Latenz. Ist das eine geeignete Technologie für dieses Ziel?
- Gibt es viele-zu-eins-Architekturen für die Transaktionsreplikation?
- Soll ich die 1-zu-1-Replikation in 8 Datenbanken auf meinem Berichtsserver und anschließend eine benutzerdefinierte Zusammenführungsfunktion (eine 2-stufige Replikation) in Betracht ziehen?
Danke, John
quelle
Antworten:
Dies können Sie mit der Transaktionsreplikation erreichen . Im Folgenden erfahren Sie, wie Sie dies tun können.
Hinweis : Sie müssen Ihr Tabellenschema geringfügig ändern, um dies zu erreichen, da Sie diese Zeilen beim Replizieren auf den Abonnenten eindeutig identifizieren müssen. Als Voraussetzung für T-Rep müssen Tabellen mit PK definiert sein.
Unten sehen Sie Ihre Beispieltabelle auf Publisher-Servern , die sich auf allen 8 Servern befinden, auf denen Sie Zeilen auf dem Berichtsserver konsolidieren möchten:
Auf dem Abonnentenserver müssen Sie dieselbe Tabelle mit unterschiedlichen PK erstellen, um die Zeilen auf dem Abonnenten eindeutig zu identifizieren. Andernfalls schlägt T-Rep mit einer PK-Verletzung fehl. Ich gehe davon aus, dass Sie die PK-Struktur nicht ändern können Live-Produktion, lieber am Abonnenten modifizieren
Das folgende Skript hilft Ihnen beim Einrichten von T-Rep. Ändern Sie einfach den Datenbanknamen, den Zielservernamen und den Objektnamen.
Einige Punkte zu beachten:
Stellen Sie in sp_addsubscription sicher, dass
@sync_type = N'automatic'
Und die Artikeleigenschaften sollten eingestellt sein auf:
Schließlich können Sie Zeilen von allen (in meinem Fall 3 Servern) wie folgt konsolidieren lassen:
Also zusammenfassend
Erstellen Sie eine Tabelle für Subscriber, in der PK als Servername enthalten ist.
Erstellen Sie eine Replikation der Tabellen, wobei @sync_type = N'automatic 'und die Article-Eigenschaft auf "Vorhandenes Objekt unverändert lassen" gesetzt sind.
Führen Sie den Snapshot-Agent aus.
Überprüfen Sie die konsolidierten Daten auf dem Abonnenten.
quelle