it-swarm.com.de

Stellen Sie die Datenbank aus einer Sicherungsdatei einer anderen Version / Edition wieder her

Ich habe gelesen, dass es aus Gründen der Abwärtskompatibilität möglich ist, eine Datenbank in SQL Server wiederherzustellen, solange Sie von einer älteren Version auf eine neuere Version wiederherstellen.

Weiß jemand sofort, ob Sie eine Datenbank aus einer * .bak-Datei für verschiedene Editionen von SQL Server wiederherstellen können? Wir verschieben eine sehr große Datenbank über FTP, was einige Tage dauern wird. Deshalb möchten wir dies lieber nur einmal tun. Wenn bis zur Übertragung der Datenbank über FTP niemand antwortet, werden wir dies natürlich ausprobieren und prüfen, ob es durch Testen funktioniert, und unsere eigene Frage beantworten.

Unten finden Sie eine Abfrage, um Versionsdetails von SQL Server abzurufen. Das productversion hat das Format {major revision}.{minor revision}.{release revision}.{build number}. In meinem Fall ist das {release revision} hat den Wert 5500 für die Quelle und 5512 für das Ziel. Das sieht also okay aus. Das edition ist jedoch anders.

Abfrage :

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

Quellendatenbank :

10.0.5500.0
SP3
Developer Edition (64-bit)

Zieldatenbank :

10.0.5512.0
SP3
Enterprise Edition (64-bit)
11
MacGyver

Vom Entwickler zum Unternehmen ist alles in Ordnung. Stellen Sie nur sicher, dass Sie bei Verwendung der Prozessorlizenzierung Lizenzen auf dem Zielserver haben, um alle CPUs abzudecken. Und es reicht nicht aus, sie nur vor SQL zu verbergen. Wenn sie physisch mit dem Computer verbunden sind, sind Sie für sie verantwortlich.

Auch wenn Sie von einem niedrigeren Build zu einem höheren Build wechseln, erhöht sich Ihre Datenbankversion. Es gibt einige Szenarien, in denen dies problematisch sein kann - z. Wenn Sie 15.000 Partitionsunterstützung für einen bestimmten Build von 2008 verwenden, funktioniert dies nicht, wenn Sie auf einen bestimmten Build von 2008 R2 aktualisieren. Möglicherweise verlassen Sie sich auch auf Optimierungen (und haben Problemumgehungen), die tatsächlich Fehler in einem älteren Build sind, aber im neuen Build behoben werden. Dies kann zu einer schlechteren Leistung führen. Es ist auch wichtig, alle an der Quelle verwendeten Trace-Flags zu überprüfen und festzustellen, ob sie auch am Ziel aktiviert werden sollen. Egal, Jobs, Logins usw.

Natürlich kann man nicht rückwärts gehen. Ich habe noch nie ein kleines Downgrade wie 10.0.5512 -> 10.0.5500 versucht, aber es ist definitiv nicht möglich, im Service Pack oder in der Version herunterzufahren. Wenn Sie also eine 2012-Datenbank auf Ihrer Developer Edition-Instanz haben und diese in der Produktion auf Ihre 2008-Instanz setzen möchten, ist Ihre Arbeit für Sie ausgeschnitten (siehe hier und ) hier ) - besonders wenn Sie 2012 Funktionen verwendet haben.


Aber um andere Fälle abzudecken, die Menschen bei dieser Frage landen könnten (z. B. möchte jemand von Entwickler -> Standard oder Unternehmen -> Express oder was haben Sie) ...

Es gibt andere Edition -> Edition-Upgrades, die nicht so gut funktionieren, z. von Developer -> Express, wenn Sie Funktionen verwendet haben, die in Express nicht unterstützt werden (und dies gilt auch für andere Editionen als Enterprise). Einige Beispiele für Funktionen, die Sie für untergeordnete Editionen nicht verwenden können (in diesem Fall wird die Wiederherstellung an dem Punkt beendet, an dem versucht wird, die Datenbank online zu schalten):

  • Partitionierung
  • Datenerfassung ändern
  • Datenkompression
  • Transparente Datenverschlüsselung

Ich weiß nicht, ob es eine Möglichkeit gibt, dies direkt aus der .BAK-Datei zu erkennen (ich bin sicher, dass irgendwo Magie aus Seitenkopfzeilen extrahiert werden kann oder ob Sie ein Wochenende Zeit haben, um mit einem Hex-Editor zu brennen). Während die Datenbank auf der Quellinstanz noch intakt ist, können Sie jederzeit Folgendes tun, um festzustellen, ob Sie Funktionen verwenden, die aufgrund der SKU, in der Sie sich befinden, verfügbar sind:

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

