EMZETT.
Login

Datenbankmigrationen ohne Ausfallzeit

Kurz: Schemaänderungen im laufenden Betrieb gelingen ohne Ausfall, wenn man sie in kleine, abwärtskompatible Schritte zerlegt („Expand and Contract”).

Genauer: Beim Ausrollen laufen kurzzeitig alte und neue Programmversion nebeneinander auf derselben Datenbank. Das Schema muss beide verstehen.

Im Detail

  • Expand: Neue Spalten oder Tabellen hinzufügen, ohne Altes zu entfernen. Neue Spalten nullbar oder mit Standardwert anlegen.
  • Migrate: Neue Programmversion schreibt in beide Orte (alt und neu). Bestandsdaten in kleinen Stapeln im Hintergrund umkopieren.
  • Contract: Erst wenn alles umgestellt und geprüft ist, Altes in einem späteren Release entfernen.
  • Beispiel Spalte umbenennen: Nicht RENAME, sondern neue Spalte anlegen, doppelt schreiben, kopieren, Lesen umstellen, alte Spalte später löschen.
  • Gefährliche Befehle: Je nach Datenbank sperren ADD COLUMN mit Standardwert, Indexaufbau (CREATE INDEX CONCURRENTLY nutzen) oder Typänderungen die ganze Tabelle.
  • Rückweg: Jeder Schritt sollte einzeln rückgängig machbar sein. Migrationen versionieren und in der Pipeline ausführen.
  • Werkzeuge: Flyway, Liquibase, Prisma Migrate, gh-ost (MySQL).

Siehe auch: Transaktionen und ACID