Transferir dados de backup de uma nova versão do MS SQL Server para uma versão mais antiga

Antecedentes


Uma vez, para reproduzir um bug, eu precisava de um backup da base de produção.

Para minha surpresa, me deparei com as seguintes limitações:

  1. O backup do banco de dados foi feito na versão do SQL Server 2016 e não era compatível com o meu SQL Server 2014 .
  2. No meu computador de trabalho, o Windows 7 foi usado como sistema operacional, então não pude atualizar o SQL Server para a versão 2016
  3. O produto suportado fazia parte de um sistema maior com uma arquitetura Legacy forte e também acessava outros produtos e bases; portanto, sua implantação em outra estação poderia levar muito tempo.

Diante do exposto, cheguei à conclusão de que chegou a hora de muletas de soluções não padronizadas.

Recuperação de dados do backup


Decidi usar o Oracle VM VirtualBox com Windows 10 (você pode tirar uma imagem de teste para o navegador Edge a partir daqui ). O SQL Server 2016 foi instalado na máquina virtual e o banco de dados do aplicativo foi restaurado a partir do backup ( instruções ).

Configurar o acesso ao SQL Server em uma máquina virtual


Além disso, foi necessário executar algumas etapas para possibilitar o acesso ao SQL Server de fora:

  1. Para um firewall, adicione uma regra para pular solicitações para a porta 1433 .
  2. É desejável que o acesso ao servidor não passe pela autenticação do Windows, mas pelo SQL com um nome de usuário e senha (é mais fácil configurar o acesso). No entanto, nesse caso, lembre-se de habilitar a autenticação SQL nas propriedades do SQL Server.
  3. Nas configurações do usuário no SQL Server, na guia Mapeamento do Usuário , especifique a função de usuário db_securityadmin para o banco de dados restaurado.

Transferência de dados


Na verdade, a transferência de dados em si consiste em dois estágios:

  1. Transferência de esquema de dados (tabelas, visualizações, procedimentos armazenados, etc.)
  2. Transferir dados em si

Migração de esquema de dados


Realizamos as seguintes operações:

  1. Selecione Tarefas -> Gerar Scripts para o banco de dados portátil.
  2. Selecionamos os objetos necessários para transferir ou deixar o valor padrão (nesse caso, os scripts serão criados para todos os objetos no banco de dados).
  3. Especifique as configurações para salvar o script. É mais conveniente salvar o script em um único arquivo codificado em Unicode. Então, no caso de uma falha, não é necessário repetir todas as etapas novamente.

Após salvar o script, ele pode ser executado no SQL Server original (versão antiga) para criar o banco de dados necessário.

Atenção: após executar o script, é necessário verificar a conformidade das configurações do banco de dados no backup e no banco de dados criado pelo script. No meu caso, o script não tinha uma configuração para COLLATE, o que causou uma falha ao transferir dados e dançar com um pandeiro para recriar o banco de dados usando um script aumentado.

Transferência de dados


Antes de transferir dados, você deve desativar a verificação de todas as restrições com base em:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' 

Transferimos dados usando o assistente de importação de dados Tarefas -> Importar Dados no SQL Server, onde o banco de dados criado pelo script está localizado:

  1. Especifique as configurações de conexão de origem (SQL Server 2016 na máquina virtual). Usei o SQL Server Native Client de origem de dados e a autenticação SQL acima mencionada.
  2. Especifique as configurações para se conectar ao destino (SQL Server 2014 na máquina host).
  3. Em seguida, configure o mapeamento. Você deve selecionar todos os objetos não somente leitura (por exemplo, não é necessário selecionar visualizações). Como opções adicionais, selecione "Permitir inserção em colunas de identidade" , se usado.
    Atenção: se, ao tentar selecionar várias tabelas e definir a propriedade “Permitir inserção em colunas de identidade” nelas, a propriedade já foi configurada para pelo menos uma das tabelas selecionadas, o diálogo indicará que a propriedade já está definida para todas as tabelas selecionadas. Esse fato pode ser confuso e levar a erros de transferência.
  4. Começamos a transferência.
  5. Restaurar verificação de restrição:
     EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all' 

Se ocorrer algum erro, verifique as configurações, exclua o banco de dados criado com os erros, recrie-o a partir do script, faça correções e repita a transferência de dados.

Conclusão


Essa tarefa é bastante rara e surge apenas devido às limitações acima. A solução mais comum é atualizar o SQL Server ou conectar-se a um servidor remoto, se a arquitetura do aplicativo permitir. No entanto, ninguém está seguro do código legado e das mãos tortas do desenvolvimento de baixa qualidade. Espero que você não precise dessas instruções, mas se ainda precisar, isso ajudará a economizar muito tempo e nervosismo. Obrigado pela atenção!

Lista de fontes usadas


Source: https://habr.com/ru/post/pt455934/


All Articles