Restauração de backup de banco de dados do SQL Server na versão inferior

185

Como restaurar um arquivo de backup de banco de dados do SQL Server de versão superior em um SQL Server de versão inferior?

Usando o SQL Server 2008 R2 (10.50.1600) , criei um arquivo de backup e agora quero restaurá-lo no SQL Server 2008 do meu servidor ativo (10.00.1600) .

Quando tentei restaurar o backup no SQL Server 2008, ocorre um erro, ou seja, Restore Failedporque:

O backup do banco de dados foi feito em um servidor executando a versão 10.50.1600. Essa versão é incompatível com este servidor, que está executando a versão 10.00.1600.

Como faço para restaurar o arquivo de backup neste servidor?

Oreo
fonte
2
Você não pode fazer isso - simplesmente não é possível. O SQL Server não permitir rebaixamento *" um banco de dados a partir de uma versão superior para um inferior.
marc_s
18
A Microsoft sabe tudo sobre o servidor SQL (desde que o criou) e ainda é impossível mover dados entre duas versões. Simplesmente não entendo por que algum tipo de modo de compatibilidade não está disponível na exportação. Quão difícil pode ser?
dvdmn
1
@dvdmn tão difícil quanto qualquer episódio do Top Gear em que dizem isso - tipos diferentes, declarações diferentes, layouts de blocos diferentes. Mover dados entre bancos de dados é muito fácil, independentemente das versões envolvidas. A desatualização, porém, não é .
Panagiotis Kanavos
2
@ PanagiotisKanavos Eu discordo, no mysql você pode exportar db como comandos sql e restaurá-lo em qualquer versão do mysql (para baixo ou para cima). Sim, você também pode exportar o sql db como script, mas não será fácil restaurá-lo se você tiver algumas funções / procedimentos armazenados que dependem um do outro. Basicamente, não é útil / solução.
Dvdmn
3
A @dvdmn exportar os scripts de um banco de dados é completamente diferente do backup. Sei que alguns produtos não oferecem funcionalidade de backup / restauração ou pior, atrapalham os dois conceitos. Isso geralmente acontece devido a razões históricas: falta de backup no passado, alguns produtos chamados exportação / script com esse nome. Agora que eles fazem , eles têm de manter a resolução de conflitos prazo, falando sobre backups físicos e lógicos, em seguida, se misturam quando falam sobre scripting
Panagiotis Kanavos

Respostas:

78

Não, não é possível fazer o downgrade de um banco de dados. 10.50.1600 é a versão do SQL Server 2008 R2 . Não há absolutamente nenhuma maneira de restaurar ou anexar esse banco de dados à instância do SQL Server 2008 em que você está tentando restaurar (10.00.1600 é o SQL Server 2008). Suas únicas opções são:

  • atualize esta instância para o SQL Server 2008 R2 ou
  • restaure o backup que você possui em uma instância do SQL Server 2008 R2, exporte todos os dados e importe-os em um banco de dados do SQL Server 2008.
Remus Rusanu
fonte
Não consigo atualizar o servidor ativo dos clientes devido a restrições de permissão. e o tamanho do meu banco de dados é superior a 2,5 GB, então não pude criar um script de dados devido a um erro de exceção de memória.
9
@Gaurav Não faça o script dos dados - em vez disso, faça o script de todo o banco de dados (tabelas, procs, gatilhos, restrições etc.) sem dados, crie o novo banco de dados, clique com o botão direito do mouse no banco de dados de origem, vá em "Ferramentas" e depois "Exportar dados" para transferir o conteúdo das tabelas para o seu banco de dados.
Jim McLeod
17
Suspeito muito de uma resposta padrão "não há caminho possível" - isso significa apenas que você ainda não encontrou o caminho. Pode haver muitas razões pelas quais você deseja fazer isso, portanto, essa não é uma resposta útil.
Jay Imerman
6
Discordo, @ Jay, às vezes "você não pode" é a resposta perfeita, embora seja mais útil oferecer soluções alternativas, quando disponíveis.
Russell Fox
1
@ Zhang, se você tiver dúvidas, faça-as como perguntas, não como comentário.
Remus Rusanu
83

Você pode usar a funcionalidade chamada Exportar aplicativo da camada de dados, que gera .bacpacdados e esquema do banco de dados.

No servidor de destino, você pode usar a opção Importar aplicativo da camada de dados, que cria e preenche o novo banco de dados a partir do .bacpacarquivo pré-criado

