Verschieben Sie die Datenbank von SQL Server 2012 nach 2008

106893
Rich

Ich habe eine Datenbank auf einer SQL Sever 2012-Instanz, die ich auf einen 2008-Server kopieren möchte. Der 2008 Server kann keine Sicherungen wiederherstellen, die von einem 2012 Server erstellt wurden (ich habe es versucht).

Ich kann 2012 keine Optionen finden, um ein 2008-kompatibles Backup zu erstellen. Fehlt mir etwas?

Gibt es eine einfache Möglichkeit, das Schema und die Daten in ein version-agnostisches Format zu exportieren, das ich dann in 2008 importieren kann?

Die Datenbank verwendet keine 2012 spezifischen Funktionen. Es enthält Tabellen, Daten und gespeicherte Prozeduren.

Hier ist was ich bisher ausprobiert habe

Ich habe versucht, TasksSkripts generieren auf dem Server 2012 zu erstellen, und ich konnte das Schema (einschließlich gespeicherter Prozeduren) als SQL-Skript generieren. Dies beinhaltete jedoch keine der Daten.

Nachdem ich dieses Schema auf meinem 2008er Rechner erstellt hatte, konnte ich den Assistenten "Daten exportieren" auf dem 2012er Rechner öffnen, und nachdem ich den 2012er als Quellrechner und den 2008er als Zielrechner konfiguriert hatte, wurde mir eine Liste von Tabellen angezeigt könnte kopieren. Ich habe alle meine Tabellen (300+) ausgewählt und durch den Assistenten geklickt. Unglücklicherweise verbringt es eine ganze Weile damit, seine Skripte zu generieren, und schlägt dann mit Fehlern wie "Fehler beim Einfügen in die schreibgeschützte Spalte 'FOO_ID'" fehl.

Ich habe auch den "Copy Database Wizard" ausprobiert, der behauptete, "von 2000 oder später bis 2005 oder später" kopieren zu können. Es gibt zwei Modi:

  1. "Trennen und Anhängen", die mit Fehler fehlgeschlagen sind:

    Message: Index was outside the bounds of the array. StackTrace: at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value) ... at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName() 
  2. SQL Management Object Methode, die mit einem Fehler fehlgeschlagen ist

    Eigenschaft IsFileStream kann nicht gelesen werden. Diese Eigenschaft ist in SQL Server 7.0 nicht verfügbar. "

28
Können Sie direkt exportieren? Ich weiß nicht, wie groß Ihre Datenbank ist, aber das würde ich tun, wenn ich mit kleineren Datenbanken arbeite. Dave vor 11 Jahren 0
Keine ältere Version von SQL Server kann Sicherungen von neueren Versionen wiederherstellen. Dies ist beabsichtigt. Verwenden Sie die Exportfunktion, schreiben Sie die Tabellen und Daten aus, und legen Sie das Skriptziel auf SQL 2008 fest. vor 11 Jahren 1
@RandolphWest - Dies funktioniert nur, wenn Sie die Datenbank exportieren können. Wenn Sie sagen, dass Sie einen Export durchgeführt haben und die Version des Skripts nicht geändert und dann die Datenbank gelöscht haben, müssten Sie sie natürlich in dieselbe Version zurückimportieren und dann auf die richtige Weise exportieren. Versuchen herauszufinden, warum jemand, der bei Verstand ist, rückwärts wandert. Ramhound vor 11 Jahren 0
"Der Versuch herauszufinden, warum jemand, der bei Verstand ist, rückwärts wandert." - Ich habe einen Produktionsserver, der 2012 läuft, aber mein Entwicklungscomputer hat nur 2008. Ich hätte gerne eine lokale Kopie der DB, um die Entwicklung zu unterstützen, aber ich möchte 2012 nicht auf meinem Entwicklungscomputer installieren, da dies nicht der Fall ist So viel freier Speicherplatz verbleibt und möchte nicht stundenlang installiert werden. (Ich verbringe also Stunden damit, rückwärts zu migrieren ... aber das ist nur ich.) Rich vor 11 Jahren 4
@DaveRook - was meinst du mit "direkt exportieren"? Die Datenbank umfasst ca. 1 GB. Rich vor 11 Jahren 0
@RandolphWest Was meinst du mit der "Exportfunktion"? Rich vor 11 Jahren 0
Du bist fast am Ziel. Der Export-Bereich, in den Sie gegangen sind, kann sowohl Daten als auch das Schema enthalten. vor 11 Jahren 1
@ RandolphWest - Danke, das hat es geschafft. Die Option ist ziemlich gut versteckt. Siehe meine Antwort unten. Wenn Sie die Gutschrift wünschen, kopieren Sie bitte meine Antwort, und ich akzeptiere Ihre und lösche meine. Rich vor 11 Jahren 0
Ich wollte nur für Ramhound hinzufügen: Ich habe SQL 2008 R2 für SQL 2012 in meiner Entwicklungsumgebung aufgerüstet und dann, nachdem ich viele Schemas und Daten in meiner aktualisierten Instanz geändert hatte, erkannt, dass VS 2010 kein Schema oder keine Daten mit SQL 2012 vergleichen kann. SSDT für VS 2010 und VS 2012 kann ein Schema mit SQL 2012 vergleichen, ist jedoch nicht mit den ursprünglichen VS 2010-Datenbankprojekten kompatibel und kann keine Daten vergleichen. Um es kurz zu machen: Ich gehe lieber zurück zu SQL 2008 R2 und warte, bis eine Entscheidung vom Unternehmen getroffen wird, um zu 2012 zu gelangen. Ich möchte jedoch mein neues Schema / meine neuen Daten speichern. AFAIK Ich bin bei Verstand. GFK vor 11 Jahren 1
Die Antwort von Rich ist großartig. Vergessen Sie auch nicht, die Datenbank auf dem 2008-Server zu erstellen, bevor Sie das Skript ausführen. In einigen Fällen wird die Datenbank nicht erstellt. Boduzapho vor 9 Jahren 0

