Preparem as anotações, porque com esse artigo escrito pelo #dataholic Lucas Porto, você vai aprender como importar dados do SQL Server 2019 para uma versão inferior.
Fala pessoal, gostaria de compartilhar uma dica rápida com vocês.
Essa vai para quem já se deparou com a situação de ter que realizar um restore em uma instância destino mais antiga que a de origem.
Como sabemos, o SQL não possui a funcionalidade de realizarmos a restauração de um arquivo de backup padrão do SQL (.bak) para um outro servidor com um SQL mais antigo.
Quando me deparei com essa situação, na qual foi solicitado uma restauração de um banco que estava em um SQL Server 2019 para um SQL Server 2008R2, não encontrei muitas soluções para isso.
Irei escrever uma série de artigos indicando as maneiras mais simples e eficaz de fazer isso.
Como primeiro caso, iremos utilizar o opção “Generate Scripts”, onde é possível transferirmos desde estruturas de tabelas até os próprios dados contidos nela. Esse método é indicado para banco de dados de poucos GBs, pois o tamanho do arquivo gerado pode inviabilizar a importação dele no banco de dados destino, devido ao longo tempo de execução.
Para o exemplo, iremos utilizar o banco AdventureWorks, disponível no link abaixo:
https://docs.microsoft.com/pt-br/sql/samples/adventureworks-install-configure?view=sql-server-2017
Primeiramente, devemos acessar a opção Generate Scripts, localizada na aba Tasks:
Ao clicar, será aberto a tela abaixo, onde podemos clicar em avançar.
Nesta etapa, podemos selecionar que objetos queremos importar como tabelas, views, procedures, entre outros:
Como no nosso caso, iremos restaurar um banco por inteiro, deixamos a primeira opção selecionada e podemos avançar.
Nessa próxima página, nos é mostrado diversas formas de salvarmos os scripts que serão gerados, porém, se salvarmos do modo que está, teremos apenas as estruturas das tabelas e objetos, onde os dados e outras configurações não existirão no conteúdo gerado.
Para ajustarmos isso, devemos clicar em Advanced:
Dentro dessa aba, podemos adicionar diversas opções em nosso script, onde definimos principalmente duas opções:
“Script for Server Version” – A versão do banco de dados destino;
“Types of data to script” – Onde escolhemos apenas os schemas, somente os dados ou ambos.
Conforme o exemplo citado, iremos utilizar como banco destino um SQL Server 2008R2, exportando tanto os dados quanto os schemas:
Após configurado, podemos dar um Ok e gerarmos o Script. No meu caso, irei importar para uma pasta existente em meu computador:
Com isso, podemos avançar e confirmar as opções selecionadas:
Após um tempo carregando, o script será gerado e estará disponível no caminho indicado. No nosso caso, o banco possuía 330MB e gerou um script com cerca de 780mil linhas, o que acaba sendo difícil de ser executado no SSMS.
Desse modo, para executar o script no banco destino, preferi utilizar o sqlcmd, utilizando o “-i” para indicarmos onde estava nosso script (input) e o “-o” para indicarmos onde queremos a saída (output).
Caso quisermos executar o comando no cmd via SQL Authentication, utilizaremos o comando abaixo:
sqlcmd -S NomeDaInstância -U UserSQL -P Senha -i LocalDoArquivo -o LocalDaSaida
Caso estejamos utilizando o modo de autenticação do Windows, utilizamos o comando abaixo:
sqlcmd -S NomeDaInstância -i LocalDoArquivo -o LocalDaSaida
Ao iniciarmos, a tela do cmd se manterá estática, porém podemos consultar o status através de nosso arquivo de output que foi criado:
Esse processo pode demorar um pouco, dependendo do tamanho do banco de dados e do desempenho de seu hardware. No nosso caso, o processo durou cerca de 10 minutos.
Após finalizado, o banco pode ser utilizado normalmente, onde os objetos já estão disponíveis para uso:
É isso aí, pessoal. Esse foi um caso que ocorreu em meu dia a dia que achei interessante compartilhar, onde muitas vezes nos deparamos com essa situação e acabamos sem saída. Caso tenha ficado alguma dúvida, estou disposto a ajudar. Espero que tenham gostado e até mais!