Apakah ada cara untuk menentukan versi SQL Server yang digunakan untuk membuat file MDF atau BAK?

19

Saya memiliki salinan lokal dari SQL Server DB yang disimpan sebagai file MDF. Apakah ada cara untuk mengetahui versi SQL Server apa yang digunakan untuk membuat file itu?

Ben McCormack
sumber

Jawaban:

8

Anda dapat menentukan versi file MDF utama dari suatu basis data dengan melihat dua byte pada offset 0x12064. Lihat Cara menentukan versi database file MDF .

Dalam .bakfile byte yang lebih rendah adalah 0xEAC dan lebih tinggi adalah 0xEAD.

Anda dapat menemukan sebagian besar nomor versi basis data internal untuk MS SQL di sini .

Remus Rusanu
sumber
1
Catatan! Ini tampaknya berbeda pada edisi x64 MS SQL. Dalam semua kasus ada 4 blok - SFMB, SSET, VOLB, MSCI. Versi ada dalam blok MSCI. Masalahnya adalah ukuran blok tidak konstan. Untungnya ukuran blok dapat dibagi dengan 512 (0x200). Jadi cari saja setiap 512 byte dan cari "MSCI". Kemudian lompat 172 byte (0xAC) untuk byte yang lebih rendah dan byte berikutnya untuk byte yang lebih tinggi.
Nux
22

Gunakan RESTORE HEADERONLY, mis

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

Anda akan mendapatkan banyak kolom, tetapi yang menarik adalah SoftwareVersionMajor, SoftwareVersionMinor, dan SoftwareVersionBuild, yang akan memberi Anda nomor versi SQL Server. Pada sistem kami, misalnya, ini adalah 10, 0, dan 4000, artinya 10.0.4000 (2008 SP2).

Tidak yakin apa yang terjadi jika Anda mencoba melakukan ini dengan cadangan yang terlalu lama untuk dipulihkan pada versi server yang sedang berjalan, namun - Anda mungkin hanya mendapatkan kesalahan dan tidak ada info (meskipun itu sendiri setidaknya akan memberikan beberapa petunjuk tentang versi dari).

db2
sumber
1
Saya akan mencoba ini, tetapi saya tidak memiliki perangkat cadangan yang disiapkan :-(. Terima kasih atas sarannya!
Ben McCormack
1
Perhatikan bahwa Anda tidak akan mendapatkan hasil yang dapat digunakan dari kueri ini saat Anda menguji mis. Pencadangan SQL 2012 pada SQL 2008.
Nux
6

Untuk file MDF, coba perintah ini:

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

Itu akan menampilkan 3 properti dengan nilai-nilai: Database name, Database versiondan Collation.

Sintaks mengikuti (perintah tidak berdokumen, oleh karena itu info lebih lanjut di sini ):

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

FileName hanyalah jalur sebenarnya dari File Data Primer Database SQL Server .mdf file.

Opt = 0 - Memverifikasi apakah file tersebut adalah file Data Dasar Database SQL Server (.mdf).

Opt = 1 - Mengembalikan Nama Basis Data, Ukuran, Ukuran Maks, Pertumbuhan, Status dan Jalur dari semua file yang terkait dengan basis data.

Memilih = 2 - Mengembalikan Nama Basis Data, Versi, dan informasi Collation.

Opt = 3 - Mengembalikan Nama, Status dan Jalur dari semua file yang terkait dengan database.

Kanji Patel
sumber
1
Anda mungkin ingin menambahkan penjelasan pada jawaban Anda sehingga lebih masuk akal.
Drew Khoury
0

Pertanyaan bagus! Saya tidak percaya begitu, terlepas dari proses coba-coba - katakan - mencoba mengembalikan file cadangan SQL Server 2008 R2 ke SQL Server 2005. Jelas, itu tidak akan berhasil. Saya tidak dapat mengingat apakah menggunakan Management Studio - dan mengklik tombol isi untuk pengembalian - akan menampilkan sesuatu yang menarik.

Saya belum mencobanya, tetapi mungkin alat pihak ketiga seperti Red Gate's Virtual Restore akan memberi tahu Anda - ini memungkinkan Anda untuk melihat database "di dalam" file cadangan. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
sumber
0

Cara terbaik yang pernah saya lihat untuk melakukan ini diperoleh dari posting ini di forum MSDN SQL Server.

Pada dasarnya ini melibatkan masuk ke file dan memeriksa halaman boot file mdf.

squillman
sumber