Se você deseja apenas transferir o esquema do banco de dados, pode usar Extrair Aplicativo da Camada de Dados para criar arquivo e Implementar Aplicativo da Camada de Dados para implantar o esquema criado do banco de dados.

Eu tentei esse processo em diferentes versões do SQL Server do SQL 2014 para SQL 2012 e do SQL 2014 para SQL 2008R2 e funcionou bem.

veljasije
fonte
8
Esta é uma resposta que merece mais atenção. Na verdade, ele funciona apenas na maioria dos casos. Se você tiver usuários SQL órfãos, as operações de exportação falharão. Você sempre pode remover / adicionar esses bits manualmente para transcender as versões do SQL.
Doctor Blue
3
Eu apenas tentei isso, para criar um banco de dados criado no MSSQLEX2014 (V12) no meu MSSQLEX2012 (V11). Acabei de receber um erro "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider não é válido" sem nenhuma maneira de alterá-lo.
Craig
5
A importação do SQL Server 2014 para 2012 usando um .bakpac funciona, mas requer a versão correta do SSMS. Por exemplo, eu uso o SSMS 2016 CTP3 e funcionou perfeitamente. Não funcionou para mim usando SSMS 2012. Eu não testei SSMS 2014.
Greg Gum
1
Alguém sabe se é possível criar um script desse procedimento no T-SQL? UPDATE (respondendo a mim mesmo depois de pesquisar um pouco): você pode automatizar isso via sqlpackage.exelinha de comando. Google para mais.
Alex #
1
Esta é a única solução que funcionou para mim ao fazer o downgrade do SQL2017 muito grande / complicado para o SQL2016. Desempenho também muito bom.
Keith Blows
35

Não necessariamente funcionará

Vai funcionar

  • Geração de scripts - Tarefas -> Gerar scripts . Certifique-se de definir a versão de destino do SQL Server desejada na página Definir opções de script -> Avançado . Você também pode optar por copiar o esquema, os dados ou ambos. Observe que no script gerado, pode ser necessário alterar a pasta DATA para os arquivos mdf / ldf, se passar de não expresso para expresso ou vice-versa.

  • Serviços de publicação de banco de dados do Microsoft SQL Server - eu acho que vem com o SQL Server 2005 e superior. Baixe a versão mais recente aqui . Pré-requisitos: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(faça o download aqui ).

Ohad Schneider
fonte
7
A geração de scripts não é confiável para bancos de dados substanciais, evite se possível.
315 Chris
Ambos os links na parte inferior são 404.
Enviado em
29

Aqui estão meus 2 centavos em diferentes opções para concluir isso:

Ferramentas de terceiros : provavelmente a maneira mais fácil de realizar o trabalho é criar um banco de dados vazio na versão inferior e usar ferramentas de terceiros para ler o backup e sincronizar o novo banco de dados recém-criado com o backup.

Red gate é um dos mais populares, mas existem muitos outros como ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera …. Todas essas são ferramentas premium, mas você pode fazer o trabalho no modo de teste;)

Gerando scripts : como outros já mencionados, você sempre pode estruturar os dados e a estrutura usando o SSMS, mas é necessário levar em consideração a ordem de execução. Por padrão, os scripts de objetos não são ordenados corretamente e você terá que cuidar das dependências. Isso pode ser um problema se o banco de dados for grande e tiver muitos objetos.

Assistente de importação e exportação : essa não é uma solução ideal, pois não restaura todos os objetos, mas apenas as tabelas de dados, mas você pode considerá-lo para correções rápidas e sujas quando necessário.

Ken Williams
fonte
1
O Red Gate Sql Clone não oferece suporte à clonagem entre versões diferentes do SQL Server, relatando exatamente o mesmo erro que recebo ao tentar fazer isso manualmente.
DarkDeny
29

Você não pode restaurar o banco de dados (ou anexar) criado na versão superior para a versão inferior. A única maneira é criar um script para todos os objetos e usar o script para gerar banco de dados.

insira a descrição da imagem aqui

selecione "Esquema e dados" - se desejar incluir as duas coisas no arquivo de script de backup,
selecione Somente esquema - se apenas o esquema for necessário.

insira a descrição da imagem aqui

Sim, agora você concluiu o Criar Script com Esquema e Dados do Banco de Dados.

Smit Patel
fonte
16

Outra maneira de fazer isso é usar o recurso "Copiar banco de dados":

