C'è un modo per determinare la versione di SQL Server utilizzata per creare un file MDF o BAK?


19

Ho una copia locale di un DB di SQL Server memorizzato come file MDF. C'è un modo per dire quale versione di SQL Server è stata utilizzata per creare quel file?

Risposte:


8

È possibile determinare la versione del file MDF primario di un database osservando i due byte con offset 0x12064. Vedere Come determinare la versione del database di un file MDF .

Nei .bakfile il byte inferiore è 0xEAC e il valore superiore è 0xEAD.

Puoi trovare la maggior parte dei numeri di versione del database interno per MS SQL qui .


1
Nota! Questo sembra essere diverso nelle edizioni x64 di MS SQL. In tutti i casi ci sono 4 blocchi: SFMB, SSET, VOLB, MSCI. La versione è in blocco MSCI. Il problema è che la dimensione del blocco non è costante. Fortunatamente sembra che la dimensione del blocco possa essere divisa per 512 (0x200). Quindi cerca ogni 512 byte e cerca "MSCI". Quindi saltare 172 byte (0xAC) per byte inferiore e byte successivo per byte superiore.
Nux,

22

Utilizzare RESTORE HEADERONLY, ad es

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

Otterrai molte colonne, ma quelle di interesse sono SoftwareVersionMajor, SoftwareVersionMinor e SoftwareVersionBuild, che dovrebbero fornire il numero di versione di SQL Server. Sul nostro sistema, ad esempio, sono 10, 0 e 4000, ovvero 10.0.4000 (2008 SP2).

Non sei sicuro di cosa succede se provi a farlo con un backup troppo vecchio per essere ripristinato sulla versione in esecuzione sul server, tuttavia, potresti semplicemente ricevere un errore e nessuna informazione (anche se in sé fornirebbe almeno alcuni indizi su la versione è di).


1
Stavo per provare questo, ma non ho alcun dispositivo di backup impostato :-(. Grazie per il suggerimento, però!
Ben McCormack

1
Si noti che non si otterranno risultati utilizzabili da questa query quando si verifica ad esempio il backup di SQL 2012 su SQL 2008.
Nux,

6

Per i file MDF provare questo comando:

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

Il risultato sarà 3 proprietà con valori: Database name, Database versione Collation.

La sintassi è la seguente (il comando non è documentato, quindi maggiori informazioni qui ):

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

FileName non è altro che il percorso effettivo del file .mdf del file di dati primari del database di SQL Server.

Opt = 0: verifica se il file è un file di dati primari del database di SQL Server (.mdf).

Opt = 1 - Restituisce il nome del database, dimensione, dimensione massima, crescita, stato e percorso di tutti i file associati al database.

Opt = 2 - Restituisce informazioni su nome database, versione e regole di confronto.

Opt = 3: restituisce nome, stato e percorso di tutti i file associati al database.


1
potresti voler aggiungere una spiegazione alla tua risposta in modo che abbia più senso.
Ha disegnato Khoury il

0

Buona domanda! Non credo, a parte il processo di prova ed errore di - diciamo - provare a ripristinare un file di backup di SQL Server 2008 R2 su SQL Server 2005. Ovviamente, ciò non funzionerà. Non riesco a ricordare a mani aperte se l'uso di Management Studio - e facendo clic sul pulsante dei contenuti per un ripristino - mostrerà qualcosa di interessante.

Non li ho provati, ma è possibile che uno strumento di terze parti come il ripristino virtuale di Red Gate te lo dirà: ti permette di guardare il database "dentro" il file di backup. http://www.red-gate.com/products/dba/sql-virtual-restore/



0

Il modo migliore che io abbia mai visto fare questo è stato raccolto da questo post nei forum MSDN di SQL Server.

Fondamentalmente implica entrare nel file ed esaminare la pagina di avvio del file mdf.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.