7 Antworten auf die Frage

40
Rich

Klicken Sie im 2012 SQL Management Studio mit der rechten Maustaste auf die Datenbank und wählen Sie "Aufgaben -> Skripts erstellen". Klicken Sie hinter den Begrüßungsbildschirm und wählen Sie "gesamte Datenbank und alle Datenbankobjekte als Skript". Klicken Sie auf der Seite "Festlegen, wie Skripts gespeichert werden sollen" auf "Erweitert". Ändern Sie auf der Popup-Eigenschaften-Seite unter "Allgemein" die Option "Datentypen für Skript" von "Nur Schema" in "Schema und Daten" und "Skript für Serverversion" von "2012" in "2008".

Ich musste dann einen Weg finden, um den Anfang dieser massiven SQL-Datei zu bearbeiten, um die Erstellung der Datenbank zu optimieren. Siehe dazu q: https://stackoverflow.com/questions/102829/best-free-text-editor -supporting-more-than-4gb-files

Und schließlich musste ich einen Weg finden, um das SQL-Skript auszuführen, das zu groß war, um es in SQL Management Studio zu öffnen. Siehe auch: q: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-datei

Was haben Sie am Anfang der Datei verändert? JonoRR vor 10 Jahren 0
Ich kann mich nicht genau erinnern, sorry. App spezifische Sachen, denke ich. Vielleicht der Datenbankname oder so ähnlich. Ich glaube, ich hätte es hier hinzugefügt, wenn es für Menschen mit demselben Problem relevant wäre. Rich vor 10 Jahren 1
@JonoRR Sie möchten höchstwahrscheinlich die CREATE DATABASE-Anweisung bearbeiten und die Datendateipfade so einstellen, wie es auf dem Zielserver sinnvoll ist. Igby Largeman vor 10 Jahren 3
12
lvmeijer

Verwenden Sie für SQL-Migrationen den kostenlosen SQL-Datenbankmigrations-Assistenten von Open Source.

Ich hatte eine 5-GB-Datenbank mit 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 korrekt. Zweitens kann sqlcmd.exe auch bei großen Dateien fehlschlagen und sich über verfügbaren Speicher beschweren. osql.exe funktioniert, dauert aber nur eine Ewigkeit (und hat dieselben Befehlszeilenargumente).

Dann stieß ich auf ein wunderbares Werkzeug für die Migration von SQL Server zu SQL Azure-Datenbanken. Dies funktioniert auch für SQL Server zu SQL Server, wenn Sie beispielsweise eine SQL 2012-Datenbank zu 2008 R2 migrieren möchten. Es verwendet bcp.exe, die Massenkopie verwendet. Es gibt eine GUI- und eine Befehlszeilenversion (Batch), die Open Source ist. 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.

