Es hängt wirklich davon ab, wie groß, kompliziert und aktiv Ihre Datenbank ist. Beachten Sie, dass während Sie Schemaänderungen vornehmen, viele der Tabellen schreibgeschützt oder vollständig unzugänglich sind, bis die Änderungen abgeschlossen sind. Denken Sie auch daran, dass das Gegenteil der Fall ist: Ihre Schemaänderungen müssen exklusive Sperren für ganze Tabellen und möglicherweise für alle ihre Beziehungen erhalten. Dies kann lange dauern oder sogar unmöglich sein, wenn die Anwendung im Weg steht. Theoretisch kann dies zu kreisförmigen Sperren führen, die den gesamten DB einfrieren. Grundsätzlich sollten Sie stattdessen Ausfallzeiten einplanen, wenn viele Lese- und Schreibvorgänge ausgeführt werden und Änderungen zu erheblichen Störungen Ihrer Anwendung führen.
Dann müssen Sie die Änderungen berücksichtigen, die Ihre Anwendung erfordert. Erfordert das Ändern des Schemas auch Änderungen in der Anwendung? Ist Ihre Anwendung klein genug oder modular genug, um diese Änderungen in Schritten vorzunehmen, wenn Sie die Datenbank ändern? Letztendlich ist es sehr schwierig, Änderungen in der Produktion vorzunehmen. Wenn Ihre App nicht von Grund auf dafür entwickelt wurde, lohnt sich der zusätzliche Aufwand für kleine Ausfallzeiten fast überall nicht.
Die andere Möglichkeit, Ausfallzeiten zu minimieren, besteht darin, eine neue Datenbank mit einem verbesserten Schema und einem damit verbundenen neuen App-Server zu erstellen und anschließend ein Widget zu erstellen, um die Daten zwischen der neuen und der alten Datenbank zu synchronisieren. Wenn Sie zur Bereitstellung bereit sind, leiten Sie den Datenverkehr einfach zum neuen App-Server. Dies ist wiederum ein Kompromiss zwischen der Schwierigkeit, das System zu erstellen, und der Schwierigkeit, Ausfallzeiten zu akzeptieren. Es gibt nur sehr wenige Anwendungen, die ein oder zwei Stunden mit einer Meldung "Geplante Wartung" ab 2 Uhr morgens am Dienstagabend nicht tolerieren können.