Herunterstufen von SQL Server 2008 auf 2005

32

Datenbankdateien, die mit SQL 2008 erstellt wurden, sind nicht mit 2005 kompatibel. Gibt es eine Problemumgehung?

Sevki
quelle
Vergessen Sie nicht, auch die Server-Logins zu exportieren.
StanleyJohns
Liegt es daran, dass Sie im Jahr 2008 entwickeln, Ihre Produktionsserver jedoch noch im Jahr 2005 sind? Jede Lösung, die Sie anbieten, wird das Unvermeidliche nur verzögern und gleichzeitig Ihr Leben miserabel machen, da Sie diese Downgrades wahrscheinlich regelmäßig durchführen werden.
Datum

Antworten:

16

Keine Tools von Drittanbietern erforderlich. Mit SQL Server 2008 Management Studio haben wir ein sehr leistungsfähiges Tool zum Downkonvertieren einer Datenbank erhalten, da dem Assistenten "Skriptdaten" die Option "Skriptdaten" hinzugefügt wurde.

Klicken Sie mit der rechten Maustaste auf die Datenbank in SQL2008 SSMS und gehen Sie zu Aufgaben und dann zu "Skripten generieren".

Gehen Sie durch den Assistenten und stellen Sie sicher, dass Sie "True" für "Script Data" unter den Tabellen- / Ansichtsoptionen auswählen. Wählen Sie alle Objekte aus und führen Sie das Skript aus, das auf dem 2005-Server erstellt wurde. (Bitte beachten Sie, dass das Skript erstellt werden könnte massiv , wenn die ursprüngliche Datenbank ist sehr groß!)

Beachten Sie, dass Sie den Assistenten sogar auf einem SQL2005-Server ausführen können, um eine SQL2005-Datenbank auf SQL2000 herunter zu konvertieren (die 2008-Tools müssten natürlich auf Ihrer Workstation installiert sein).

BradC
quelle
4
Keine Beleidigung, aber dies kann keine Lösung sein, wenn die Datenbank groß ist. Versuchen Sie diese Technik in einer Tabelle mit wenigen Millionen Zeilen (und stellen Sie sich varchar (max) als den Datentyp einer einzelnen Spalte vor). Wenn Management Studio diese Datei öffnen und analysieren kann, sind Sie glücklich, aber ich bin es sicher, dass es nicht geöffnet wird, wird es abstürzen. Sorry, aber das ist nicht die Lösung für dieses Problem, außer wenn die Datenbank wirklich klein ist.
Marian
3
Sicher, wenn die Datenbank zu groß ist, schreiben Sie nur die Datenbankstruktur aus und verwenden Sie Ihre bevorzugte Methode (SSIS, BCP, Import-Assistent), um die Daten zu übertragen.
BradC
In SSMS 11.0 scheint es keine Option zu geben, Daten zusammen mit der Struktur zu skripten. i.imgur.com/SGkG8oZ.png
jcollum
Ah OK, es ist jetzt unter "Zu
skriptende
16

Sie könnten die Daten von einer SQL Server-Instanz zu einer anderen Instanz BCP. Dies wäre der schnellste Weg, um die Daten von einer Version in eine andere zu kopieren. Abhängig vom Datenvolumen kann dies lange dauern.

Jeremiah Peschka
quelle
2
Abhängig vom Datenvolumen wird es fast immer lange
dauern
Ja, das wird es sicher. Das Verschieben einer großen Datenbank auf eine ältere Version von SQL Server ist keine leichte Aufgabe.
Mrdenny
2
Der Vorteil von BCP ist, dass es schneller ist als die Verwendung von Skriptdaten. Ja, es ist langsam, aber schneller als viele Alternativen.
Jeremiah Peschka
15

Es gibt leider keinen direkten Weg, wie ich weiß, eine DB vom Format 2008 auf das Format 2005 herunterzustufen.

