Frage Empfohlene Vorgehensweise zum Ändern des Schemas einer Produktions-SQL-Datenbank?


Angenommen, es gibt eine Datenbank mit mehr als 100 Tabellen, und es wurde ein Hauptmerkmal hinzugefügt, bei dem 20 vorhandene Tabellen geändert und 30 weitere hinzugefügt werden müssen. Die Änderungen wurden über eine lange Zeit (6 Monate) von mehreren Entwicklern in der Entwicklungsdatenbank durchgeführt. Nehmen wir an, dass die Änderungen keine vorhandenen Produktionsdaten ungültig machen (z. B. sind in addierten Spalten Standardwerte / Nullen erlaubt, es gibt keine neuen Beziehungen oder Einschränkungen, die nicht erfüllt werden konnten).

Was ist der einfachste Weg, diese Änderungen im Schema in der Produktionsdatenbank zu veröffentlichen? Vorzugsweise ohne die Datenbank für eine längere Zeit herunterzufahren.


5
2017-07-18 14:30


Ursprung


Antworten:


Es gibt keine allgemeine Antwort darauf, wie man Änderungen ohne Ausfallzeiten vornehmen kann. Die Antwort hängt wirklich von Fall zu Fall ab, basierend auf genau was die Änderungen sind. Einige Änderungen haben keinen Einfluss auf die Ausfallzeit (z. B. Hinzufügen neuer Tabellen), einige Änderungen haben minimale Auswirkungen (z. B. das Hinzufügen von Spalten zu vorhandenen Tabellen ohne Änderung der Datengröße, wie eine neue Nullable-Spalte, die die Null-Bitmap-Größe erhöht) andere Änderungen werden die Ausfallzeit zerstören (jede Operation, die die Datengröße ändert, wird die Wiederherstellung erzwingen und indexieren und die Tabelle für die Dauer sperren). Einige Änderungen sind ohne signifikante Ausfallzeiten nicht möglich. Ich kenne Fälle, in denen die Änderungen parallel angewendet wurden: Eine Kopie der Datenbank wird erstellt, die Replikation wird so eingerichtet, dass sie aktuell bleibt, dann wird die Kopie geändert und synchron gehalten, schließlich werden die Operationen in die geänderte Kopie verschoben Stammdatenbank. Es gibt eine Präsentation bei PASS 2009 von Michelle Ufford gegeben  das erwähnt, wie Gottaddy eine solche Veränderung durchlebte Wochen.

Aber in einem kleineren Maßstab, du Muss Wenden Sie die Änderungen über ein gut getestetes Skript an und messen Sie die Auswirkungen auf die Testauswertung.

Aber die wirkliche Frage ist: wird das das sein? letzte Änderungen, die Sie jemals an dem Schema vornehmen? Schließlich haben Sie das perfekte Schema für die Anwendung entdeckt und die Produktionsdatenbank wird sich nie ändern. Gratulation, wenn du das einmal gemacht hast, kannst du zur Ruhe gehen. Aber realistisch gesehen, werden Sie das gleiche Problem in 6 Monaten begegnen. Das eigentliche Problem ist Ihr Entwicklungsprozess, mit Entwicklern und Änderungen von SSMS oder VS Server Explored direkt in die Datenbank. Ihr Entwicklungsprozess muss sich bewusst bemühen, eine Schemaänderungsstrategie zu übernehmen, die auf Versionierung und T-SQL-Skripten basiert, wie in Versionskontrolle und Ihre Datenbank.


3
2017-07-18 18:03



Schreiben Sie ein T-SQL-Skript, das die erforderlichen Änderungen durchführt. Testen Sie es auf einer Kopie Ihrer Produktionsdatenbank (Wiederherstellen von einer aktuellen Sicherung, um die Kopie zu erhalten). Beheben Sie die unvermeidlichen Fehler, die der Test entdecken wird. Wiederholen Sie den Vorgang, bis das Skript einwandfrei funktioniert.

Wenn es dann Zeit für die eigentliche Migration ist: Sperren Sie die Datenbank, damit nur Administratoren sich anmelden können. Erstellen Sie eine Sicherungskopie. Führen Sie das Skript aus. Überprüfen Sie die Ergebnisse. DB wieder online stellen

Der längste Teil wird die Sicherung sein, aber Sie wären verrückt, es nicht zu tun. Sie sollten wissen, wie lange Backups dauern, der gesamte Prozess wird nicht viel länger dauern, so lange dauert Ihre Ausfallzeit. Die Mitte der Nacht funktioniert gut für die meisten Unternehmen.


6
2017-07-18 14:37



Verwenden Sie ein Tool, um ein diff-Skript zu erstellen und es während eines Wartungsfensters auszuführen. ich benutze RedGate SQL Vergleichen dafür und waren sehr glücklich damit.


2
2017-07-18 15:33



Ich verwende dbdeploy seit einigen Jahren erfolgreich. Es ermöglicht Ihren Entwicklern kleine SQL-Änderungsdeltas zu erstellen, die dann auf Ihre Datenbank angewendet werden können. Die Änderungen werden von einer Changelog-Tabelle in der Datenbank verfolgt, sodass sie weiß, was zu beachten ist.

http://dbdeply.com/


1
2017-07-18 14:43