Mover banco de dados do SQL Server 2012 para 2008

29

Eu tenho um banco de dados em uma instância do SQL Sever 2012 que gostaria de copiar para um servidor de 2008. O servidor de 2008 não pode restaurar os backups criados por um servidor de 2012 (tentei).

Não consigo encontrar nenhuma opção em 2012 para criar um backup compatível com 2008. Estou esquecendo de algo?

Existe uma maneira fácil de exportar o esquema e os dados para um formato independente de versão que eu possa importar para 2008?

O banco de dados não usa nenhum recurso específico de 2012. Ele contém tabelas, dados e procedimentos armazenados.

Aqui está o que eu tentei até agora

Tentei TarefasGerar scripts no servidor 2012 e consegui gerar o esquema (incluindo procedimentos armazenados) como um script SQL. Isso não incluiu nenhum dado.

Depois de criar esse esquema na minha máquina de 2008, consegui abrir o assistente "Exportar Dados" na máquina de 2012 e, depois de configurar o 2012 como máquina de origem e o 2008 como máquina de destino, fui apresentada uma lista de tabelas que poderia copiar. Selecionei todas as minhas tabelas (mais de 300) e cliquei no assistente. Infelizmente, ele passa idades gerando seus scripts e falha com erros como "Falha ao inserir na coluna somente leitura 'FOO_ID'".

Eu também tentei o "Copy Database Wizard", que afirmava ser capaz de copiar "de 2000 ou posterior a 2005 ou posterior". Tem dois modos:

  1. "Desanexar e anexar", que falhou com erro:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Método de Objeto de Gerenciamento SQL que falhou com erro

    Não é possível ler a propriedade IsFileStream. Esta propriedade não está disponível no SQL Server 7.0. "

Rico
fonte
Você é capaz de exportar diretamente? Não sei qual é o tamanho do seu banco de dados, mas é isso que eu faria ao trabalhar com bancos de dados menores.
Dave
2
Nenhuma versão mais antiga do SQL Server pode restaurar backups de versões mais recentes. Isso ocorre por design. Use o recurso de exportação, roteiro as tabelas e os dados e definir o destino script para SQL 2008.
4
"Tentando descobrir por que alguém em sã consciência migraria para trás." - Eu tenho um servidor de produção executando 2012, mas minha máquina de desenvolvimento possui apenas 2008. Gostaria de uma cópia local do banco de dados para ajudar no desenvolvimento, mas não quero instalar 2012 na minha máquina de desenvolvimento, pois não tenho. muito espaço livre restante e não deseja gastar horas instalando-o. (Então eu estou gastando horas tentando migrar para trás em vez .... mas isso é só comigo.)
Rico
11
Você está quase lá. A seção Exportar em que você entrou tem uma opção para incluir dados e também o esquema.
11
Só queria adicionar ao Ramhound: fiz uma atualização do SQL 2008 R2 para o SQL 2012 no meu ambiente de desenvolvimento e, depois de alterar muitos esquemas e dados na minha instância atualizada, percebi que o VS 2010 não pode comparar o esquema ou os dados com o SQL 2012. O SSDT para VS 2010 e VS 2012 pode comparar o esquema com o SQL 2012, mas não é compatível com os projetos de banco de dados originais do VS 2010 e não pode comparar dados. Para encurtar a história, prefiro voltar ao SQL 2008 R2 e esperar até que uma decisão seja tomada pela empresa para avançar para 2012. Mas gostaria de salvar meu novo esquema / dados. AFAIK Estou no meu perfeito juízo.
GFK

Respostas:

40

Clique com o botão direito do mouse no banco de dados no SQL Management Studio 2012 e escolha "Tarefas -> Gerar scripts". Clique além da tela de boas-vindas, escolha "script de banco de dados inteiro e todos os objetos de banco de dados". Na página "especificar como os scripts devem ser salvos", clique em "avançado". Em "Geral" na página de propriedades pop-up, altere "Tipos de dados para script" de "Somente esquema" para "Esquema e dados" e altere "Script para versão de servidor" de "2012" para "2008".

Em seguida, tive que encontrar uma maneira de editar o início desse arquivo SQL massivo, para ajustar como o banco de dados seria criado - veja este q: https://stackoverflow.com/questions/102829/best-free-text-editor -supporting-more-than-4gb-files

E, finalmente, tive que encontrar uma maneira de executar o script SQL, que era muito grande para abrir no SQL Management Studio - veja este q: https://stackoverflow.com/questions/431913/how-do-you-run- um arquivo-300mb-ms-sql-sql

