Hallo
Hallöle,
parallel zu meinem Problem, neuere Dateien auf einen Ersatz-Server zu übertragen (Zeitstempel bei Dateien) möchte ich auch neuere Datensätze von einer Quellen-DB zur Ziel-DB übertragen.
Jeder Datensatz hat ein Feld last_modified (ON UPDATE CURRENT_TIMESTAMP).
Nun hole ich mir pro Tabelle den aktuellsten last_modified aus beiden Datenbanken und weiss, ob ich ins Detail gehen muss oder eine Übetragung überflüssig ist.
Soweit, so logisch.
Das Konzept klappt nur, wenn die Ziel-Datenbank nicht berührt wird. Sie ist für den Fall vorgesehen, dass der Hauptserver ausfällt.
Wenn die Zieldatenbank auf dem Sekundärserver nur dazu da ist, als Backup zu dienen, also im Bedarfsfall die Daten zurück zu spielen, sollten dort, außer bei den Backups selbst, keine Änderungen anfallen. Wird der Sekundärserver mitsamt der dortigen Datenbank aber in Benutzung genommen, falls der Primärserver ausfällt, können dort die Datensätze verändert sein, also einen aktuelleren Stand als die auf dem Primärserver haben (wie auch dein nächster Absatz nahe legt).
Wie könnte ein Konzept aussehen, wenn auch auf der Ziel-DB gearbeitet wurde?
Sowohl der Primär- als auch der Sekundärserver könnten mit einer Synchronisationstabelle ausgestattet werden. Dort würden die Synchronisationszeitpunkte, Datenbank- und Tabellennamen und Datensatz-IDs, die von einer Synchronisation betroffen sind, hinterlegt. Bei einer neuen Synchronisation können nun diese Daten mit den in den Datensätzen hinterlegten Zeitpunkten der letzten Aktualisierung verglichen werden.
Werden Aktualisierungen von Datensätzen *nur* auf einem der beiden Server vorgenommen, was bei deinem Szenario der Normalfall sein dürfte, liegt auf dem betreffenden System der Aktualisierungszeitpunkt später (oder nicht) als der Synchronisationszeitpunkt und es steht eine erneute Synchronisation des Datensatzes an (oder nicht). Dabei könnte allenfalls dein automatisch gesetztes Aktualisierungsdatum stören ("bei Aktualisierung Datum neu setzen" bedeutet auch, bei Synchronisationen das Datum neu zu setzen).
Sollte der Fall auftreten, dass eine Aktualisierung nach der letzen Synchronisation, aber vor dem Ausfall des Primärservers vorgenommen wird und zudem, während des Ausfalls des Primärservers, auf dem Backupsystem (Sekundärserver) ebenfalls eine Aktualisierung vorgenommen wurde, sind natürlich beide Aktualisierungszeitpunkte jünger als der letzte Synchronisierungszeitpunkt. Das wäre, um den Vergleich zu ziehen, in einem Versionierungssystem ein Konflikt, der gemeldet und händisch aufgelöst werden müsste.
Tschö, Auge
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
Veranstaltungsdatenbank Vdb 0.3