Inkrementelle Replizierung

domeetr

Benutzer
Beiträge
5
Hallo zusammen,

ich habe mich heute hier neu angemeldet, weil ich auf Hilfe von außen angewiesen bin. Für ein Projekt, benötige ich prinzipiell eine Replikation einer Datenbank (mssql). Die Haupt-Datenbank löscht allerdings jeden Tag den 91. Tag weg. Für das Projekt benötige ich aber auch alle Tage nach dem 90. Tag. Sprich, ich möchte eine Art Transaktions-Replikation, die jedoch nur einmal täglich zu der am Anfang erstellten Momentaufnahme inkrementell die Neuigkeiten einspielt.

Ich hoffe das klingt halbwegs verständlich.

Leider kann ich nicht eine Transaktions-Replikation einrichten, weil sonst der Datenbankserver in Stoßzeiten sehr ausgelastet wäre..

Habt ihr dahingehend Ideen?

Vielen Dank schonmal im Voraus!

Liebe Grüße
Domenic
 
Werbung:
Hallo Domenic,

ich habe leider nur ganz grobes Wissen über die Replikation beim SQL Server und habe diese auch selbst noch nicht eingerichtet.
Aber was du suchst, so glaube ich zumindest, ist eine Merge-Replikation.
Mit dieser Art der Replikation kannst du von verschiedenen Standorten/Datenbanken in einer zentralen Master-Datenbank alle Datensatz-Änderungen und natürlich auch neue Datensätze replizieren.
Würde für dein Szenario bedeutet das also, dass die Master-Datenbank die Datenbank sein muss, in der alle Datensätze gesammelt werden.

So weit ich weiß, funktioniert die Replikation aber bidirektional. Das bedeutet, dass eine Änderung, die auf der Master-Datenbank gemacht wird, auch auf die Datenbanken an den anderen Standorten gespiegelt werden.
Wie gesagt, ich habe so etwas noch nicht eingerichtet und vielleicht ist es möglich, dieses bidirektionale Verhalten abzustellen.
(Vielleicht muss es auch explizit gesetzt werden - wie gesagt, habe ich das selber noch nicht gemacht).
Wenn du in der zentralen Datenbank Änderungen am Schema vornimmst (neue Tabellen, Schemas etc.) dann kann das auch dazu führen, dass die Replikation nicht mehr funktioniert und diese Schemaänderungen dann an die Clients, also die anderen Standort-Datenbanken verteilt werden muss. Beim SQL Server 2005 und 2008 hat das teilweise Stunden gedauert!

Mir ist die Verwendung des Szenarios aus deiner Beschreibung nicht ganz klar geworden. Aber historische Daten benötigt man im allgemeinen ja eher für Auswertungen.
Daher stellt sich natürlich die Frage, ob wirklich die gesamte Datenbank repliziert werden muss oder ob hier der Aufbau einen einfachen DWHs, in das nur die relevanten Daten übertragen werden, nicht einfacher, sinnvoller und übersichtlicher wäre.

Viele Grüße,
Tommi
 
Für das Projekt benötige ich aber auch alle Tage nach dem 90. Tag. Sprich, ich möchte eine Art Transaktions-Replikation, die jedoch nur einmal täglich zu der am Anfang erstellten Momentaufnahme inkrementell die Neuigkeiten einspielt.

Ich hoffe das klingt halbwegs verständlich.
Vielleicht. Klingt so, also ob nur Inserts und Updates repliziert werden sollen, nicht aber deletes. Dann hättest Du auf dem Replikat alle Datensätze, auch die, die auf der Quelldatenbank nach 90 Tagen gelöscht werden.

Leider kann ich nicht eine Transaktions-Replikation einrichten, weil sonst der Datenbankserver in Stoßzeiten sehr ausgelastet wäre..

Ich nix M$-SQL. In PG wäre das aber relativ trivial einrichtbar, ab PG Version 10.
 
Werbung:
Hallo zusammen,

vielen Dank für die Antworten :)

Leider war jetzt auf die schnelle nicht der "AHA-Effekt" dabei, der mich auf eine Lösung gestoßen hätte - das macht aber gar nichts!

