Hintergrund
Einmal brauchte ich ein Backup der Produktionsbasis, um einen Fehler zu reproduzieren.
Zu meiner Überraschung stieß ich auf folgende Einschränkungen:
- Die Datenbanksicherung wurde mit der Version von SQL Server 2016 durchgeführt und war nicht mit meinem SQL Server 2014 kompatibel.
- Auf meinem Arbeitscomputer wurde Windows 7 als Betriebssystem verwendet, sodass ich SQL Server nicht auf Version 2016 aktualisieren konnte
- Das unterstützte Produkt war Teil eines größeren Systems mit einer stark verbundenen Legacy-Architektur und wandte sich auch anderen Produkten und Basen zu, sodass die Bereitstellung auf einer anderen Station sehr lange dauern kann.
Vor diesem Hintergrund bin ich zu dem Schluss gekommen, dass die Zeit für
Krücken nicht standardisierter Lösungen gekommen ist.
Datenwiederherstellung aus dem Backup
Ich habe mich für die
Oracle VM VirtualBox mit Windows 10 entschieden (hier können Sie ein Testbild für den Edge-Browser
erstellen ). SQL Server 2016 wurde auf der virtuellen Maschine installiert und die Anwendungsdatenbank aus der Sicherung wiederhergestellt (
Anweisungen ).
Konfigurieren Sie den Zugriff auf SQL Server in einer virtuellen Maschine
Außerdem mussten einige Schritte unternommen werden, um von außen auf SQL Server zugreifen zu können:
- Fügen Sie für eine Firewall eine Regel hinzu, um Anforderungen an Port 1433 zu überspringen.
- Es ist wünschenswert, dass der Zugriff auf den Server nicht über die Windows-Authentifizierung erfolgt, sondern über SQL mit einem Benutzernamen und einem Kennwort (es ist einfacher, den Zugriff zu konfigurieren). In diesem Fall müssen Sie jedoch daran denken, die SQL-Authentifizierung in den Eigenschaften von SQL Server zu aktivieren.
- Geben Sie in den Benutzereinstellungen von SQL Server auf der Registerkarte Benutzerzuordnung die Benutzerrolle db_securityadmin für die wiederhergestellte Datenbank an.
Datenübertragung
Tatsächlich besteht die Datenübertragung selbst aus zwei Schritten:
- Datenschemaübertragung (Tabellen, Ansichten, gespeicherte Prozeduren usw.)
- Daten selbst übertragen
Datenschemamigration
Wir führen folgende Operationen durch:
- Wählen Sie Aufgaben -> Skripte für die tragbare Datenbank generieren .
- Wir wählen die für die Übertragung erforderlichen Objekte aus oder belassen den Standardwert (in diesem Fall werden Skripte für alle Objekte in der Datenbank erstellt).
- Geben Sie Einstellungen zum Speichern des Skripts an. Am bequemsten ist es, das Skript in einer einzigen in Unicode codierten Datei zu speichern. Im Fehlerfall müssen dann nicht alle Schritte erneut wiederholt werden.
Nach dem Speichern des Skripts kann es auf dem ursprünglichen SQL Server (alte Version) ausgeführt werden, um die erforderliche Datenbank zu erstellen.
Achtung: Nach dem Ausführen des Skripts müssen Sie die Übereinstimmung der Datenbankeinstellungen aus der Sicherung und der vom Skript erstellten Datenbank überprüfen. In meinem Fall gab es keine Einstellung für COLLATE im Skript, was zu einem Absturz beim Übertragen von Daten und
Tanzen mit einem Tamburin führte, um die Datenbank mithilfe eines erweiterten Skripts neu
zu erstellen.
Datenübertragung
Vor dem Übertragen von Daten müssen Sie die Überprüfung aller Einschränkungen deaktivieren, basierend auf:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
Wir übertragen Daten mithilfe des Assistenten zum
Importieren von Aufgaben -> Importieren von Daten in SQL Server, in dem sich die vom Skript erstellte Datenbank befindet:
- Geben Sie die Quellverbindungseinstellungen an (SQL Server 2016 auf der virtuellen Maschine). Ich habe den nativen Data Source SQL Server-Client und die oben genannte SQL-Authentifizierung verwendet.
- Geben Sie die Einstellungen für die Verbindung zum Ziel an (SQL Server 2014 auf dem Hostcomputer).
- Konfigurieren Sie als Nächstes die Zuordnung. Sie müssen alle nicht schreibgeschützten Objekte auswählen (z. B. müssen Sie keine Ansichten auswählen). Wählen Sie als zusätzliche Option "Einfügen in Identitätsspalten zulassen" , falls verwendet.
Achtung: Wenn Sie versuchen, mehrere Tabellen auszuwählen und die Eigenschaft "Einfügen in Identitätsspalten zulassen" für diese festzulegen , wurde die Eigenschaft bereits für mindestens eine der ausgewählten Tabellen festgelegt. Im Dialogfeld wird angezeigt, dass die Eigenschaft bereits für alle ausgewählten Tabellen festgelegt ist. Diese Tatsache kann verwirrend sein und zu Übertragungsfehlern führen. - Wir starten den Transfer.
- Einschränkungsprüfung wiederherstellen:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Wenn Fehler auftreten, überprüfen Sie die Einstellungen, löschen Sie die mit den Fehlern erstellte Datenbank, erstellen Sie sie neu aus dem Skript, nehmen Sie Korrekturen vor und wiederholen Sie die Datenübertragung.
Fazit
Diese Aufgabe ist ziemlich selten und tritt nur aufgrund der oben genannten Einschränkungen auf. Die häufigste Lösung besteht darin, SQL Server zu aktualisieren oder eine Verbindung zu einem Remoteserver herzustellen, wenn die Anwendungsarchitektur dies zulässt. Niemand ist jedoch vor dem alten Code und den
krummen Händen einer Entwicklung
von schlechter Qualität sicher. Ich hoffe, Sie brauchen diese Anleitung nicht, aber wenn Sie sie noch brauchen, können Sie viel Zeit und Nerven sparen. Vielen Dank für Ihre Aufmerksamkeit!
Liste der verwendeten Quellen