Gibt es eine Möglichkeit, die Version von SQL Server zu ermitteln, mit der eine MDF- oder BAK-Datei erstellt wurde?

19

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

Ben McCormack
quelle

Antworten:

8

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

In .bakDateien ist das niedrigere Byte 0xEAC und das höhere 0xEAD.

Die meisten internen Datenbankversionsnummern für MS SQL finden Sie hier .

Remus Rusanu
quelle
1
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. Die Version befindet sich im MSCI-Block. Das Problem ist, dass die Blockgröße nicht konstant ist. Glücklicherweise scheint es, dass die Blockgröße durch 512 (0x200) geteilt werden kann. Suchen Sie also alle 512 Bytes und suchen Sie nach "MSCI". Dann springen 172 Bytes (0xAC) für das niedrigere Byte und das nächste Byte für das höhere Byte.
Nux
22

Verwenden Sie RESTORE HEADERONLY, z

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

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

Sie sind sich nicht sicher, was passiert, wenn Sie versuchen, dies mit einer Sicherung zu tun, die zu alt ist, um in der auf dem Server ausgeführten Version wiederhergestellt zu werden. Möglicherweise erhalten Sie nur eine Fehlermeldung und keine Informationen (obwohl dies an sich zumindest einige Hinweise liefern würde) die version ist von).

db2
quelle
1
Ich wollte dies versuchen, aber ich habe keine Backup-Geräte eingerichtet :-(. Vielen Dank für den Vorschlag, aber!
Ben McCormack
1
Beachten Sie, dass Sie mit dieser Abfrage keine verwertbaren Ergebnisse erhalten, wenn Sie z. B. die SQL 2012-Sicherung unter SQL 2008 testen.
Nux
6

Versuchen Sie für MDF-Dateien diesen Befehl:

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

Es werden 3 Eigenschaften mit den Werten Database name, Database versionund ausgegeben Collation.

Die Syntax ist folgende (der Befehl nicht dokumentiert ist daher mehr Informationen hier ):

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

Dateiname ist nichts anderes als der tatsächliche Pfad der .mdf-Datei der SQL Server-Datenbankprimärdatendatei.

Opt = 0 - Überprüft, ob es sich bei der Datei um eine SQL Server-Datenbank-Primärdatendatei (.mdf) handelt.

Opt = 1 - Gibt den Datenbanknamen, die Größe, die maximale Größe, das Wachstum, den Status und den Pfad aller der Datenbank zugeordneten Dateien zurück.

Opt = 2 - Gibt den Datenbanknamen, die Version und die Sortierungsinformationen zurück.

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

Kanji Patel
quelle
1
Möglicherweise möchten Sie Ihrer Antwort eine Erklärung hinzufügen, damit sie sinnvoller ist.
Drew Khoury
0

Gute Frage! Abgesehen von dem Versuch, eine SQL Server 2008 R2-Sicherungsdatei auf SQL Server 2005 wiederherzustellen, glaube ich das nicht. Offensichtlich funktioniert das nicht. Ich kann mich nicht ohne weiteres erinnern, ob die Verwendung von Management Studio - und das Klicken auf die Inhaltsschaltfläche für eine Wiederherstellung - Ihnen etwas Interessantes anzeigt.

Ich habe sie noch nicht ausprobiert, aber es ist möglich, dass ein Drittanbieter-Tool wie Virtual Restore von Red Gate es Ihnen mitteilt - es ermöglicht Ihnen, die Datenbank "in" der Sicherungsdatei zu betrachten. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
quelle
0

Der beste Weg, den ich je gesehen habe, um dies zu tun, wurde aus diesem Beitrag in den SQL Server MSDN-Foren entnommen .

Im Grunde geht es darum, in die Datei zu gelangen und die Boot-Seite der MDF-Datei zu untersuchen.

Squillman
quelle