Exportar Banco de Dados (BAK ou MDF) do SQL Server 2008 para o 2005

A forma mais fácil de transferir um banco para outro é fazer um BAK dele e depois recuperar do outro lado. Do 2005 para o 2008 é possível realizar a recuperação, mas do 2008 para o 2005 não é possível realizar o downgrade. Qual a solução? Gerar o script geral do banco e executá-lo no banco de destino. Mas se meu banco é muito grande, como fazer? A dica está no final do post, mas façamos tudo desde o início.
Abra o SQL Server Management Studio (ou Express) e conecte-se ao Server. Clique com o botão direito sobre a base de dados e siga em Task (Tarefas) e escolha Generate Scritps (Gerar Scripts). Na tela de seleção de base, marque a opção Script all objects in the selected database (Scritp de todos os objetos da base selecionada) e avance. Nessa próxima tela procure os itens abaixo e atribua os seguintes valores:
  1. Script for Server Version (Versão de Script do Server): SQL Server 2005
  2. Script Data (Script de Dados): True
  3. Script USE DATABASE: False
Demais opções fica a seu critério optar... Agora avance e na próxima tela escolha salvar o arquivo em disco com as opções Simples (Single file) e Unicode text. Avance, revise o que foi selecionado e finalize. Aguarde até que o processo seja finalizado. Quando terminado seu script já estará pronto para ser executado no destino.
O próximo passo é executar o script gerado na base de destino. Crie a base de destino vazia e agora temos duas opções:
  • Se o script gerado for pequeno (ou seja base pequena) podemos simplesmente abrir pelo próprio SQL Server Management e executar como se fosse Querys consecutivas;
  • Se o script for grande vamos usar um artifícío para isso.
Como a primeira opção é a mais simples (e também porque gosto de aventurar-me) vamos optar pela segunda (e que também é nossa realidade). No meu exemplo, o script gerado ficou em torno de 1,5Gb. Se desejar reduzir o tamanho um pouco, às vezes, reduzir o log ajuda (saiba como reduzir aqui) antes de gerar o script.
Abra o Prompt de Comando (emulador do DOS no Windows) e digite o seguinte comando:


sqlcmd -U thiago -P blog -S THIAGOMARCAL\SQLEXPRESS -d BaseBlog -i C:\ScriptSQL.sql -o C:\LogExecucao.txt

Explicando os atributos:
  • U: informa o nome do usuário que está conectando (no caso, o usuário thiago);
  • P: informa a senha do usuário (a senha é blog);
  • S: nome do servidor (como está na minha máquina a instância é THIAGOMARCAL\SQLEXPRESS);
  • d: nome da base nova que receberá o resultado do script (BaseBlog é o nome da nova base criada);
  • i: local onde salvei o script de dados e que usarei como entrada;
  • o: arquivo de texto contendo o resultado da operações (log para análise - opcional).
Dê ENTER e aguarde toda a operação ser executada. Para quaisquer tamanho do arquivo ele será processado sem problemas. Se tentasse abrir pelo SQL Server um arquivo muito grande daria erro de alocação de memória, ou demoraria e nem conseguiria executar exibindo alguns dos seguintes erros:
  • Cannot Open Datafile
  • Insufficient memory
  • Out of Memory Exception
Dessa forma é mais tranquilo...

3 comentários:

Alan disse...

O comando não funcionou para mim, acho que por causa da autenticação para acessar a base no sql server, que para mim exige um usuário (sa) e senha...
Alguma dica para usar o comando para essa maneira?

Thiago Marçal disse...

Alan, no comando basta alterar assim:

sqlcmd -U sa -P senha -S SERVIDOR\INSTANCIA -d BancoDeDados -i C:\ScriptSQL.sql -o C:\LogExecucao.txt

Alan disse...

Thiago, muito obrigado!
Realmente funcionou certinho.
Recomendo a quem mais precisar do recurso.
Para mim foi 100% eficaz!

Postar um comentário