ich habe leider nur ganz grobes Wissen über die Replikation beim SQL Server und habe diese auch selbst noch nicht eingerichtet.
Aber was du suchst, so glaube ich zumindest, ist eine Merge-Replikation.
Soweit ich das gelesen habe legt eine Merge-Replikation in der Masterdatenbank in jeder Tabelle eine Zusatzspalte an - Da ich allerdings auf eine Datenbank zugreife, die täglich über ein Programm gefüllt wird, müsste ich mich erst an den Hersteller wenden, ob das so einfach möglich ist.

Vielleicht. Klingt so, also ob nur Inserts und Updates repliziert werden sollen, nicht aber deletes. Dann hättest Du auf dem Replikat alle Datensätze, auch die, die auf der Quelldatenbank nach 90 Tagen gelöscht werden.
Genau. Vielleicht mal noch 1-2 Worte zur Umgebung:

Wir haben eine sehr große Datenbank. In dieser Datenbank stehen sehr viele Tabelle. Viele davon sind System-Relevant, andere sind prall gefüllt mit Wissenswertem, dass ich gerne auslesen möchte. Ich habe also jede Tabelle, in der Summe knapp 200 Stück angeschaut und nachgeforscht, ob mich die Datensätze primär interessieren oder ob ich sie nicht brauche.

Daraus entstand dann eine Auswertung von ca 20 Tabellen, die ich für mein Projekt benötige. Ich möchte nämlich am Ende des Projekts ein Wirtschaftlichkeitstool haben, dass mir alle relevanten Daten via Weboberfläche zur Verfügung stellt. Für diese Auswertung will ich noch länger in die Vergangenheit "reisen". 18 Tabellen sind immer gleich und füllen sich stetig weiter. 2 Tabellen jedoch, deren Datensätze in 90 Tagen knapp an die 5 Mio kommen, bekommen jeden Tag den 1. Tag "weggenommen". Dieser verschwindet dann in eine neue Datenbank -> Archiv. Um Platz zu sparen, werden die 2 Tabellen so präpariert, dass sie viele Informationen "verlieren" und nur noch die wichtigsten übrig bleiben. Um die Wirtschaftlichkeit jedoch zu testen, brauche ich auch Infos, die sobald der Datensatz ins Archiv gelangt, nicht mehr da sind.

Ich habe zur Zeit die 20 Datenbanken "geklont" mit einer Momentaufnahme-Transaktion, die jeden Tag um 06 Uhr läuft. Die Tabellen sind aber nur in so weit "geklont", als das sie nur noch die Infos besitzen, die ich benötige. Sprich, auch die 2 sehr großen Tabellen habe ich angepasst, damit unnütze Daten nicht zu unnötig großer Last führen (soweit die Theorie). Ob ich dann in 2 Jahren erschlagen werde von der Masse und dem Speicherplatz sei mal dahingestellt :)

Während des Schreibens ist mir allerdings eine Idee gekommen. Wenn doch die Tabelle immer den 1. Tag weglöscht und ins Archiv kopiert, dann müsste ich, sofern dies über MSSQL und nicht über das Programm konfiguriert wurde, doch eigentlich genau das haben was ich suche - eine inkrementelle Erweiterung der Archiv-Tabelle. Dann müsste ich Theoretisch nur das Skript kopieren und anpassen, indem ich die Archiv-Tabelle zu meiner Wirtschaftlichkeits-Tabelle mache und meine Spalten wähle, die ich für das Projekt brauche.

Ich werde das morgen mal testen, wobei ich leider der Meinung bin, dass dies über das Programm realisiert wurde. Wenn das so ist, hab ich da nicht wirklich Chancen die gleiche "Schnittstelle" zu nutzen, weil ich sonst den Hersteller beauftragen müsste.

Falls noch jemand Ideen hat, gerne her damit. Ich hatte anfangs gedacht, diese simple Möglichkeit klappt:

Select * from Tabelle
Insert * from Tabelle in Tabelle

(Das war wohl zu leicht gedacht)

Aber letzlich ist es ja so, dass wenn ich es vor dem Skript schaffe, alle Datensätze zu kopieren (ich als Mensch), dann hätte ich ja meine inkrementelle "Lösung". Ich dachte mir "Okay, wenn das so ist, dann muss es doch mit Sicherheit auch den Mensch in der virtuellen Umgebung geben, der mir das genau so macht". Eigentlich ziemlich Schade dass es nicht etwas offensichtliches von Microsoft gibt zum Thema Inkrementelle Lösung.
 
Zurück
Oben