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

11

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 zu dem Zeitpunkt, an dem wir die Datenbank über FTP übertragen, niemand antwortet, werden wir dies natürlich ausprobieren und durch Testen prüfen, ob es funktioniert, und unsere eigene Frage beantworten.

Unten finden Sie eine Abfrage, um Versionsdetails von SQL Server abzurufen. Das productversionist im Format {major revision}.{minor revision}.{release revision}.{build number}. In meinem Fall hat der {release revision}Wert 5500für die Quelle und 5512für das Ziel. Das sieht also okay aus. Das editionist 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)
MacGyver
quelle
Wie wäre es mit dem Wiederherstellen einer Sicherungsdatei von SQL Server 2012 Business Intelligence Edition auf einer Entwicklerinstanz?
SDG320

Antworten:

15

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. Wenn Sie beispielsweise 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, in Service Pack oder 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 ) - insbesondere, 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. B. von Developer -> Express, wenn Sie Funktionen verwendet haben, die in Express nicht unterstützt werden (und dasselbe gilt für jede andere Edition 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 sollte - die Edition-Exklusivität dieser Funktion hat sich geändert, daher hängt es wahrscheinlich davon ab, was Sie damit tun. 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 sind auf insgesamt 10 GB Datendateigröße begrenzt).

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 bei parallelen 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 zu verwendende Quellcode geändert wird NOEXPAND. Und Sie sind sich vielleicht gar nicht bewusst, dass Ihre Abfragen aufgrund dieser Funktion 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 diesem Duplikat :

Es kann Fälle geben, in denen Sie versuchen, eine Datenbank von einer bestimmten Edition auf eine niedrigere Edition (auch auf 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 ausgeführt, 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 ...

Aaron Bertrand
quelle
3

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

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

Mark Henderson
quelle