Migração On-Premise para Azure SQL (PARTE2)

Olá, espero que você esteja bem! 😉

Dando continuidade à nossa série sobre migração de banco de dados on-premise.

Se você ainda não leu o primeiro post da série, dê uma olhada, ficou bem completo. Usei o método “Deploy Database to Microsoft Azure SQL Database”, detalhando cada passo. Você vai gostar! 😉

  1. Deploy Database to Microsoft Azure SQL Database (link do post)

Hoje, nesta Parte 2, abordaremos o método de migração que utiliza o Backup BACPAC e Importação. Este método é bastante utilizado, para transferir bancos de dados SQL Server para o Azure SQL Database.

  1. Backup bacpac com import

Também conhecido como “export x import”, pois envolve exportar o banco como um arquivo .bacpac , em seguida importá-lo no Azure SQL Database.

O formato BACPAC é um arquivo que contém o esquema do banco de dados e seus dados, permitindo uma migração “fácil” e eficiente.

Vantagens:

  • Portabilidade: O arquivo .bacpac é portátil, podendo ser movido facilmente entre diferentes servidores, ambientes ou até mesmo armazenado como backup.
  • Controle de Tamanho e Escopo: Ele contém apenas o esquema e os dados (sem objetos de sistema), o que reduz o tamanho e simplifica a migração.
  • Suporte Amplamente Disponível: O método é suportado por ferramentas como SSMS e o Portal do Azure, proporcionando flexibilidade.

Desvantagens:

  • Limitações de Dados: Dados corrompidos, muito grandes ou incompatíveis podem causar falhas durante a exportação e/ou importação.
  • Tempo de Processamento: Pode levar tempo para criar e importar o .bacpac, dependendo do tamanho do banco de dados.
  • Não Suporta Algumas Configurações Avançadas: Configurações específicas do servidor, como permissões de login, não são incluídas no arquivo .bacpac.

2.1 – Preparação do Ambiente:

Assim como mencionado no post inicial, por segurança, é bom sempre ter um backup atualizado antes de iniciar qualquer processo.

E também certifique-se de que o banco de dados de origem é compatível com o Azure SQL Database, incluindo o suporte às features utilizadas.

Outro ponto importante saber:

  • Espaço Disponível: O .bacpac pode ocupar bastante espaço dependendo do banco.

2.2 – Exportar BACPAC:

  • Abra o SQL Server Management Studio (SSMS) e conecte-se ao banco de dados de origem.

Neste exemplo vamos exportar a database AdventureWorks2014.

  • Clique com o botão direito no banco de dados que deseja exportar.

Vá em Task > Export Data-tier Application.

Siga as instruções do assistente:

Tem-se duas opções para salvar o arquivo .bacpac :

Opção1

Escolha uma pasta e de nome ao arquivo que deseja salvar.

Lembrando que o tamanho da base influenciará no tempo para salvar, e também é necessário validar se você possui espaço suficiente disponível no disco.

Confira as informações antes de prosseguir.

  • Pronto, o arquivo .bacpac será salvo.

Ao confirmar, o exporting se iniciará.

Concluído.

Arquivo salvo em disco local.

Observa que neste nosso exemplo o arquivo possui em tamanho “minúsculo”.

Simples né, concorda? Mas no dia a dia nem tudo é maravilha.
Como dizem: Pra que facilitar se podemos complicar!? Algo assim …. rsrs

Databases geralmente são grandes e esse processo de salvar no servidor local, nem sempre vai ser possível devido ao espaço em discos disponíveis.

Outro ponto importante é o hardware e a rede, que podem impactar, fazendo com que demore muito a conclusão do download e/ou upload de arquivo.

Sendo assim, que tal salvar esse arquivo diretamente no Azure? Facilitando depois nosso import. Bora!? 😉

2.3 – Storage Account

Acesse o Portal do Azure

Para seguir, vamos usar um storage Account.

  • Criar um Storage Account (ou use um seu, caso já tenha criado)
    • Acesse o serviço de Storage Accounts
    • No menu esquerdo, clique em “Storage accounts”.
    • Clique em “Create”

Configure as informações básicas:

  • Subscription: Selecione a assinatura onde o Storage Account será criado.
  • Resource Group: Crie um novo grupo de recursos ou selecione um existente.
  • Storage Account Name: Defina um nome único para o Storage Account (deve ser em letras minúsculas e sem caracteres especiais).
  • Region: Escolha a região mais próxima para melhor desempenho.
  • Performance: Escolha “Standard” (geralmente suficiente para uploads).
  • Redundância: Escolha uma opção de redundância (ex.: LRS, ZRS, etc.).

OBS: Escolha as opções que melhor atendam às suas necessidades, considerando fatores como frequência de acesso, performance requerida e custo estimado, pois essas escolhas impactam diretamente tanto o desempenho quanto o orçamento do seu projeto.