So habe ich das in der Vergangenheit gemacht (tatsächlich mit älteren Versionen von SQL Server, aber der Prozess wird der gleiche sein):

  1. Stellen Sie die Datenbank auf einer SQL2008-Instanz wieder her, falls dies noch nicht geschehen ist
  2. Erstellen Sie in einer SQL2005-Instanz eine leere Datenbank mit den richtigen Strukturen (Tabellen, Indizes, Einschränkungen, Ansichten, Prozessen, Triggern usw.). Hoffentlich können Sie dies aus Ihrer vorhandenen Erstellungsprozedur und / oder Ihrem Quellcode heraus tun. Andernfalls können Sie mit dem SQL Server-Manager Skripts für alle Elemente in der 2005-Datenbank erstellen und das Ergebnis in der 2008-Instanz auf einem leeren ausführen.
  3. Stellen Sie sicher, dass die beiden Instanzen sich gegenseitig sehen können (dh, dass keine Firewalls Verbindungen blockieren, wenn sich die Instanzen auf verschiedenen Computern befinden) und verknüpfen Sie sie mithilfe von sp_addlinkedserver .
  4. Kopieren Sie alle Daten von einem DB in den anderen. Wenn keine Fremdschlüsseleinschränkungen und ähnliche Probleme in Triggern zu befürchten sind, können Sie die DBs einfach miteinander verknüpfen und durch die Liste der Tabellen navigieren (sie aus sys.objects auswählen) und ausführen
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (oder INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tabledie Instanzen auf diese Weise verknüpft haben )
    für jeden Tisch. Wenn Sie Einschränkungen und Trigger haben, die die Konsistenz zwischen Tabellen erzwingen, müssen Sie die Reihenfolge dieser Operationen natürlich etwas genauer festlegen, insbesondere wenn Sie zyklische Einschränkungen haben, wie z. B. eine Tabelle mit einer auf sich selbst basierenden Einschränkung (eine Holding-Hierarchie) Daten, als mögliches Beispiel).

Es ist möglicherweise effizienter, nach Schritt 3 nur die Daten zu kopieren und alle anderen Strukturen (Indizes, Procs, Trigger usw.) hinzuzufügen. Auf diese Weise werden Probleme beim Einfügen von Zeilen vermieden, die durch Einschränkungen und Trigger verursacht werden, und die Indizes werden am erstellt end sollte theoretisch schneller sein, als sie zu erstellen, da alle Daten hinzugefügt werden. Wenn Sie jedoch Clustered-Indizes für Ihre Tabellen haben, erstellen Sie diese vor dem Hinzufügen der Daten, da sie nachträglich nicht schneller zu erstellen wären.

Dies alles setzt natürlich voraus, dass keines Ihrer Objekte SQL 2008-spezifische Features verwendet. Wenn dies der Fall ist, werden Sie hoffentlich solche Fehler beim erneuten Erstellen des Schemas herausfinden und beheben. Wenn sich einer Ihrer Codes auf offiziell undefiniertes Verhalten stützt, das sich zwischen den SQL Server-Versionen geändert hat, kann es sein, dass Sie subtilere und schwer fassbare Fehler finden und später ausbügeln müssen.

David Spillett
quelle
1
-1, weil dies im Vergleich zu BCPs ineffizient ist (wählen Sie * in aus).
Jcolebrand
@jcolebrand fair genug für die Effizienz. Obwohl die Technik eine ist, die ich gearbeitet habe.
David Spillett
Es ist ein faires System, ich dachte nur, ich würde das wegen zukünftiger Leser hier aufnehmen. Sie haben derzeit die Stimmen dafür, dass es kein Problem ist. ;)
jcolebrand
1

Sie müssen zuerst ein Skript für die Datenbank erstellen und sicherstellen, dass Sie für die Version den Typ angeben, auf den Sie eine Herabstufung durchführen möchten. Und um die Daten von der höheren Version in die niedrigere Version zu kopieren, erledigen Sie mit SQL Data compare den Trick für Sie.

Viel Glück!

Mbongeni
quelle