O SQL Server restaurar um backup resulta em um erro

15

Eu tenho um banco de dados em dev (SQL Server 2005 no Windows Server 2008) que preciso mover para prod (SQL Server 2000 no Windows Server 2003). Meu processo é o seguinte:

  1. Entre no dev, abra o SQL Server Management Studio
  2. Clique com o botão direito do mouse no banco de dados | Tarefas | Cópia de segurança. Mantenha todas as opções padrão (backup completo, etc.)
  3. Mova o arquivo .bak localmente para prod (sem unidade de rede), efetue login no prod e abra o SQL Server Enterprise Manager.
  4. Clique com o botão direito do mouse no nó Bancos de Dados | Todas as tarefas | Restaurar banco de dados.
  5. Altere Restaurar como banco de dados para refletir o mesmo nome de banco de dados.
  6. Clique no botão de opção "Do dispositivo". Clique em "Selecionar dispositivos"
  7. Clique em Restaurar de: Adicionar ..., navegue até o arquivo .bak (pequeno - apenas 6 MB)

Agora estou pronto para restaurar o banco de dados, clique em OK e recebo o seguinte erro:

"A família de mídia no dispositivo 'E: ... bak' está formada incorretamente. O SQL Server não pode processar esta família de mídia. RESTORE DATABASE está sendo finalizado de forma anormal."

Este erro é imediato.

Eu tentei algumas variações diferentes disso - restaurando o db para a máquina dev com um nome diferente do db e nomes de arquivos de log (onde ele se originou), criando um banco de dados vazio com o mesmo caminho físico para os arquivos anteriores e tentando restaurá-los, criando alguns arquivos .bak diferentes e certificando-se de que sejam verificados antes de enviá-los para o prod. Sei de fato que o diretório para os arquivos .mdf e .ldf existe no prod, embora os arquivos em si não existam. Se, antes de clicar em OK para restaurar, vá para a guia Opções, em seguida, recebo o seguinte erro:

Erro 3241: A família de mídia no dispositivo 'E: ... bak' está formada incorretamente. O SQL Server não pode processar esta família de mídia. RESTORE FILELIST está sendo finalizado de forma anormal.

Alguém tem alguma idéia brilhante?

Mario
fonte
Concordo, passei um dia nisso e perdi meu tempo, parece um problema de compatibilidade com versões anteriores, 2k8 R2 a 2k5 no meu caso.

Respostas:

7

Os cabeçalhos de backup no MSSQL2008 são diferentes dos do MSSQL2005, que provavelmente é a fonte do seu problema. Tente exportar o banco de dados em vez do paradigma de backup-restauração ou configure o MSSQL2008 no servidor DEV.

Thunder3
fonte
4

Como diz Mike Dimmick - o SQL 2000 não reconhecerá os backups do SQL 2005 (como o Word 2000 não reconhecerá os arquivos DOCX de 2007). Portanto, você terá que migrar seus dados em um formato de denominador comum mais baixo, como scripts SQL. Experimente o Assistente para publicação de banco de dados, que faz parte do SQL Server Hosting Toolkit, que gera um único arquivo SQL para o esquema e os dados.

Duncan Smart
fonte
1
É importante verificar se você possui o SqlExpress instalado (você pode instalá-lo sem perceber). É muito fácil fazer logon no SqlExpress por engano e entrar em pânico, pois não permitirá que você restaure um banco de dados de 2008. Este é provavelmente um motivo muito comum para obter esse erro.
Simon
2

Você pode avançar os backups na família SQL Server, ou seja, 2000 para 2005 ou 2008, mas não para trás: não é possível restaurar um backup do SQL Server 2005 no SQL Server 2000.

Mike Dimmick
fonte
1

É possível que seja um problema de permissão que impede a criação do arquivo quando você tenta restaurar. Tente criar um novo banco de dados no destino com o mesmo nome que você deseja e, em seguida, restaurar por cima dele.

Além disso, se você estiver tentando restaurar o backup de um disco rígido externo ou de um compartilhamento de rede, tente copiar o arquivo de backup na máquina local antes de tentar a restauração.


fonte
1

Por padrão, existem dois exploradores de objetos do SQL Server 2005. Acho que você está experimentando o objeto server / sqlexpress. Tente restaurar para outro.


fonte
1

(Suspiro aliviado.) Ahhhhh, esse é o problema.

Eu tenho o SQL Server 2008 SP1 em execução em um PC remoto. Fiz backup do banco de dados, mas não consegui restaurar minha cópia local do SQL Server 2008 a partir do arquivo .bak.

Como [Yini] diz, isso se resumia à minha cópia do SQL Server 2008, abrindo minha instância do SQL Server 2005 no meu PC local, em vez da minha instância do SQL Server 2008. Gênio.

E eu concordo completamente com [Yini] - é justo, você não pode restaurar um backup do SQL Server 2008 em uma instância de 2005, mas a Microsoft poderia, pelo menos, nos enviar uma mensagem de erro decente.

"A família de mídia no dispositivo 'D: \ DatabaseBackup_21_02_2011.bak' está formada incorretamente. O SQL Server não pode processar esta família de mídia."

Meu backup não foi formado incorretamente. Ele simplesmente não pode ser restaurado em uma instância do SQL Server 2005 , mesmo quando estou executando o SQL Server 2008 SP1.

É realmente difícil colocar isso em uma mensagem de erro ............?

Mike Gledhill
fonte
0

Algumas reflexões:

  • Qual é o tamanho do banco de dados que você está restaurando?
    O único artigo de suporte sobre esse erro é para o SQL 2000 e fala sobre arquivos de log grandes. Enquanto você não estiver no SQL 2000, pode ajudar a tentar reduzir o tamanho dos logs primeiro, se eles forem particularmente grandes.

  • Você é capaz de restaurar o banco de dados no servidor Dev (como um nome de banco de dados diferente, para arquivos diferentes)? Isso provaria se o arquivo em si está bem no que diz respeito ao SQL 2005.

  • Você é capaz de restaurar outros bancos de dados desse servidor Dev para o Prod?

Rory
fonte
0

Olá pessoal, como Mike sugere que eu recomende o Assistente para publicação de banco de dados, ele faz um ótimo trabalho.

Aqui está uma solução alternativa que usei inicialmente que não sugeriria inteiramente - parece um pouco gueto .


1) Crie o db on prod, crie um usuário db com direitos apropriados, abra a porta do firewall que permita acesso remoto
2) No dev no SQL Server Management Studio, clique com o botão direito do mouse em db -> tasks -> export data. Ao selecionar o destino, especifique a porta xxx.xxx.xxx.xxx, 1764.
3) Selecione todas as tabelas para transferir, clique nas próximas 100 vezes e pronto.

AVISO: Isso não copia os procedimentos armazenados.
AVISO: Isso não copia Identidades para colunas int

ATUALIZAÇÃO: Parece que você não pode ir de 2005 a 2000. Encontrei o seguinte texto no link de publicação - parece que você pode usar meus métodos acima, mas também deseja criar scripts para todos os objetos e executá-los em 2000.

Mario
fonte