Wo legen Sie 2008 R2 in diesem Assistenten fest? JonoRR vor 10 Jahren 1
Super Tipp, ich habe eine Datenbank von Express 2012 in Web 2008 wiederhergestellt. Sehr einfach. rkawano vor 9 Jahren 0
Kann bestätigen, dass es wie angekündigt funktioniert. Hatte 2014-> 2012 domänenübergreifende, lokale SQL-Server. Wie hat dieses Tool meine Suche so lange vermieden? Erstaunlich auch für nicht azurblauen Gebrauch. Gomibushi vor 8 Jahren 0
3
Fernando

I'm new to SQL, but I managed to migrate from 2012 to 2008. To do so I used the SQL import and export utility. I chose the SQL 2012 server and the database I want to migrate and finally the 2008 server and created a new database as my database of destination. It worked.

2
Paul

Testen Sie die APEXSQL- Tools. Sie haben ein Werkzeug, das die Datenbank und die Daten auch Skript erstellt.

"ab 299 $" - Gibt es eine kostenlose Alternative? Rich vor 11 Jahren 0
1
Jaimee Jose

Nachdem ich dieses Schema auf meinem 2008er Rechner erstellt hatte, konnte ich den Assistenten "Daten exportieren" auf dem 2012er Rechner öffnen, und nachdem ich den 2012er als Quellrechner und den 2008er als Zielrechner konfiguriert hatte, wurde mir eine Liste von Tabellen angezeigt könnte kopieren. Ich habe alle meine Tabellen (300+) ausgewählt und durch den Assistenten geklickt. Unglücklicherweise verbringt es eine ganze Weile damit, seine Skripte zu generieren, und schlägt dann mit Fehlern wie "Fehler beim Einfügen in die schreibgeschützte Spalte 'FOO_ID'" fehl.

Das Problem ist, dass es nicht möglich ist, die ID-Spalten einzufügen.

  1. Wählen Sie alle Tabellen durch Ankreuzen aus
  2. Wählen Sie alle Tabellen aus. Klicken Sie dazu auf die erste Tabelle, halten Sie die Umschalttaste gedrückt und klicken Sie auf die letzte Tabelle.
  3. Klicken Sie auf "Mappings bearbeiten" - Sie können das direkt über der nächsten Schaltfläche und neben der Vorschau sehen.
  4. Sie erhalten ein Fenster, aktivieren Sie das Kontrollkästchen "Identity aktivieren" und klicken Sie dann auf "Weiter". Fahren Sie fort. Dies sollte funktionieren. Es hat für mich funktioniert.
1
ladygargar

Ich folgte Richs Lösung https://superuser.com/a/469597/312310 oben und es funktionierte großartig! Danke - ich kann hier noch nicht abstimmen!

Die zusätzlichen Schritte, die ich tun musste, um dies zu erreichen, sind:

  • Ändern Sie die logischen Dateinamen und stellen Sie sicher, dass der Pfad korrekt ist. Ich musste auch den generierten Protokollnamen ändern, ansonsten wurde versucht, die MDF-Datei mit dem Protokoll zu überschreiben. Anschließend wurde dieser Fehler ausgegeben. Https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- bereits in Benutzung

    CREATE DATABASE [xxxxx] ON PRIMARY (NAME = xxxxx ', FILENAME = N'C: \ Programme \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', GRÖSSE = 14400 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON (NAME = N'xxxxxldf ', FILENAME = N'C: \ Programme \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', GRÖSSE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) GEHEN

  • Ich musste den generierten Abschnitt auskommentieren und die Benutzerberechtigungen anschließend manuell hinzufügen

    USE [xxxxx] GO /****** Object: User [xxxxx] Script Date: 30/11/2014 12:44:07 ******/ CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo] GO sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco' GO sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco' GO sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco' GO 

Lass es hoch, und siehe da, ich kann jetzt meine neue Umbraco 7.1.2-Datenbank auf meinem Webserver wiederherstellen, der nur SQL Server 2008 R2 hat!

0
Endi Zhupani

Schauen Sie sich xSQL Schema Compare und XSQL Data Compare an . Sie können das Schema zuerst mit dem Schemavergleich synchronisieren und dann die Daten kopieren.

Haftungsausschluss: Ich bin mit xSQL verbunden.