Rico
fonte
o que você ajustou no início do arquivo?
JonoRR
11
Não me lembro exatamente, desculpe. Coisas específicas de aplicativos, eu acho. Talvez o nome do banco de dados ou algo parecido. Eu acho que teria adicionado aqui se fosse relevante para pessoas com o mesmo problema.
Rich
3
@JonoRR Você provavelmente desejaria editar a instrução CREATE DATABASE e definir os caminhos do arquivo de dados para o que fizer sentido no servidor de destino.
Igby Largeman
12

Para migrações SQL, use o Assistente de Migração de Banco de Dados SQL de código aberto e gratuito.

Eu tinha um banco de dados de 5 GB com alguns ~ 10 milhões de registros e tentei a rota via Generate Script e a executei com sqlcmd.exe. Primeiro de tudo, o script gerado nem sempre estava funcionando corretamente. Em segundo lugar, o sqlcmd.exe também pode falhar em arquivos grandes, reclamando da memória disponível. o osql.exe funciona, mas leva apenas idades (e tem os mesmos argumentos da linha de comando).

Então me deparei com uma ferramenta maravilhosa para migrar o SQL Server para os bancos de dados do SQL Azure. Isso funciona para o SQL Server para o SQL Server também, por exemplo, se você deseja migrar um banco de dados do SQL 2012 para o 2008 R2. Ele usa o bcp.exe, que usa cópia em massa. Existe uma versão da GUI e da linha de comando (Lote) disponível e é de código aberto. Consulte http://sqlazuremw.codeplex.com/ . No meu caso, a operação levou 16 minutos.

Em uma tela avançada, você pode selecionar se seu destino é o SQL Server, não o SQL Azure.

lvmeijer
fonte
11
Onde você define o 2008 R2 neste assistente?
JonoRR
Dica impressionante: restaurei um banco de dados do Express 2012 para a Web 2008. Muito fácil.
Rkawano
Pode confirmar que funciona como anunciado. Fez um 2014-> 2012, entre domínios, servidores SQL locais. Como essa ferramenta evitou minhas pesquisas por tanto tempo! Incrível mesmo para uso não-azul.
Gomibushi
3

Sou iniciante no SQL, mas consegui migrar de 2012 para 2008. Para isso, usei o utilitário de importação e exportação do SQL. Eu escolhi o servidor SQL 2012 e o banco de dados que quero migrar e, finalmente, o servidor 2008 e criei um novo banco de dados como meu banco de dados de destino. Funcionou.

Fernando
fonte
2

Experimente as ferramentas APEXSQL . Eles têm uma ferramenta que criará scripts para o banco de dados e também os dados.

Paulo
fonte
"a partir de US $ 299" - existe uma alternativa gratuita?
Rich Rich
1

Depois de criar esse esquema na minha máquina de 2008, consegui abrir o assistente "Exportar Dados" na máquina de 2012 e, depois de configurar o 2012 como máquina de origem e o 2008 como máquina de destino, fui apresentada uma lista de tabelas que poderia copiar. Selecionei todas as minhas tabelas (mais de 300) e cliquei no assistente. Infelizmente, ele passa idades gerando seus scripts e falha com erros como "Falha ao inserir na coluna somente leitura 'FOO_ID'".

O problema é que ele não pode inserir as colunas de ID, portanto:

  1. Selecione todas as tabelas marcando-as
  2. Selecione todas as tabelas (a maneira de fazer isso é clicar na primeira, pressionar a tecla Shift e clicar na última tabela)
  3. Clique em "Editar mapeamentos" - você pode ver isso logo acima do próximo botão e próximo à visualização.
  4. Você receberá uma janela, marque a opção "Ativar inserção de identidade" e clique em Avançar e vá em frente, isso deve funcionar. Funcionou para mim.
Jaimee Jose
fonte
1

Segui a solução de Rich https://superuser.com/a/469597/312310 acima e funcionou muito bem! Obrigado - Ainda não posso votar aqui!

As etapas extras que eu tive que fazer para que isso funcionasse são:

  • Altere os nomes dos arquivos lógicos e verifique se o caminho está correto. Eu também tive que alterar o nome do log gerado, caso contrário ele tentou sobrescrever o arquivo mdf pelo log e, em seguida, lançou este erro https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- em uso

    CREATE DATABASE [xxxxx] ON PRIMARY (NOME = xxxxx ', FILENAME = N'C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = 14400KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON (NOME = N'xxxxxldf ', FILENAME = N'C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) VAI

  • Eu tive que comentar a seção gerada e adicionar as permissões de usuário manualmente depois

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Executei tudo e eis que agora posso restaurar meu novo banco de dados do Umbraco 7.1.2 para o meu servidor Web que possui apenas o SQL Server 2008 R2!

ladygargar
fonte
0

Dê uma olhada no xSQL Schema Compare e no xSQL Data Compare . Você pode primeiro sincronizar o esquema com a comparação de esquemas e depois copiar os dados.

Isenção de responsabilidade: sou afiliado ao xSQL.

Endi Zhupani
fonte