Existe-t-il un moyen de déterminer la version de SQL Server qui a été utilisée pour créer un fichier MDF ou BAK?

19

J'ai une copie locale d'une base de données SQL Server stockée sous forme de fichier MDF. Existe-t-il un moyen de savoir quelle version de SQL Server a été utilisée pour créer ce fichier?

Ben McCormack
la source

Réponses:

8

Vous pouvez déterminer la version du fichier MDF principal d'une base de données en examinant les deux octets à l'offset 0x12064. Voir Comment déterminer la version de base de données d'un fichier MDF .

Dans les .bakfichiers, l'octet inférieur est 0xEAC et supérieur est 0xEAD.

Vous pouvez trouver la plupart des numéros de version de base de données internes pour MS SQL ici .

Remus Rusanu
la source
1
Remarque! Cela semble différent sur les éditions x64 de MS SQL. Dans tous les cas, il y a 4 blocs - SFMB, SSET, VOLB, MSCI. La version est dans le bloc MSCI. Le problème est que la taille des blocs n'est pas constante. Heureusement, il semble que la taille des blocs puisse être divisée par 512 (0x200). Il suffit donc de rechercher tous les 512 octets et de rechercher "MSCI". Sautez ensuite 172 octets (0xAC) pour l'octet inférieur et l'octet suivant pour l'octet supérieur.
Nux
22

Utilisez RESTORE HEADERONLY, par exemple

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

Vous obtiendrez beaucoup de colonnes, mais celles qui vous intéressent sont SoftwareVersionMajor, SoftwareVersionMinor et SoftwareVersionBuild, qui devraient vous donner le numéro de version de SQL Server. Sur notre système, par exemple, ce sont 10, 0 et 4000, ce qui signifie 10.0.4000 (2008 SP2).

Je ne sais pas ce qui se passe si vous essayez de le faire avec une sauvegarde trop ancienne pour être restaurée sur la version que le serveur exécute, cependant - vous pourriez simplement obtenir une erreur et aucune information (bien que cela en soi fournisse au moins quelques indices sur la version d'origine).

db2
la source
1
J'allais essayer cela, mais je n'ai aucun périphérique de sauvegarde configuré :-(. Merci pour la suggestion, cependant!
Ben McCormack
1
Notez que vous n'obtiendrez aucun résultat utilisable de cette requête lorsque vous testez, par exemple, la sauvegarde SQL 2012 sur SQL 2008.
Nux
6

Pour les fichiers MDF, essayez cette commande:

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

Il affichera 3 propriétés avec des valeurs: Database name, Database versionet Collation.

La syntaxe est la suivante (la commande n'est pas documentée, donc plus d'informations ici ):

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

FileName n'est rien d'autre que le chemin réel du fichier .mdf du fichier de données primaires de la base de données SQL Server.

Opt = 0 - Vérifie si le fichier est un fichier de données primaires de base de données SQL Server (.mdf).

Opt = 1 - Renvoie le nom, la taille, la taille maximale, la croissance, l'état et le chemin de la base de données de tous les fichiers associés à la base de données.

Opt = 2 - Renvoie les informations sur le nom, la version et le classement de la base de données.

Opt = 3 - Renvoie le nom, l'état et le chemin de tous les fichiers associés à la base de données.

Kanji Patel
la source
1
vous voudrez peut-être ajouter une explication à votre réponse afin qu'elle soit plus logique.
Drew Khoury
0

Bonne question! Je ne le crois pas, à part le processus d'essai et d'erreur de - disons - essayer de restaurer un fichier de sauvegarde SQL Server 2008 R2 sur SQL Server 2005. Évidemment, cela ne fonctionnera pas. Je ne me souviens pas si l'utilisation de Management Studio - et en cliquant sur le bouton de contenu pour une restauration - vous montrera quelque chose d'intéressant.

Je ne les ai pas essayés, mais il est possible qu'un outil tiers tel que la restauration virtuelle de Red Gate vous le dise - il vous permet de regarder la base de données "à l'intérieur" du fichier de sauvegarde. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
la source
0

La meilleure façon que j'ai jamais vue de le faire a été glanée dans ce post sur les forums MSDN de SQL Server.

Fondamentalement, cela implique d'accéder au fichier et d'examiner la page de démarrage du fichier mdf.

squillman
la source