Frage Gibt es eine Möglichkeit, die Version von SQL Server zu ermitteln, die zum Erstellen einer MDF- oder BAK-Datei verwendet wurde?


Ich habe eine lokale Kopie einer SQL Server DB als MDF-Datei gespeichert. Gibt es eine Möglichkeit zu sagen, welche Version von SQL Server zum Erstellen dieser Datei verwendet wurde?


18
2018-04-04 18:59


Ursprung




Antworten:


Sie können die Version der primären MDF-Datei einer Datenbank ermitteln, indem Sie die zwei Bytes bei Offset 0x12064 betrachten. Sehen So ermitteln Sie die Datenbankversion einer MDF-Datei.

Im .bak Dateien niedrigeres Byte ist 0xEAC und höher ist 0xEAD.

Sie finden die meisten internen Datenbankversionsnummern für MS SQL Hier.


7
2018-04-04 19:44



Hinweis! Dies scheint bei x64-Editionen von MS SQL anders zu sein. In allen Fällen gibt es 4 Blöcke - SFMB, SSET, VOLB, MSCI. Version ist in MSCI-Block. Problem ist Blockgröße ist nicht konstant. Glücklicherweise scheint die Blockgröße durch 512 (0x200) geteilt zu sein. Also suche alle 512 Bytes und suche nach "MSCI". Dann springen 172 Bytes (0xAC) für das untere Byte und nächstes Byte für das höhere Byte. - Nux


Verwende RESTORE HEADERONLY, z.B.

RESTORE HEADERONLY FROM DISK = 'D:\whatever.bak'

Sie erhalten viele Spalten, aber diejenigen von Interesse sind SoftwareVersionMajor, SoftwareVersionMinor und SoftwareVersionBuild, die Ihnen die Versionsnummer von SQL Server geben sollten. Auf unserem System sind dies zum Beispiel 10, 0 und 4000, was 10.0.4000 (2008 SP2) bedeutet.

Nicht sicher, was passiert, wenn Sie versuchen, dies mit einem Backup zu tun, das zu alt für die Wiederherstellung auf der Version ist, die der Server gerade ausführt - Sie erhalten vielleicht nur einen Fehler und keine Information (obwohl das an sich zumindest einige Hinweise liefern würde) die Version, von der es kommt).


21
2018-04-04 19:40



Ich wollte das versuchen, aber ich habe keine Backup-Geräte eingerichtet :-(. Danke für den Vorschlag, obwohl! - Ben McCormack
Das hat für mich funktioniert. Vielen Dank! - Igor Jerosimić
Beachten Sie, dass Sie keine brauchbaren Ergebnisse von dieser Abfrage erhalten, wenn Sie z. SQL 2012-Sicherung auf SQL 2008. - Nux


Versuchen Sie für MDF-Dateien diesen Befehl:

dbcc checkprimaryfile ('c:\MyApp\AppData\foo.mdf', 2)

Es werden 3 Eigenschaften mit Werten ausgegeben: Database name, Database version und Collation.

Die Syntax folgt (der Befehl ist nicht dokumentiert, daher mehr Informationen) Hier):

DBCC CHECKPRIMARYFILE ({'Dateiname}} [, opt = {0 | 1 | 2 | 3}])

Dateiname ist nichts als der tatsächliche Pfad der SQL Server-Datenbank   Primäre Datendatei .mdf-Datei.

Opt = 0 - Überprüft, ob die Datei eine primäre SQL Server-Datenbank ist   Datendatei (.mdf).

Opt = 1 - Gibt Datenbankname, Größe, Max. Größe, Wachstum, Status und Pfad aller der Datenbank zugeordneten Dateien zurück.

Opt = 2 - Gibt Datenbankname, Version und Sortierinformation zurück.

Opt = 3 - Gibt Name, Status und Pfad aller Dateien zurück, die der Datenbank zugeordnet sind.


5
2017-09-19 08:57



Vielleicht möchten Sie Ihrer Antwort eine Erklärung hinzufügen, damit sie sinnvoller ist. - Drew Khoury


Gute Frage! Ich glaube nicht, abgesehen von dem Versuch-und-Fehler-Prozess von - sagen wir - versuchen, eine SQL Server 2008 R2-Sicherungsdatei auf SQL Server 2005 wiederherzustellen. Offensichtlich wird das nicht funktionieren. Ich kann mich nicht mehr daran erinnern, ob Management Studio - und das Klicken auf die Schaltfläche "Inhalt" für eine Wiederherstellung - etwas Interessantes zeigt.

Ich habe sie nicht ausprobiert, aber es ist möglich, dass ein Drittanbieter-Tool wie Red Gate Virtual Restore Ihnen sagen wird - es erlaubt Ihnen, die Datenbank "innerhalb" der Backup-Datei zu betrachten. http://www.red-gate.com/products/dba/sql-virtual-restore/


0
2018-04-04 19:26





Sie finden dies anhand der Informationen auf der Boot-Seite der Datenbank. Ich schrieb darüber an http://sankarreddy.com/2010/05/database-internal-version-create-version-and-current-version/


0
2018-04-04 20:06





Der beste Weg, den ich je gesehen habe, wurde daraus abgeleitet dieser Beitrag auf den SQL Server MSDN-Foren.

Grundsätzlich geht es darum, in die Datei zu gelangen und die Boot-Seite der MDF-Datei zu untersuchen.


0
2018-04-04 20:11