Existe uma maneira de determinar a versão do SQL Server que foi usada para criar um arquivo MDF ou BAK?

19

Eu tenho uma cópia local de um banco de dados do SQL Server armazenada como um arquivo MDF. Existe uma maneira de saber qual versão do SQL Server foi usada para criar esse arquivo?

Ben McCormack
fonte

Respostas:

8

Você pode determinar a versão do arquivo MDF primário de um banco de dados observando os dois bytes no deslocamento 0x12064. Consulte Como determinar a versão do banco de dados de um arquivo MDF .

Nos .bakarquivos, o byte mais baixo é 0xEAC e o mais alto é 0xEAD.

Você pode encontrar a maioria dos números de versão de banco de dados internos para MS SQL aqui .

Remus Rusanu
fonte
1
Nota! Isso parece ser diferente nas edições x64 do MS SQL. Em todos os casos, existem 4 blocos - SFMB, SSET, VOLB, MSCI. A versão está no bloco MSCI. O problema é que o tamanho do bloco não é constante. Felizmente, parece que o tamanho do bloco pode ser dividido por 512 (0x200). Então, basta procurar a cada 512 bytes e procurar "MSCI". Em seguida, salte 172 bytes (0xAC) para o byte inferior e o próximo byte para o byte superior.
Nux
22

Use RESTORE HEADERONLY, por exemplo

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

Você terá muitas colunas, mas as de interesse são SoftwareVersionMajor, SoftwareVersionMinor e SoftwareVersionBuild, que devem fornecer o número da versão do SQL Server. No nosso sistema, por exemplo, são 10, 0 e 4000, o que significa 10.0.4000 (2008 SP2).

Entretanto, não se sabe o que acontece se você tentar fazer isso com um backup muito antigo para ser restaurado na versão em que o servidor está executando - você pode receber apenas um erro e nenhuma informação (embora isso por si só forneça pelo menos algumas dicas sobre a versão é de).

db2
fonte
1
Eu estava indo para tentar isso, mas não tenho nenhum dispositivo de backup configurado :-(. Obrigado pela sugestão, no entanto!
Ben McCormack
1
Observe que você não obterá resultados utilizáveis ​​dessa consulta ao testar, por exemplo, o backup do SQL 2012 no SQL 2008.
Nux
6

Para arquivos MDF, tente este comando:

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

Será saída 3 propriedades, com valores: Database name, Database versione Collation.

A sintaxe está a seguir (o comando não está documentado, portanto, mais informações aqui ):

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

FileName nada mais é do que o caminho real do arquivo .mdf do arquivo de dados primário do banco de dados do SQL Server.

Opt = 0 - verifica se o arquivo é um arquivo de Dados Principais do Banco de Dados do SQL Server (.mdf).

Opt = 1 - Retorna o nome, tamanho, tamanho máximo, crescimento, status e caminho do banco de dados de todos os arquivos associados ao banco de dados.

Opt = 2 - Retorna informações sobre o nome do banco de dados, versão e agrupamento.

Opt = 3 - Retorna o nome, status e caminho de todos os arquivos associados ao banco de dados.

Kanji Patel
fonte
1
convém adicionar uma explicação à sua resposta para que faça mais sentido.
Desenhou Khoury
0

Boa pergunta! Acredito que não, além do processo de tentativa e erro de, digamos, tentar restaurar um arquivo de backup do SQL Server 2008 R2 no SQL Server 2005. Obviamente, isso não funcionará. Não me lembro de imediato se usar o Management Studio - e clicar no botão de conteúdo para uma restauração - mostrará algo interessante.

Eu ainda não os experimentei, mas é possível que uma ferramenta de terceiros, como o Virtual Restore do Red Gate, lhe informe - ele permite que você olhe o banco de dados "dentro" do arquivo de backup. http://www.red-gate.com/products/dba/sql-virtual-restore/

Peter Schofield
fonte
0

A melhor maneira que eu já vi de fazer isso foi colhida nesta postagem nos fóruns do SQL Server MSDN.

Basicamente, envolve entrar no arquivo e examinar a página de inicialização do arquivo mdf.

squillman
fonte