Localize clicando com o botão direito do mouse no banco de dados de origem> "Tarefas"> "Copiar banco de dados".

Você pode copiar o banco de dados para uma versão inferior da Instância do SQL Server. Isso funcionou para mim de um SQL Server 2008 R2 (SP1) - 10.50.2789.0 para o Microsoft SQL Server 2008 (SP2) - 10.0.3798.0

Joy Walker
fonte
3
Observe que isso não funcionará se o destino for o SQL Server Express "O servidor de destino não pode ser uma instância do SQL Server 2005 ou posterior Express". social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Ohad Schneider
2
Também não é possível copiar um banco de dados do SQL Server 2012 para o SQL Server 2008 dessa maneira.
quer
1
Banco de dados de cópia é um desanexar / Anexar operação
Panagiotis Kanavos
1
Obrigado por esta dica! Isso me ajudou muito. Copiei os dados do SQL 2008 R2 para SQL 2008.
dns_nx
8

Você pode tentar isso.

  1. Crie um banco de dados no SQL Server 2008.
  2. Usando o recurso Importar Dados, importe dados do SQL Server R2 (ou qualquer versão superior).
  3. use "RedGate SQLCompare" para sincronizar o script.
Ishtiyaq Khan
fonte
6

Vamos para Tarefa-> Gerar Scripts ...

Em Avançado em "Tipos de dados para script", selecione "Schema and data"e tente executar esse script na sua versão inferior.

mathewsun
fonte
5
Esta é uma solução muito boa, mas funciona muito mal com bancos de dados maiores.
precisa saber é o seguinte
5

Não é bonito, mas foi assim que concedeu que você tenha essa opção instalada na instalação do SQL 2008 R2.

1) Clique com o botão direito do mouse no banco de dados do SQL Server 2008 R2, em "Tarefas". "Gerar scripts" no assistente, selecione o banco de dados e os objetos inteiros na primeira etapa. Na etapa "Definir opções de script", você verá um botão "Avançado", selecione este e certifique-se de selecionar "Script para versão de servidor" = SQL Server 2008 "e não versão R2.Esta é uma etapa crucial, porque" importa dados " por si só não traz todas as chaves primárias, restrições e quaisquer outros objetos, como procedimentos armazenados ".

2) Execute o script SQL gerado na nova instância de instalação ou banco de dados SQL Express ou SQL Server 2008 usando a janela de consulta ou abra o script .sql salvo e execute e você deverá ver o novo banco de dados.

3) Agora clique com o botão direito do mouse no novo banco de dados e selecione "Tarefas" .. "Importar Dados .." escolha a origem como o banco de dados R2 e o destino como o novo banco de dados. "Copie dados de uma ou mais tabelas ou visualizações", marque a caixa de seleção superior para selecionar todas as tabelas e, em seguida, execute o pacote e você deverá ter tudo em uma versão mais antiga. Isso deve funcionar também para a versão 2005. Espero que isso ajude alguém.

motogeek
fonte
oi @ mototeek, tenho o mesmo problema, mas tenho o R2 no servidor de produção e 2008 no local, nesse caso, não posso usar os dados de importação e exportação. qual seria a solução ideal para isso?
Abbas
2

você pode usar o BCP dentro e fora de pequenas tabelas.

Comando BCP OUT: -

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

Comando BCP IN: - Crie uma estrutura de tabela para Invoicescopy1.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c
arnav
fonte
0

Aprecio que esta é uma postagem antiga, mas pode ser útil que as pessoas saibam que o Assistente de Migração do Azure (disponível no Codeplex - não pode ser vinculado é como o Codeplex está no momento em que estou digitando isso) fará isso facilmente.

tony.wiredin
fonte
Essa ferramenta foi substituída pelo Assistente de Migração de Dados do SQL Server. Veja: stackoverflow.com/questions/46517060/…
ahwm
0

Você precisaria usar os assistentes de Importação / Exportação no SSMS para migrar tudo

Não há "downgrade" possível usando backup / restauração ou desanexar / anexar. Portanto, o que você precisa fazer é:

  1. Faça backup do banco de dados do servidor executando a nova versão do SSMS / SQL.
  2. Importe dados do arquivo .bak gerado, expandindo o menu "Tarefas" (depois de clicar com o botão direito do mouse no banco de dados de destino) e selecionando a opção "Importar Dados".
tonderaimuchada
fonte