21 de maio de 2009

Erro no backup do SQL Server

A maior parte dos Clientes da ABC71 usa o banco de dados MS SQL Server e, de vez em quando, algum deles precisa mandar a base para analisarmos.

Outro dia, recebi a base de um Cliente num pen-drive e tentei restaurá-la em nosso servidor de testes. A tentativa me rendeu uma mensagem escabrosa:
Msg 3241, level 16
The media family on Device ‘device-name’ is incorrectly formed. SQL Server cannot process this media family

Revirei a internet para tentar achar uma forma de contornar o problema mas simplesmente não foi possível; parece que o arquivo de backup se corrompeu em algum momento do processo e não poderia ser utilizado.

Procurei também pela causa provável deste problema e listo abaixo as que achei mas plausíveis:
1) Havia usuários conectados ao Banco de Dados - talvez até alguma transação em andamento - no instante em que o backup estava sendo feito. O resultado é um backup inconsistente ou incompleto.
2) O backup gerou um arquivo muito grande e a tentativa de copiá-lo ou compactá-lo resultou num arquivo corrompido. Isto é particularmente válido se há setores ruins no disco rígido ou se você instalou o SQL Server num Virtual PC - o Virtual PC tem problemas em lidar com arquivos grandes e transferí-los para a máquina real pode corrompê-los.

Para eliminar a primeira possibilidade, pedi ao Cliente que executasse o comando de restauração com a opção de apenas verificar a integridade do backup. A sintaxe é a seguinte:
RESTORE VERIFYONLY
FROM DISK = 'C:\TEMP\DB.bak'

No meu caso, o próprio Cliente não conseguia visualisar o conteúdo nem restaurar o backup - o SQL dele reportava a mesma mensagem de erro. Então, não havia muito o que fazer a não ser pedir que fizesse outro backup para enviar.

Este é o ponto aqui: geralmente, faz-se o backup na ilusão de que qualquer problema com a base é só restaurá-lo. No entanto, negligencia-se um aspecto básico, que é certificar que o próprio backup feito está íntegro e poderá ser restaurado sem problemas. Use o comando RESTORE VERIFYONLY para fazer tal checagem.

Se foi verificado pelo RESTORE VERIFYONLY na estação original que o backup está íntegro mas o erro na restauração persiste, então é certo que o arquivo foi corrompido no processo de transferência para a máquina onde se quer restaurá-lo.

Caso a cópia tenha sido feita através de um Shared Folder do Virtual PC, copie novamente o arquivo, usando desta vez a rede normal no Virtual PC.

Caso a cópia tenha sido feita num pen-drive ou gravada num DVD, certifique-se que a mídia não está corrompida ou que a gravação foi feita com sucesso. Considere ainda a possibilidade de seu disco rígido estar corrompido.

Um comentário :

Anônimo disse...

Pode ser também devido a versão diferente do SQL.

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.