Mover banco de dados do SQL Server 2012 para 2008

28

Eu tenho um banco de dados em uma instância do SQL Server 2012 que gostaria de copiar para um servidor de 2008. O servidor de 2008 não pode restaurar 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 faltando alguma coisa?

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. Contém tabelas, dados e procedimentos armazenados.

Eis o que tentei até agora

Eu tentei Tarefas Gerar Scripts no servidor de 2012, e consegui gerar o esquema (incluindo procedimentos armazenados) como um script SQL. Isso não incluiu nenhum dado, no entanto.

Depois de criar esse esquema em 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, recebi uma lista de tabelas que eu poderia copiar. Selecionei todas as minhas tabelas (300+) e cliquei no assistente. Infelizmente gasta idades gerando seus scripts, então 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 para 2005 ou posterior". Tem dois modos:

  1. "Desanexar e anexar", que falhou com o 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 o erro

    Cannot read property IsFileStream. This property is not available on SQL Server 7.0."

por Rich 31.08.2012 / 11:47

7 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 na tela de boas-vindas, escolha "banco de dados inteiro de script 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 do servidor" de "2012" para "2008".

Eu então tive que encontrar uma maneira de editar o início desse arquivo SQL massivo, para ajustar como o banco de dados seria criado - veja isto q: link

E, finalmente, eu tive que encontrar uma maneira de executar o script SQL, que era muito grande para abrir no SQL Management Studio - veja isto: link

    
por 03.09.2012 / 17:45
12

Para migrações de SQL, use o Assistente de migração de banco de dados SQL gratuito e de código aberto.

Eu tinha um banco de dados de 5GB com cerca de 10 milhões de registros e tentei a rota através do Generate Script e depois executei o sqlcmd.exe. Primeiro de tudo, o script gerado nem sempre funcionava 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 apenas demora (e tem os mesmos argumentos de linha de comando).

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

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

    
por 28.09.2013 / 01:26
3

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

    
por 28.03.2013 / 20:38
2

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

    
por 31.08.2012 / 12:42
1

After creating that schema on my 2008 machine, I was able to open the "Export Data" wizard on the 2012 machine, and after configuring the 2012 as source machine and the 2008 as target machine, I was presented with a list of tables which I could copy. I selected all my tables (300+), and clicked through the wizard. Unfortunately it spends ages generating its scripts, then fails with errors like "Failure inserting into the read-only column 'FOO_ID'".

O problema é que não é possível inserir as colunas de ID, então:

  1. Selecione todas as tabelas, marcando-as
  2. Selecionar todas as tabelas (a maneira de fazer isso é clicar no primeiro e segurar o turno e clicar na última tabela)
  3. Clique em "Editar mapeamentos" - você pode ver logo acima do próximo botão e ao lado da visualização.
  4. Você receberá uma janela, marque a opção "Ativar inserção de identidade" e, em seguida, clique em próximo e siga em frente. Isso deve funcionar. Funcionou para mim.
por 16.11.2012 / 12:13
1

Eu segui o link da solução Rich e ele funcionou muito bem! Obrigado - Eu não posso votar ainda aqui!

Os passos 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 mudar o nome do log gerado, senão ele tentou substituir o arquivo mdf com o log e, em seguida, jogou este erro link

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

  • Eu tive que comentar a seção gerada e adicionar as permissões do 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
    

Corra, e eis que agora posso restaurar meu novo banco de dados Umbraco 7.1.2 para o meu servidor web que só tem o SQL Server 2008 R2!

    
por 30.11.2014 / 14:07
0

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

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

    
por 04.12.2016 / 18:34