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:
- 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 .
- 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
- 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:
- Para um firewall, adicione uma regra para pular solicitações para a porta 1433 .
- É 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.
- 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:
- Transferência de esquema de dados (tabelas, visualizações, procedimentos armazenados, etc.)
- Transferir dados em si
Migração de esquema de dados
Realizamos as seguintes operações:
- Selecione Tarefas -> Gerar Scripts para o banco de dados portátil.
- 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).
- 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:
- 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.
- Especifique as configurações para se conectar ao destino (SQL Server 2014 na máquina host).
- 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. - Começamos a transferência.
- 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