Ich habe eine Reihe von Clients mit SQL Server 2008 und das habe ich auch hier auf meinem Server. Ich verwende Sicherungsdateien, um Datenbanken zwischen Kunden und in meinem Büro hin und her zu senden.
Ich habe gelesen, dass es beim Erstellen eines Backups von SQL Server 2012 keine Möglichkeit gibt, es auf einer 2008-Instanz wiederherzustellen. Ich nahm an, dass der Kompatibilitätsgrad dieses Problem lösen würde, aber das ist nicht der Fall. Daher bin ich nicht in der Lage, ein Upgrade durchzuführen. Abgesehen davon, dass alle meine Kunden auf einmal aktualisiert werden, was unmöglich ist, kann ich mir keinen sauberen Weg vorstellen, dies zu tun.
Ich muss eine Datenbank an einen Client senden sowie eine Datenbank von einem Client empfangen. Dies ist mein erstes Versions-Upgrade auf SQL Server, daher ist dieses Problem für mich neu. Irgendwelche Ideen, wie es weitergehen soll?
quelle
Antworten:
Hier geht es um zwei Dinge: die Versionsnummer der Datei und den Kompatibilitätsgrad. Wenn Sie eine Datenbank an eine neuere Hauptversion anhängen (z. B. von 2008 bis 2008R2 oder 2008R2 bis 2012), wird die Datenbankversion dauerhaft geändert, und Sie können diese Datenbank nicht erneut an eine ältere Version anhängen.
Die Kompatibilitätsstufe dient zum Analysieren von veraltetem T-SQL, das in älteren Versionen von SQL Server verwendet wurde. Es ändert nichts daran, wie die Daten auf der Festplatte gespeichert werden.
Um die Datenbank einer älteren Version von SQL Server zu übergeben, müssen Sie die Daten exportieren und in eine andere Datenbank importieren. Hilfsmittel wie Data Compare von Red Gate sind hierfür hilfreich.
quelle
bcp
.Die Einstellung für den Kompatibilitätsgrad wird von SQL Server verwendet, um zu bestimmen, wie bestimmte neue Features behandelt werden sollen. Auf diese Weise kann eine Datenbank auf eine neuere Version von SQL migriert werden, ohne dass Probleme mit der Anwendung auftreten. Die Kompatibilitätsstufe kann vor und zurück geändert werden.
Leider sind die Sicherungsdateien nicht abwärtskompatibel. Eine Möglichkeit wäre, Ihre Daten mithilfe von Import / Export aus Ihrer aktuellen Datenbank in Ihre ältere Versionsinstanz zu verschieben.
quelle
Verwenden Sie für SQL-Migrationen den kostenlosen und quelloffenen SQL-Datenbankmigrationsassistenten.
Ich hatte eine 5 GB Datenbank mit ein paar ~ 10 Millionen Datensätzen und habe die Route über Generate Script ausprobiert und dann mit sqlcmd.exe ausgeführt. Erstens funktionierte das generierte Skript nicht immer richtig. Zweitens kann sqlcmd.exe auch bei großen Dateien fehlschlagen und sich über den verfügbaren Speicher beschweren. osql.exe funktioniert, benötigt aber nur Ewigkeiten (und hat dieselben Befehlszeilenargumente).
Dann bin ich auf ein wunderbares Tool zum Migrieren von SQL Server zu SQL Azure-Datenbanken gestoßen. Dies funktioniert auch für SQL Server nach SQL Server, wenn Sie beispielsweise eine SQL 2012-Datenbank nach 2008 R2 migrieren möchten. Es verwendet bcp.exe, das Massenkopien verwendet. Es gibt eine GUI- und eine Befehlszeilenversion (Batch) und es ist Open Source. Siehe http://sqlazuremw.codeplex.com/ . In meinem Fall dauerte die Operation 16 Minuten.
In einem erweiterten Bildschirm können Sie auswählen, dass Ihr Ziel SQL Server und nicht SQL Azure ist.
quelle
Ich habe festgestellt, dass BCP effektiver ist als einige der Tools zum Abrufen von Daten in eine frühere Version von SQL Server und zum Abrufen von Daten aus RDS. (Danke @ivan_posdeev.)
Ich erstelle das Schema, indem ich mit der rechten Maustaste auf die Datenbank in SQL Server Management Studio, Aufgaben, Skripten erstellen klicke. Kreuzen Sie alle Objekte an, stellen Sie in erweiterten Objekten sicher, dass alle erforderlichen Skripte (Statistiken, Indizes usw.) erstellt werden. Deaktivieren Sie "Datenbank VERWENDEN", wenn Ihre Zieldatenbank einen anderen Namen hat, und erstellen Sie eine Datei, die Ihr Schema erstellt. Erstellen Sie eine Datenbank auf Ihrem Ziel und führen Sie diese Datei darauf aus (mit
osql
,sqlcmd
oder die GUI).Führen Sie zum Verschieben der Daten die folgende Abfrage in der Quellendatenbank zweimal aus. Kommentieren Sie zuerst die zweite Spalte, um die Stapeldatei zum Extrahieren von Daten zu generieren, und kommentieren Sie dann die erste Spalte, um die auf Ihrem Ziel auszuführende Importstapeldatei zu generieren. (Sie müssen Ihre Quell- und Zielserver, Instanznamen, Ausgabe- und Eingabedateiverzeichnisse, Benutzernamen und Kennwörter hinzufügen. Um die integrierte Sicherheit zu verwenden, ersetzen Sie die Optionen und durch .)
-U
-P
-T
Dies unterstützt Unicode. Wenn Sie dies nicht benötigen, ändern Sie den
-N
Schalter in beiden Anweisungen auf-n
.Nach dem Ausführen werden die Prüfdateien mit dem Namen schema.tabellenname.ERRORS.dat - alle fehlgeschlagenen Zeilen einbezogen. Leer, wenn keine vorhanden sind.
Hier finden Sie eine MSDN-Referenz für BCP. Hier erfahren Sie mehr über die BCP-Optionen .
Ich habe festgestellt, dass dies der Erstellung von Skripten und den von mir ausprobierten Tools weit überlegen ist. Es kann auch auf RDS-Datenbanken ausgeführt werden (die keine Sicherungen zulassen). Die generierten Datendateien haben 30% der Größe der SQL-Skripte. Die Ausführung nimmt einen Bruchteil der Zeit in Anspruch und ist wesentlich zuverlässiger. (Die von SQL Server für die Skripterstellung generierten Skripte haben immer ausgelöst, manchmal vorhersehbar manchmal nicht, die generierte SQL war nicht kompatibel mit 2008R2 (z. B. verwendet
nvarchar(0)
, oft nicht abgeschlossen, ohne erkennbaren Grund usw.). BCP repliziert auch Verstöße gegen Einschränkungen , wie referentielle Integrität.).quelle