Übertragen von Sicherungsdaten von einer neuen Version von MS SQL Server auf eine ältere Version

Vorgeschichte

Um einen Fehler zu reproduzieren, benötigte ich einmal ein Backup der Produktionsdatenbank.

Zu meiner Überraschung stieß ich auf folgende Einschränkungen:

  1. Die Datenbanksicherung wurde auf der Version erstellt SQL Server 2016 und war nicht mit meinem kompatibel SQL Server 2014.
  2. Auf meinem Arbeitscomputer war das verwendete Betriebssystem Windows 7daher konnte ich nicht aktualisieren SQL Server bis Version 2016
  3. Das unterstützte Produkt war Teil eines größeren Systems mit einer eng gekoppelten Legacy-Architektur und kommunizierte auch mit anderen Produkten und Basen, sodass die Bereitstellung auf einer anderen Station sehr lange dauern konnte.

Angesichts des oben Gesagten bin ich zu dem Schluss gekommen, dass die Zeit für Krücken und nicht standardmäßige Lösungen gekommen ist.

Daten aus einem Backup wiederherstellen

Ich habe mich für die Verwendung einer virtuellen Maschine entschieden Oracle VM VirtualBox mit Windows 10 (Sie können ein Testbild für den Edge-Browser erstellen daher). SQL Server 2016 wurde auf der virtuellen Maschine installiert und die Anwendungsdatenbank wurde aus der Sicherung wiederhergestellt (Unterricht).

Konfigurieren des Zugriffs auf SQL Server auf einer virtuellen Maschine

Als nächstes mussten einige Schritte unternommen werden, um von außen auf den SQL Server zugreifen zu können:

  1. Fügen Sie für die Firewall eine Regel hinzu, um Portanfragen zu überspringen 1433.
  2. Es ist wünschenswert, dass der Zugriff auf den Server nicht über die Windows-Authentifizierung erfolgt, sondern über SQL mit einem Login und einem Passwort (der Zugriff lässt sich einfacher einrichten). In diesem Fall müssen Sie jedoch daran denken, die SQL-Authentifizierung in den SQL Server-Eigenschaften zu aktivieren.
  3. In den Benutzereinstellungen auf SQL Server auf der Registerkarte Benutzerzuordnung Geben Sie die Benutzerrolle für die wiederhergestellte Datenbank an db_securityadmin.

Datentransfer

Tatsächlich besteht die Datenübertragung selbst aus zwei Schritten:

  1. Datenschemaübertragung (Tabellen, Ansichten, gespeicherte Prozeduren usw.)
  2. Übertragen der Daten selbst

Datenschemaübertragung

Wir führen folgende Operationen durch:

  1. wählen Aufgaben -> Skripte generieren für eine tragbare Basis.
  2. Wählen Sie die Objekte aus, die Sie übertragen möchten, oder belassen Sie den Standardwert (in diesem Fall werden Skripte für alle Datenbankobjekte erstellt).
  3. Geben Sie die Einstellungen zum Speichern des Skripts an. Am bequemsten ist es, das Skript in einer einzigen Unicode-Datei zu speichern. Dann müssen Sie im Falle eines Fehlers nicht alle Schritte erneut wiederholen.

Sobald das Skript gespeichert ist, kann es auf dem ursprünglichen SQL Server (alte Version) ausgeführt werden, um die erforderliche Basis zu erstellen.

Hinweis: Nach der Ausführung des Skripts müssen Sie die Übereinstimmung zwischen den Einstellungen der Datenbank aus dem Backup und der durch das Skript erstellten Datenbank überprüfen. In meinem Fall gab es im Skript keine Einstellung für COLLATE, was zu einem Fehler beim Übertragen von Daten und beim Tanzen mit einem Tamburin führte, um die Datenbank mithilfe des ergänzten Skripts neu zu erstellen.

Datentransfer

Vor der Datenübertragung müssen Sie die Prüfung aller Einschränkungen der Datenbank deaktivieren:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Die Datenübertragung erfolgt über den Datenimport-Assistenten Aufgaben -> Daten importieren auf SQL Server, wo sich die vom Skript erstellte Datenbank befindet:

  1. Geben Sie die Verbindungseinstellungen zur Quelle an (SQL Server 2016 auf einer virtuellen Maschine). Ich habe die Datenquelle verwendet Nativer SQL Server-Client und die oben erwähnte SQL-Authentifizierung.
  2. Geben Sie die Verbindungseinstellungen für das Ziel an (SQL Server 2014 auf dem Hostcomputer).
  3. Als nächstes richten Sie die Zuordnung ein. Alle müssen ausgewählt werden nicht schreibgeschützt Objekte (z. B. müssen Ansichten nicht ausgewählt werden). Wählen Sie als zusätzliche Optionen aus „Einfügung in Identitätsspalten zulassen“wenn solche verwendet werden.
    Hinweis: wenn, wenn Sie versuchen, mehrere Tabellen auszuwählen und deren Eigenschaften festzulegen „Einfügung in Identitätsspalten zulassen“ Wenn die Eigenschaft bereits für mindestens eine der ausgewählten Tabellen festgelegt wurde, zeigt das Dialogfeld an, dass die Eigenschaft bereits für alle ausgewählten Tabellen festgelegt wurde. Dieser Umstand kann verwirrend sein und zu Migrationsfehlern führen.
  4. Wir starten den Transfer.
  5. Einschränkungsprüfung wiederherstellen:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Treten Fehler auf, überprüfen wir die Einstellungen, löschen die fehlerhaft erstellte Datenbank, erstellen sie aus dem Skript neu, nehmen Korrekturen vor und wiederholen die Datenübertragung.

Abschluss

Diese Aufgabe ist recht 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, sofern die Anwendungsarchitektur dies zulässt. Allerdings ist niemand vor veraltetem Code und den krummen Händen einer minderwertigen Entwicklung gefeit. Ich hoffe, dass Sie diese Anleitung nicht benötigen, aber wenn Sie sie dennoch benötigen, wird sie Ihnen viel Zeit und Nerven sparen. Vielen Dank für Ihre Aufmerksamkeit!

Liste der verwendeten Quellen

Source: habr.com