Чи є спосіб визначити версію SQL Server, яка використовувалася для створення файлу MDF або BAK?


19

У мене локальна копія БД SQL Server, що зберігається як файл MDF. Чи є спосіб сказати, яка версія SQL Server була використана для створення цього файлу?

Відповіді:


8

Ви можете визначити версію первинного файлу MDF бази даних, переглянувши два байти при зміщенні 0x12064. Див. Розділ Як визначити версію бази даних файлу MDF .

У .bakфайлах нижчий байт - 0xEAC, а вищий - 0xEAD.

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


1
Примітка! Це, мабуть, відрізняється від x64 видань 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).

Не впевнений, що трапиться, якщо ви спробуєте це зробити із резервною копією для відновлення версії, на якій працює сервер, але ви можете просто отримати помилку та відсутність інформації (хоча це само по собі могло б дати хоча б деякі підказки про версія від якої).


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 ({'Ім'я файлу'} [, 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 - і натискання на кнопку вмісту для відновлення - покаже вам щось цікаве.

Я не пробував їх, але можливо, що сторонній інструмент, такий як віртуальне відновлення Red Gate, скаже вам - він дозволяє переглянути базу даних "всередині" резервного файлу. http://www.red-gate.com/products/dba/sql-virtual-restore/



0

Найкращий спосіб, який я коли-небудь бачив для цього, був зібраний з цієї публікації на форумах MSDN на SQL Server.

В основному це включає потрапляння у файл та вивчення завантажувальної сторінки mdf-файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.