Wir haben heute über Datenbankbereitstellungstechniken gesprochen, hatten kürzlich einige Fehler in unserem aktuellen Prozess und haben Situationen gesehen, in denen wir eine Bereitstellung rückgängig machen möchten, die alte Version der Anwendung jedoch nie mit der neuen Version von getestet wurde Datenbank.
Auf der einen Seite gibt es Bereitstellungen im Migrationsstil, bei denen Sie eine Anweisung zum Auf- und Absenken der Version (unabhängig davon, ob diese in SQL oder in Ihrer Anwendungssprache geschrieben sind) haben und Ihre App weiß, auf welche Version sie zugreifen muss.
Diese sind einfach, und da wir nicht oft zurücksetzen, sind die Entwickler sehr an einfachen interessiert. Es gibt jedoch Risiken, wenn Sie ein Feld / eine Tabelle hinzufügen und dieses Feld vor dem Zurücksetzen ausgefüllt wird. Oder schlimmer noch, wenn Sie Daten löschen, die für die vorherige Version relevant waren.
Auf der anderen Seite können wir einen Upgrade-, Rollback- und Rollforward-Ansatz in Betracht ziehen, bei dem das Rollback nicht so drastisch ist wie bei Migrationen. Zum Beispiel kann ein Upgrade ein nicht nullbares Feld hinzufügen. Rollback macht es nullbar, so dass es der alten App egal ist; rollforward füllt die Nullfelder und macht sie wieder nicht nullbar.
Dies speichert Daten, ist jedoch sowohl beim Codieren als auch beim Testen kompliziert (leider sind unsere automatisierten Integrationstests so gut wie nicht vorhanden, und während wir dies korrigieren, haben wir in der Zwischenzeit ein Problem).
Gibt es sichere Möglichkeiten, um die Probleme damit zu mildern? Gibt es andere Optionen, die ich in Betracht ziehen sollte? Haben Sie schlechte Erfahrungen gemacht, die Sie gerne teilen möchten, um mir später Schmerzen zu ersparen?