Christopher: Dev-/Test- und Prod-Datenbanken synchronisieren

Hallo,

ich habe mal eine grundsaetzliche Frage was die Synchronisation von Datenbanken angeht.

Folgendes Scenario:
Eine produktive Applikation schreibt fortlaufend Daten in die produktive Datenbank.
Der lokale Entwicklungszweig erweitert die Applikation stetig, mitunter auch die Datenbankstruktur und -Daten.

Wie kann man nun gewaehrleisten, dass die Aenderungen der lokalen Datenbank a) in die produktive uebernommen und b) die neu hinzugekommenen Daten der produktiven Datenbank nicht ueberschrieben werden?

Mir fallen einige Loesungsansaetze hierzu ein, doch selten gehen sie ueber DB-Scripts hinaus. Und solche Loesungen wirken auf mich muehselig.

Wir nutzen Java/Grails und aktuell MySQL 5 (zukuenftig Oracle).

Gibt es fuer diese Thematik saubere Middleware-Loesungen oder prinzipielle architektonische Ansaetze? Wie geht man hier vor?

Danke & Grusz,
Christopher

  1. Hi,

    Eine produktive Applikation schreibt fortlaufend Daten in die produktive Datenbank.
    Der lokale Entwicklungszweig erweitert die Applikation stetig, mitunter auch die Datenbankstruktur und -Daten.

    Wie kann man nun gewaehrleisten, dass die Aenderungen der lokalen Datenbank a) in die produktive uebernommen und b) die neu hinzugekommenen Daten der produktiven Datenbank nicht ueberschrieben werden?

    Mir fallen einige Loesungsansaetze hierzu ein, doch selten gehen sie ueber DB-Scripts hinaus. Und solche Loesungen wirken auf mich muehselig.

    Wir nutzen Java/Grails und aktuell MySQL 5 (zukuenftig Oracle).

    Gibt es fuer diese Thematik saubere Middleware-Loesungen oder prinzipielle architektonische Ansaetze? Wie geht man hier vor?

    ich unterscheide mal dreist zwischen zwei verschiedenen Arten von Daten: Stammdaten und (in Ermangelung eines besseren Begriffes) fortlaufende Daten.

    Änderungen können entweder die Datenstruktur (also die Tabellen) oder die Daten selber betreffen.

    Strukturänderungen an der Datenbank habe ich bisher meist manuell dokumentiert (in Form der ALTER-Statements) und dann beim Release einfach eingespielt. Hat den Nachteil, dass man Änderungen stets zweimal machen muss: einmal beim kompletten Schema und als Release-Delta.
    Vor kurzem habe ich MySQLWorkbench für mich entdeckt. Hier kannst du z.B. das erstellte Schema mit einer Datenbank vergleichen und dann automatisch alle ALTER-Statements erstellen lassen).

    Bei den Daten ist es so, dass ich häufig nur die Stammdaten aktualisiere. Dies dann manuell. Bei den fortlaufenden Daten (meist diejenigen, die im Produktivbetrieb generiert werden) mache ich nichts.

    Für den Release habe ich ein Skript, welches das komplette Release selber macht. Dann vergesse ich nichts und es ist auch nicht so mühsam :)

    Bis die Tage,
    Matti