SQL Server restaurar um backup resulta em erro

13

Eu tenho um banco de dados no 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. Faça login no dev e abra o SQL Server Management Studio
  2. Clique com o botão direito 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), faça login para prod, 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 - somente 6mb)

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

"The media family on device 'E:...bak' is incorrectly formed. SQL Server cannot process this media family. RESTORE DATABASE is terminating abnormally."

Este erro é imediato.

Eu tentei algumas variações diferentes disso - restaurando o db para a máquina dev com um nome de banco de dados diferente e nomes de arquivo de log (onde ele se originou), criando um banco de dados vazio com o mesmo caminho físico para arquivos antes e tentando restaurar para isso, fazer alguns arquivos .bak diferentes e verificar se eles foram verificados antes de enviá-los para prod. Eu sei de fato que o diretório dos 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 de opções, recebo o seguinte erro:

Error 3241: The media family on device 'E:...bak' is incorrectly formed. SQL Server cannot process this media family. RESTORE FILELIST is terminating abnormally.

Alguém tem alguma ideia brilhante?

    
por Mario 15.09.2008 / 18:27

8 respostas

7

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

    
por 15.09.2008 / 18:38
4

Como Mike Dimmick diz - 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 menor de denominador comum, como scripts SQL. Experimente o Assistente de 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.

    
por 16.09.2008 / 17:01
2

Você pode mover os backups para a frente na família do SQL Server, ou seja, 2000 a 2005 ou 2008, mas não para trás: você não pode restaurar um backup do SQL Server 2005 no SQL Server 2000.

    
por 16.09.2008 / 01:35
1

É possível que seja um problema de permissão para impedir que o arquivo seja criado quando você tentar restaurá-lo. Tente criar um novo banco de dados no destino com o mesmo nome que você deseja e, em seguida, restaure 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 para o computador local antes de tentar a restauração.

    
por 15.09.2008 / 18:30
1

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

    
por 07.01.2010 / 10:15
1

(suspiro aliviado) Ahhhhh, isso é o problema.

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

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

E eu concordo completamente com o [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 dar 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 tão difícil colocar isso em uma mensagem de erro ............?

    
por 23.02.2011 / 11:30
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 log grande arquivos. Enquanto você não está 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 seu servidor Dev (como um nome diferente do banco de dados, para arquivos diferentes)? Isso comprovaria se o arquivo em si é bom no que diz respeito ao SQL 2005.

  • Você é capaz de restaurar qualquer outro banco de dados desse servidor Dev para Prod?

por 15.09.2008 / 18:42
0

Olá a todos, como o Mike sugere, eu recomendaria o Database Publishing Wizard, ele faz um belo trabalho.

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


1) Crie o db no prod, crie um usuário do db com os devidos direitos, abra a porta no seu firewall que permite acesso remoto
2) A partir do dev no SQL Server Management Studio, clique com o botão direito do mouse no db - > tarefas - > exportar dados. Ao selecionar o destino, certifique-se de especificar 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: Isto não copia sobre identidades para colunas int

UPDATE: parece que você não pode ir de 2005 a 2000. Encontrei o seguinte post link text - parece que você pode usar meus métodos acima, mas também quer rotear todos os objetos e executá-los em 2000.

    
por 15.09.2008 / 19:15