Czy istnieje sposób ustalenia wersji programu SQL Server, która została użyta do utworzenia pliku MDF lub BAK?

19

Mam lokalną kopię bazy danych SQL Server przechowywaną jako plik MDF. Czy istnieje sposób na określenie, której wersji programu SQL Server użyto do utworzenia tego pliku?

Ben McCormack
źródło

Odpowiedzi:

8

Możesz określić wersję podstawowego pliku MDF bazy danych, patrząc na dwa bajty z przesunięciem 0x12064. Zobacz Jak ustalić wersję bazy danych pliku MDF .

W .bakplikach niższy bajt to 0xEAC, a wyższy to 0xEAD.

Większość numerów wewnętrznych wersji bazy danych dla MS SQL można znaleźć tutaj .

Remus Rusanu
źródło
1
Uwaga! Wydaje się, że jest inaczej w wersjach MS SQL x64. We wszystkich przypadkach są 4 bloki - SFMB, SSET, VOLB, MSCI. Wersja jest w bloku MSCI. Problem polega na tym, że rozmiar bloku nie jest stały. Na szczęście wydaje się, że rozmiar bloku można podzielić przez 512 (0x200). Więc poszukaj co 512 bajtów i poszukaj „MSCI”. Następnie przeskocz 172 bajty (0xAC) dla niższego bajtu i następny bajt dla wyższego bajtu.
Nux
22

Użyj PRZYWRACANIA SŁUCHAWKOWEGO, np

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

Otrzymasz wiele kolumn, ale interesujące są SoftwareVersionMajor, SoftwareVersionMinor i SoftwareVersionBuild, które powinny dać ci numer wersji SQL Server. Na przykład w naszym systemie są to 10, 0 i 4000, co oznacza 10.0.4000 (2008 SP2).

Nie jestem pewien, co się stanie, jeśli spróbujesz to zrobić z kopią zapasową, która jest zbyt stara, aby można ją było przywrócić w wersji, na której działa serwer - może jednak pojawić się błąd i brak informacji (chociaż samo w sobie dostarczyłoby to pewnych wskazówek na temat wersja, z której pochodzi).

db2
źródło
1
Chciałem to wypróbować, ale nie mam skonfigurowanych żadnych urządzeń do tworzenia kopii zapasowych :-(. Dziękuję za sugestię!
Ben McCormack
1
Pamiętaj, że nie uzyskasz żadnych użytecznych wyników z tego zapytania podczas testowania np. Kopii zapasowej SQL 2012 na SQL 2008.
Nux
6

W przypadku plików MDF wypróbuj to polecenie:

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

Będzie wyjście 3 nieruchomości o wartości: Database name, Database versioni Collation.

Składnia jest następująca (polecenie jest nieudokumentowane, dlatego więcej informacji tutaj ):

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

FileName to nic innego jak rzeczywista ścieżka do pliku .mdf podstawowego pliku danych bazy danych SQL Server.

Opt = 0 - sprawdza, czy plik jest plikiem danych podstawowych bazy danych SQL Server (.mdf).

Opt = 1 - Zwraca nazwę bazy danych, rozmiar, maksymalny rozmiar, wzrost, status i ścieżkę wszystkich plików powiązanych z bazą danych.

Opt = 2 - Zwraca informacje o nazwie, wersji i sortowaniu bazy danych.

Opt = 3 - Zwraca nazwę, status i ścieżkę wszystkich plików powiązanych z bazą danych.

Kanji Patel
źródło
1
możesz dodać wyjaśnienie do swojej odpowiedzi, aby miało to większy sens.
Drew Khoury,
0

Dobre pytanie! Nie sądzę, poza procesem prób i błędów - powiedzmy - próby przywrócenia pliku kopii zapasowej SQL Server 2008 R2 do SQL Server 2005. Oczywiście to nie zadziała. Nie pamiętam, czy użycie Management Studio - i kliknięcie przycisku zawartości w celu przywrócenia - pokaże ci coś interesującego.

Nie próbowałem ich, ale możliwe jest, że powie ci to narzędzie innej firmy, takie jak Virtual Gate Red Gate - pozwala spojrzeć na bazę danych „wewnątrz” pliku kopii zapasowej. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
źródło
0

Najlepszy sposób, jaki kiedykolwiek widziałem, aby to zrobić, zebrano z tego postu na forach MSDN programu SQL Server.

Zasadniczo polega na wejściu do pliku i sprawdzeniu strony rozruchowej pliku mdf.

squillman
źródło