Есть ли способ определить версию SQL Server, которая использовалась для создания файла MDF или BAK?

19

У меня есть локальная копия базы данных SQL Server, хранящаяся в виде файла MDF. Есть ли способ сказать, какая версия SQL Server использовалась для создания этого файла?

Бен МакКормак
источник

Ответы:

8

Вы можете определить версию основного файла MDF базы данных, посмотрев на два байта со смещением 0x12064. См. Как определить версию базы данных файла MDF .

В .bakфайлах младший байт равен 0xEAC, а старший - 0xEAD.

Вы можете найти большинство внутренних номеров версий базы данных для MS SQL здесь .

Ремус Русану
источник
1
Заметка! Похоже, что это отличается в 64-разрядных выпусках MS SQL. Во всех случаях есть 4 блока - SFMB, SSET, VOLB, MSCI. Версия находится в блоке MSCI. Проблема в том, что размер блока не является постоянным. К счастью, кажется, что размер блока можно разделить на 512 (0x200). Так что просто ищите каждые 512 байт и ищите «MSCI». Затем прыгайте 172 байта (0xAC) для младшего байта и следующий байт для старшего байта.
Nux
22

Используйте RESTORE HEADERONLY, например

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

Вы получите много столбцов, но интерес представляют SoftwareVersionMajor, SoftwareVersionMinor и SoftwareVersionBuild, которые должны предоставить номер версии SQL Server. В нашей системе, например, это 10, 0 и 4000, что означает 10.0.4000 (2008 SP2).

Не уверен, что произойдет, если вы попытаетесь сделать это с резервной копией, которая слишком старая, чтобы быть восстановленной в той версии, на которой работает сервер, однако - вы можете просто получить сообщение об ошибке и никакой информации (хотя это само по себе, по крайней мере, даст некоторые подсказки для версия это от).

db2
источник
1
Я собирался попробовать это, но у меня не было настроено никаких устройств резервного копирования :-(. Спасибо за предложение, хотя!
Бен МакКормак
1
Обратите внимание, что вы не получите полезных результатов этого запроса при тестировании, например, резервного копирования SQL 2012 на SQL 2008.
Nux,
6

Для файлов MDF попробуйте эту команду:

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

Это будет выводить 3 свойства со значениями: Database name, Database versionи Collation.

Синтаксис следующий (команда недокументирована, поэтому больше информации здесь ):

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

FileName - это не что иное, как фактический путь к файлу .mdf первичного файла данных базы данных SQL Server.

Opt = 0 - проверяет, является ли файл файлом первичных данных базы данных SQL Server (.mdf).

Opt = 1 - возвращает имя базы данных, размер, максимальный размер, рост, состояние и путь всех файлов, связанных с базой данных.

Opt = 2 - возвращает имя базы данных, версию и параметры сортировки.

Opt = 3 - возвращает имя, статус и путь всех файлов, связанных с базой данных.

Кандзи патель
источник
1
Вы можете добавить объяснение к своему ответу, чтобы оно имело больше смысла.
Дрю Хури
0

Хороший вопрос! Я не верю в это, за исключением процесса проб и ошибок, скажем, попыток восстановления файла резервной копии SQL Server 2008 R2 на SQL Server 2005. Очевидно, что это не сработает. Я не могу вспомнить, показало ли использование Management Studio - и нажатие на кнопку содержимого для восстановления - что-нибудь интересное.

Я не пробовал их, но возможно, что сторонний инструмент, такой как Virtual Gate Restore, скажет вам - он позволяет вам просматривать базу данных «внутри» файла резервной копии. http://www.red-gate.com/products/dba/sql-virtual-restore/

Питер Шофилд
источник
0

Лучший способ, который я когда-либо видел, был найден в этом посте на форумах MSDN по SQL Server.

В основном это включает в себя вход в файл и изучение страницы загрузки файла mdf.

squillman
источник