Para este lab optei por estas:

Clique em “Next” até chegar ao final e clique em “Review + Create”.

  • Revise as configurações e clique em “Create”.

Deploy concluído.

2.4 – Blob Container

Vamos precisar agora criar um blob container.

  • No Storage Account recém-criado, pesquise por Containers.

  • Clique e vá em “+ Container”.
    • Nome: Defina um nome para o container (ex.: upbacpac).
    • Public access level: Escolha “Private (no anonymous access)” (mais seguro) ou “Blob (public read access for blobs only)” se deseja que os arquivos sejam acessíveis publicamente.
    • Clique em “Create”.

Concluído.

Por padrão, o Azure Blob Storage requer um método de autenticação para permitir uploads. Portanto, como vamos enviar um arquivo .bacpac para o Blob Container, precisaremos configurar permissões de acesso.

Temos algumas opções:

  • Usar um Storage Account Key (Menos Seguro)

Podemos usar para autenticar o upload, mas não é recomendado para acesso compartilhado. A Storage Account Key funciona, mas dá acesso total à conta de armazenamento, o que pode ser um risco.

  • Definir o Blob como Público (Menos Seguro)

Se quiser permitir uploads sem autenticação, pode alterar o Blob Container para acesso público, mas isso expõe o armazenamento a acessos não controlados, devendo ser evitado principalmente para dados sensíveis.

  • Usar um SAS Token (Método Recomendado)

Ao invés de alterar permissões globais, pode gerar um SAS Token para permitir uploads temporários.

Afinal de conta, qual método usar?

O SAS Token (Shared Access Signature) é o método mais seguro e flexível para permitir uploads de arquivos .bacpac no Blob Storage.

Este método não é ativado por padrão, portanto, precisamos gerar um SAS Token antes de realizar o upload.

2.5 – Gerar um SAS Token (Shared Access Signature)

  • No Azure Portal, acesse o Storage Account e vá até “Shared access signature”.

Configure as opções:

  • Permissões: Marque Write, Read, e Create (para permitir upload e leitura do arquivo).
  • Start and Expiry date/time: Defina um período de validade seguro.
  • Clique em “Generate SAS and connection string”.

  • Copie a Blob service SAS URL, pois ela será usada para o upload.

2.6 – Fazer upload com o SAS Token (Exemplo via AzCopy):

Vamos testar se o AzCopy está instalado.

Não reconhecido.

Vamos baixar ele e instalar. Seguindo passos no site da microsoft.

Copiar ou mover dados para o Armazenamento do Microsoft Azure com o AzCopy v10 | Microsoft Learn

Executaremos ele seguindo diretório que foi salvo o exe.

PS C:\Users\vagrant\Downloads\azcopy> .\azcopy.exe

Instalação concluída.

Validando versão.

Agora estamos apto a fazer o upload do bacpac via script no powershell.

Enviando o arquivo .bacpac para meu Blob Storage.

Segue script padrão. Basta substituir os campos conforme seu portal.

Este vai ser o meu script:

Solução Rápida: Rodar o AzCopy Diretamente

Como alternativa imediata, tente rodar o comando utilizando o caminho completo do executável, assim:

Em pouco tempo o upload foi concluído.

Arquivo inserido.

Lembra da Opção2 para salvar o arquivo .bacpac? Bônus! 😉

Vamos fazer ela também para você escolher a melhor, conforme sua realidade.

Faça login na sua conta e escolha o Storage Account e o Blob Container, conforme criamos anteriormente.

Dê um nome para seu arquivo .bacpac que será exportado.
Veja que estou atribuindo um nome diferente do primeiro.

Temos uma novidade, sabe o que é este Temporary file name?

O Temporary File Name é o local onde o arquivo temporário do .bacpac será criado.

  • Antes de enviar o arquivo diretamente para o Azure Blob Storage, o SQL Server Management Studio (SSMS) exporta o conteúdo do banco de dados para um arquivo temporário no local especificado.
  • Este arquivo temporário contém os dados e metadados do banco de dados.

Upload para o Blob Storage:

Após a criação do arquivo temporário, ele será carregado no container do Azure Blob Storage especificado.

Remoção Automática:

Depois que o upload para o Azure for concluído, o arquivo temporário pode ser excluído automaticamente ou permanecer na pasta temporária (dependendo do comportamento do SSMS).

Importante:

Espaço em Disco: Certifique-se de que o local configurado para o arquivo temporário tenha espaço suficiente, especialmente para bancos de dados grandes.

Permissões de Escrita: O caminho configurado deve ter permissões para gravação, caso contrário, o processo pode falhar.

Posso alterar o caminho onde será gravado temporariamente?

