Verschieben Sie die Datenbank von SQL Server 2012 nach 2008

29

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

Ich kann 2012 keine Optionen zum Erstellen eines 2008-kompatiblen Backups finden. Vermisse ich etwas?

Gibt es eine einfache Möglichkeit, das Schema und die Daten in ein versionsunabhängiges 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.

Folgendes habe ich bisher versucht

Ich habe TasksGenerate Scripts auf dem 2012-Server ausprobiert und konnte das Schema (einschließlich gespeicherter Prozeduren) als SQL-Skript generieren. Dies beinhaltete jedoch keine der Daten.

Nachdem ich dieses Schema auf meinem 2008-Computer erstellt hatte, konnte ich den Assistenten "Daten exportieren" auf dem 2012-Computer öffnen. Nachdem ich 2012 als Quellcomputer und 2008 als Zielcomputer konfiguriert hatte, wurde mir eine Liste von Tabellen angezeigt, die ich verwenden konnte könnte kopieren. Ich habe alle meine Tabellen (300+) ausgewählt und durch den Assistenten geklickt. Leider verbringt es einige Zeit damit, Skripte zu erstellen, 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 nach 2005 oder später" kopieren zu können. Es gibt zwei Modi:

  1. "Trennen und Anhängen", was mit Fehler fehlgeschlagen ist:

    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 Fehler fehlgeschlagen ist

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

Reich
quelle
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
2
Keine ältere Version von SQL Server kann Sicherungen von neueren Versionen wiederherstellen. Dies ist beabsichtigt. Verwenden Sie die
4
"Ich versuche herauszufinden, warum jemand, der bei klarem Verstand ist, rückwärts wandern würde." - Ich habe einen Produktionsserver, auf dem 2012 ausgeführt wird, aber mein Entwicklungscomputer hat nur 2008. Ich möchte eine lokale Kopie der Datenbank, um die Entwicklung zu unterstützen, aber ich möchte 2012 nicht auf meinem Entwicklungscomputer installieren, da ich dies nicht getan habe So viel freier Speicherplatz ist noch vorhanden, und Sie möchten keine Stunden damit verbringen, ihn zu installieren. (Also verbringe ich Stunden damit, rückwärts zu migrieren ... aber das bin nur ich.)
Reichhaltig
1
Du bist fast am Ziel. Der Exportabschnitt, in den Sie gegangen sind, bietet die Option, sowohl Daten als auch das Schema einzuschließen.
1
Ich wollte nur für Ramhound hinzufügen: Ich habe SQL 2008 R2 in meiner Entwicklungsumgebung auf SQL 2012 aktualisiert und dann festgestellt, dass VS 2010 Schema oder Daten nicht mit SQL 2012 vergleichen kann, nachdem ich viele Schemas und Daten in meiner aktualisierten Instanz geändert habe. SSDT für VS 2010 und VS 2012 kann das 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 getroffen wird, um mit 2012 fortzufahren. Aber ich möchte mein neues Schema / meine neuen Daten speichern. AFAIK Ich bin bei Verstand.
GFK

Antworten:

40

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

Ich musste dann eine Möglichkeit finden, den Start dieser massiven SQL-Datei zu bearbeiten, um zu optimieren, wie die Datenbank erstellt werden würde - siehe hierzu q: https://stackoverflow.com/questions/102829/best-free-text-editor -unterstützung-von-mehr-als-4gb-dateien

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 hierzu q: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-datei

Reich
quelle
Was haben Sie am Anfang der Datei geändert?
JonoRR
1
Ich kann mich nicht genau erinnern, sorry. App-spezifisches Zeug, denke ich. Vielleicht der Datenbankname oder so ähnlich. Ich denke, ich hätte es hier hinzugefügt, wenn es für Leute mit dem gleichen Problem relevant wäre.
Rich
3
@JonoRR Sie möchten höchstwahrscheinlich die Anweisung CREATE DATABASE bearbeiten und die Datendateipfade auf einen Wert festlegen, der auf dem Zielserver sinnvoll ist.
Igby Largeman
12

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.

lvmeijer
quelle
1
Wo stellen Sie den 2008 R2 in diesem Assistenten ein?
JonoRR
Toller Tipp, ich habe eine Datenbank von Express 2012 auf Web 2008 wiederhergestellt. Sehr einfach.
Rkawano
Kann bestätigen, dass es wie angekündigt funktioniert. Habe einen 2014-> 2012, domänenübergreifenden, lokalen SQL-Server. Wie hat dieses Tool meine Suche so lange vermieden! Erstaunlich auch für den nicht-azurblauen Gebrauch.
Gomibushi
3

Ich bin neu in SQL, habe es aber geschafft, von 2012 auf 2008 zu migrieren. Dazu habe ich das SQL-Dienstprogramm zum Importieren und Exportieren verwendet. Ich habe den SQL 2012-Server und die zu migrierende Datenbank und schließlich den Server 2008 ausgewählt und eine neue Datenbank als Zieldatenbank erstellt. Es funktionierte.

Fernando
quelle
2

Probieren Sie die APEXSQL- Tools aus. Sie haben ein Tool, das die Datenbank und die Daten auch skriptet.

Paul
quelle
"ab 299 US-Dollar" - gibt es eine kostenlose Alternative?
Rich
1

Nachdem ich dieses Schema auf meinem 2008-Computer erstellt hatte, konnte ich den Assistenten "Daten exportieren" auf dem 2012-Computer öffnen. Nachdem ich 2012 als Quellcomputer und 2008 als Zielcomputer konfiguriert hatte, wurde mir eine Liste von Tabellen angezeigt, die ich verwenden konnte könnte kopieren. Ich habe alle meine Tabellen (300+) ausgewählt und durch den Assistenten geklickt. Leider verbringt es einige Zeit damit, Skripte zu erstellen, und schlägt dann mit Fehlern wie "Fehler beim Einfügen in die schreibgeschützte Spalte 'FOO_ID'" fehl.

Das Problem ist, dass die ID-Spalten nicht eingefügt werden können.

  1. Wählen Sie alle Tabellen aus, indem Sie sie ankreuzen
  2. Wählen Sie alle Tabellen aus (Klicken Sie dazu auf die erste und halten Sie die Umschalttaste gedrückt und klicken Sie auf die letzte Tabelle).
  3. Klicken Sie auf "Zuordnungen bearbeiten" - Sie können dies direkt über der nächsten Schaltfläche und neben der Vorschau sehen.
  4. Sie erhalten ein Fenster, klicken Sie auf "Identitäts-Insert aktivieren" und klicken Sie dann auf "Weiter" und fahren Sie fort, dies sollte funktionieren. Es hat bei mir funktioniert.
Jaimee Jose
quelle
1

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

Die zusätzlichen Schritte, die ich machen musste, um dies zum Laufen zu bringen, sind:

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

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

  • Ich musste den generierten Abschnitt auskommentieren und anschließend die Benutzerberechtigungen 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
    

Ran it up, und siehe da, ich kann jetzt meine neue Umbraco 7.1.2-Datenbank auf meinem Webserver wiederherstellen, der nur SQL Server 2008 R2 enthält!

Ladygargar
quelle
0

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

Haftungsausschluss: Ich bin mit xSQL verbunden.

Endi Zhupani
quelle