Ich bin mir nicht sicher, ob SQL Server Audit auf dieser Liste stehen soll - die Edition-Exklusivität dieser Funktion hat sich geändert, daher hängt es wahrscheinlich davon ab, was Sie damit machen. Es gibt andere Dinge, die Sie möglicherweise verwenden, die jedoch nicht in der DMV angezeigt werden (einige, weil sie in Ihrem Code enthalten sind, den die DMV nicht analysiert, und andere, weil Ihre Datenbank auf externen Dingen wie dem SQL Server-Agenten basiert , Service Broker usw.):

  • spiegeln
  • bestimmte Formen der Replikation
  • protokollversand
  • datenbank-Snapshots
  • online-Indizierung
  • aktualisierbare verteilte partitionierte Ansichten
  • backup-Komprimierung
  • richtlinienbasiertes Management
  • planführer
  • datenbank-Mail
  • wartungspläne
  • volltextsuche

Es gibt auch Fälle, in denen Sie aufgrund von Einschränkungen der Dateigröße nicht von Developer zu Express wechseln können (Express-Datenbanken haben eine Gesamtgröße von 10 GB).

Natürlich kann es andere Fallstricke geben, vor denen Sie nicht gewarnt werden - sie verhindern die Migration nicht, aber sie können zu einer sehr unterschiedlichen Leistung des Ziels führen. Beispiele:

  1. Unterschiedliche Speicher-/CPU-Einschränkungen für die Zielversion (oder sogar das zugrunde liegende Betriebssystem auf dem Ziel). Dies war eine Menge Leute, die von 2008 R2 Enterprise zu 2012 Enterprise (CAL) gewechselt sind, wo der Service künstlich auf die ersten 20 Kerne beschränkt ist. Dies kann zu einfachen Leistungsunterschieden führen (z. B. nicht genügend Speicher, um beispielsweise eine Abfrage zu erfüllen, oder zu einer viel langsameren Leistung paralleler Abfragen). Zu den subtileren gehören Planentscheidungen, die aufgrund der unterschiedlichen zugrunde liegenden Hardware getroffen werden.
  2. Das Vertrauen in Funktionen wie die Übereinstimmung der indizierten Ansicht mit der Quelle wird auf dem Ziel nicht automatisch berücksichtigt, ohne dass der Quellcode geändert wird, um NOEXPAND zu verwenden. Und Sie sind sich vielleicht gar nicht bewusst, dass diese Funktion dazu führt, dass Ihre Abfragen plötzlich langsamer werden.
  3. Gleiches gilt für parallele Indexoperationen und wahrscheinlich eine Reihe anderer Optimierungen, die mir derzeit nicht in den Sinn kommen (zum Glück arbeite ich fast ausschließlich im Enterprise-Bereich, sodass ich mich in den meisten Fällen nicht um die Einschränkungen niedrigerer Editionen kümmern muss ).

[~ # ~] Update [~ # ~] basierend auf dieses Duplikat :

Es kann Fälle geben, in denen Sie versuchen, eine Datenbank von einer bestimmten Edition auf eine niedrigere Edition (auch in derselben Version) wiederherzustellen, und Sie erhalten Fehler, die weniger hilfreich sind :

RESTORE für Server 'Server\Instanz' fehlgeschlagen.
RESTORE konnte die Datenbank 'Datenbankname' nicht starten.

Das ist nicht sehr intuitiv. Wenn Sie sich jedoch die Ereignisprotokolle von SQL Server genauer ansehen, werden weitere nützliche Fehler angezeigt (nur ein Beispiel):

Die Datenbank 'Datenbankname' kann nicht gestartet werden, da einige der Datenbankfunktionen in der aktuellen Edition von SQL Server nicht verfügbar sind.
Die Datenbank 'Datenbankname' kann in dieser Edition von SQL Server nicht gestartet werden, da sie eine Partitionsfunktion '_dta_pf__9987' enthält. Nur die Enterprise Edition von SQL Server unterstützt Partitionsfunktionen.

Das stimmt nicht ganz - Sie können auch die Evaluation Edition oder Developer Edition wiederherstellen, aber das ist nebensächlich. Um diese Datenbank wiederherzustellen, haben Sie grundsätzlich zwei Möglichkeiten:

  1. Stellen Sie eine geeignete Version von SQL Server wieder her. Dies bedeutet, dass Sie eine neue Instanz suchen oder installieren.
  2. Stellen Sie die Sicherung auf dem Quellserver als neue Datenbank mit einem anderen Namen wieder her, entfernen Sie alle Enterprise-Funktionen, sichern Sie die Datenbank erneut und stellen Sie sie auf der kleineren Edition wieder her. (In diesem speziellen Fall habe ich den Namen der Partitionsfunktion in der Fehlermeldung belassen, da dies ohnehin verworfen zu sein scheint. Sie wurde vom Database Engine Tuning Advisor erstellt und möglicherweise von jemandem erstellt, der dies nicht ganz getan hat wissen, was sie taten. Dies ist nicht immer der Fall.)

Eine Variation von (2) wäre, einfach die Partitionierung und andere Funktionen in der Quellendatenbank zu entfernen und eine weitere Sicherung durchzuführen. Aber wenn es nicht kaputt ist ...

15
Aaron Bertrand

Entwickler und Unternehmen sind dieselbe Software, nur mit unterschiedlichen Lizenzvereinbarungen.

Sie sollten diese Datenbank an Ihrem Zielort problemlos wiederherstellen können.

3
Mark Henderson