Sim, você pode clicar no botão Browse e selecionar outro local no disco onde deseja que o arquivo temporário seja criado. Isso é útil para:

– Redirecionar para um disco com mais espaço.

– Facilitar o acesso ao arquivo, caso precise analisá-lo antes do upload.

Curiosidade que você deve estar se perguntando, o tamanho salvo é o mesmo? A resposta é SIM!

Arquivo que salvamos anteriormente no disco local, na opção1.

Agora o arquivo temporário, conforme passos da opção2.

Infelizmente, pelas pesquisas que fiz, diziam que o arquivo temporário é obrigatório durante o processo de exportação do banco de dados para um arquivo .bacpac. O SQL Server Management Studio (SSMS) sempre precisa criar esse arquivo temporário, mesmo que o destino final seja o Azure Blob Storage.

  • Validação:
    • O arquivo temporário permite que o SSMS valide os dados antes de transferi-los para o Azure, garantindo integridade e consistência.
  • Proibição de Ignorar o Campo:
    • Se você tentar deixar o campo vazio ou removê-lo, o processo não continuará porque o SSMS não terá onde salvar temporariamente os dados do banco.

Continuando nossos passos…

Próxima tela, confira se estão tudo ok, e pronto.

Concluído.

Upload concluído com sucesso. Ambos arquivos seguem no blob.

2.7 – Como importar o arquivo .bacpac para o Azure SQL Database

  • Acesse o Portal do Azure:

Faça login no Portal do Azure.

  • Vá para o Servidor SQL:

No menu esquerdo, selecione Azure SQL.

Não temos nenhum criado, portanto vamos criar um novo.

Criado o serverbacpac.

Após criação, vamos copiar o nome do server, pois será útil depois.

serverbacpac.database.windows.net

Faremos agora o “import database“.

Vamos selecionar o arquivo de backup, ou seja, o .bacpac.

Nosso Storage account.

Nosso Container.

Os dois arquivos .bacpac disponíveis.

Optei pelo segundo, mas sem preferência.

Necessário escolher o Tier e preencher os demais campos conforme necessidade.
Escolhi o Basic Service Tier para esse lab, ele será suficiente para importar a base e realizar validações sem custos elevados.

Pronto, nosso import deu erro, e agora?

{“code”:”ImportExportJobError”,”message”:”The ImportExport operation with Request Id ‘8936391a-e8ad-41a7-b8f4-ea286d9b7d55’ failed due to ‘The ImportExport operation with Request Id ‘8936391a-e8ad-41a7-b8f4-ea286d9b7d55’ failed due to ‘The SQL instance is inaccessible because the public network interface is denied (Error 47073). Please enable public network access on the SQL Server or configure Import/Export to use Private Link as described in https://go.microsoft.com/fwlink/?linkid=2217536.’.’.”}

O erro indica que a operação de importação/exportação falhou porque o acesso público ao SQL Server está desativado. Isso acontece porque o servidor SQL está configurado para negar conexões via rede pública, impedindo o Azure de acessar o destino para a importação.

No SQL server, basta localizar as configurações de Networking.
Por segurança, esta opção por default vem Disable.

Vamos portanto habilitar.

Executando novo import.

Nesta nova tentativa optei por colocar a base nova com name AdventureWork2024_new2.

Hora da verdade! Vamos validar via SSMS.

Usaremos o nome do servidor conforme copiado anteriormente, juntamente com o login e password.

Base restaurada! 😉

Servidor On-Premise x Azure SQL.

Comparativo básico.

Conforme citado no início do post, no Azure SQL alguns conceitos são diferentes e alguns não suportados. Necessário fazer esta análise antes de realizar a migração.

Exemplo:

  • No Azure SQL, o conceito de logins no nível de servidor é substituído por usuários dentro do banco de dados.

  • Use uma ferramenta alternativa para automação, como Azure Logic Apps, Azure Automation, ou Elastic Jobs para criar jobs equivalentes.

  • Linked Servers, não são suportados no Azure SQL Database.

Conclusão

A migração utilizando Backup BACPAC é um método eficiente para transferir bancos de dados SQL Server para o Azure SQL Database. Porém, assim como os demais métodos, precisa ser analisado e planejado com antecedência. Para comprovar se este método realmente vai atender conforme necessidade e regra de negócio.

Ufa, encerramos este POST, espero que tenha contribuído alguma coisa para o seu aprendizado.

Lembrando que darei continuidade nesta “série”.

Aguardem…

Obrigado, e quaisquer dúvidas, sugestões, elogios e reclamações, … podem me enviar! 😉

Seguem alguns links como referências usadas para escrever este post.

ederlelis Administrator
DBA Consultor SQL Server

One thought on “Migração On-Premise para Azure SQL (PARTE2)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *