¿Hay alguna manera de determinar la versión de SQL Server que se utilizó para crear un archivo MDF o BAK?

19

Tengo una copia local de una base de datos de SQL Server almacenada como un archivo MDF. ¿Hay alguna manera de saber qué versión de SQL Server se usó para crear ese archivo?

Ben McCormack
fuente

Respuestas:

8

Puede determinar la versión del archivo MDF primario de una base de datos mirando los dos bytes en el desplazamiento 0x12064. Consulte Cómo determinar la versión de la base de datos de un archivo MDF .

En los .bakarchivos, el byte inferior es 0xEAC y el superior es 0xEAD.

Puede encontrar la mayoría de los números de versión de la base de datos interna para MS SQL aquí .

Remus Rusanu
fuente
1
¡Nota! Esto parece ser diferente en las ediciones x64 de MS SQL. En todos los casos hay 4 bloques: SFMB, SSET, VOLB, MSCI. La versión está en el bloque MSCI. El problema es que el tamaño del bloque no es constante. Afortunadamente, parece que el tamaño del bloque se puede dividir entre 512 (0x200). Tan solo busque cada 512 bytes y busque "MSCI". Luego salte 172 bytes (0xAC) para el byte inferior y el siguiente byte para el byte superior.
Nux
22

Utilice RESTORE HEADERONLY, p. Ej.

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

Obtendrá muchas columnas, pero las de interés son SoftwareVersionMajor, SoftwareVersionMinor y SoftwareVersionBuild, que deberían proporcionarle el número de versión de SQL Server. En nuestro sistema, por ejemplo, estos son 10, 0 y 4000, lo que significa 10.0.4000 (2008 SP2).

Sin embargo, no estoy seguro de lo que sucede si intenta hacer esto con una copia de seguridad que es demasiado antigua para ser restaurada en la versión que está ejecutando el servidor; es posible que obtenga un error y no haya información (aunque eso en sí mismo al menos proporcionaría algunas pistas sobre la versión es de).

db2
fuente
1
Iba a intentar esto, pero no tengo ningún dispositivo de respaldo configurado :-(. ¡Gracias por la sugerencia, sin embargo!
Ben McCormack
1
Tenga en cuenta que no obtendrá resultados utilizables de esta consulta cuando pruebe, por ejemplo, la copia de seguridad de SQL 2012 en SQL 2008.
Nux
6

Para archivos MDF intente este comando:

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

Se dará salida 3 propiedades con valores: Database name, Database versiony Collation.

La sintaxis es la siguiente (el comando no está documentado, por lo tanto, hay más información aquí ):

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

FileName no es más que la ruta real del archivo .mdf del archivo de datos primarios de la base de datos de SQL Server.

Opt = 0: verifica si el archivo es un archivo de datos primarios de la base de datos de SQL Server (.mdf).

Opt = 1: devuelve el nombre de la base de datos, el tamaño, el tamaño máximo, el crecimiento, el estado y la ruta de todos los archivos asociados a la base de datos.

Opt = 2: devuelve el nombre de la base de datos, la versión y la información de clasificación.

Opt = 3: devuelve el nombre, el estado y la ruta de todos los archivos asociados a la base de datos.

Kanji Patel
fuente
1
es posible que desee agregar una explicación a su respuesta para que tenga más sentido.
Drew Khoury
0

¡Buena pregunta! No lo creo, aparte del proceso de prueba y error de, por ejemplo, tratar de restaurar un archivo de copia de seguridad de SQL Server 2008 R2 en SQL Server 2005. Obviamente, eso no funcionará. No recuerdo de antemano si usar Management Studio, y hacer clic en el botón de contenido para una restauración, le mostrará algo interesante.

No los he probado, pero es posible que una herramienta de terceros como la Restauración virtual de Red Gate le diga: le permite mirar la base de datos "dentro" del archivo de copia de seguridad. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
fuente
0

La mejor forma en que he visto hacer esto se obtuvo de esta publicación en los foros de SQL Server MSDN.

Básicamente implica entrar en el archivo y examinar la página de inicio del archivo mdf.

squillman
fuente