Migrando banco de dados SQL com DMA

No post de hoje iremos falar um pouco sobre migração de banco de dados SQL Server Onpremise para uma VM do Azure com SQL Server.

A versão que iremos utilizar será do Windows Server 2019 com SQL Server 2019, o projeto será inteiramente construído no Azure, embora façamos uma simulação de ambiente Onpremise, utilizando serviços IAAS não temos grandes diferenças.

A arquitetura proposta será a seguinte, do lado esquerdo nosso ambiente inicial onde o servidor SQL de origem existe, temos também o servidor de Controlador de Domínio, dessa forma somos mais fieis a maioria dos ambientes; do lado direito temos o ambiente de destino, que se comunica via peering com o ambiente de origem, portanto também possui acesso ao controlador de domínio.

Para a construção dessa infraestrutura e realização da migração iremos seguir 7 passos:

1- Construção dos recursos:

Resource groups(2x);
Redes Virtuais(2x);
Subnets(4x);
NSGs(2);
Maquinas Virtuais(3x);

2- Conectividade:

Peering(2);
Adequação das regras de NSG(2);

3- Configuração dos Serviços de AD:

Configurar serviço de Active Directory(1x);
Configuração dos usuários para acesso RDP(2x);
Ingresso dos servidores ao domínio(3x);

4- Configuração do File Share:

Criação de um Storage Account(1x);
Criação um Azure File Share responsável pelos dados de backup durante a migração(1x);
Mapeando unidade criada aos servidores de Banco de Dados(2x);

5- Configuração do DMA:

Download do Agent(1x);
Instalação do DMA(1x);
Ajuste dos usuários de migração(2x);

6- Importação do Banco de dados na origem:

Download da base de dados teste;
Importação do Banco na origem;

7- Inicialização do DMA:

Criação do Projeto do DMA;
Criação do Assessment do DMA;
Inicialização da migração do banco de dados de origem;

Introdução ao DMA

O Azure DMA ou Azure Data Migration Assistant te ajuda a mitigar possíveis problemas que poderiam surgir durante uma migração de Banco de dados ou até mesmo uma atualização do mesmo.

O DMA possui features de descoberta, que analisam todas as suas tabelas e schemas, mostrando para o DBA de maneira antecipada, quais features estariam disponíveis nessa nova plataforma de destino, ele também nos auxilia identificando os downsides dessa mudança, caso eles existam.

Além de features de descoberta ele também realiza a migração do banco de dados, costuma ser mais utilizado para migrações Off-line, onde podemos ter um período de downtime, para migrações Online, indico buscar por outra abordagem.

Irei deixar aqui um link rápido para o pré-requisitos da solução e as versões suportadas: https://docs.microsoft.com/en-us/sql/dma/dma-overview?view=sql-server-ver16#supported-source-and-target-versions

Vamos começar nossos steps para migração do banco de dados!

1- Construção dos recursos:

Conforme previsto teríamos a criação de alguns recursos, farei sugestões de nomenclaturas e regiões mais econômicas, mas sintam-se livres para optar por qualquer customização.
Vale lembrar que se trata de um ambiente de laboratório, por esse motivo estaremos sendo mais flexíveis com relação as práticas de segurança, em ambientes de produção a dica é utilizar conexão via VPN para acesso as maquinas, e ser bastante rigoroso com as liberações de portas nas NSGs.

  • Ambiente Source:
    Resource Group:
    Nome: rg-source-environment
    Região: EastUS 2

    Virtual Network:
    Nome: vnet-source-environment
    Região: EastUS 2
    Address Space: 172.16.0.0/16
    Subnets:
    AD: 172.16.1.0/24
    SQL-Source: 172.16.0.0/24

Virtual Machine:
Nome: vm-ad
Região: EastUS 2
Size: Standard B2s
Image: Windows Server 2019 Datacenter - Gen2
Subnet: AD
Public IP: vm-ad-ip
NSG: vm-ad-nsg
Rules:
Inbound: 3389

Nome: vm-sql-source
Região: EastUS 2
Size: Standard B2s
Image: SQL Server 2019 Standard on Windows Server 2019 - Gen1
Subnet: SQL-Source
Public IP: vm-sql-source-ip
NSG: vm-sql-source-nsg
Rules:
Inbound: 3389,1433
SQL Authentication: Enabled
Obs: Como se trata de um laboratório iremos reduzir o armazenamento de storage para 128GB, as informações serão encontradas na sessão de "SQL Server Settings" durante a criação da VM SQL, o restante das configurações manteremos o padrão.

  • Ambiente Destination:
    Resource Group:
    Nome: rg-destination-environment
    Região: EastUS 2

    Virtual Network:
    Nome: vnet-destination-environment
    Região: EastUS 2
    Address Space: 10.0.0.0/16
    Subnets:
    Default: 10.0.1.0/24
    SQL-Destination: 10.0.0.0/24

    Virtual Machine:
    Nome: vm-sql-destination
    Região: EastUS 2
    Size: Standard B2s
    Image: SQL Server 2019 Standard on Windows Server 2019 - Gen1
    Subnet: SQL-Destination
    Public IP: vm-sql-destination-ip
    NSG: vm-sql-destination-nsg
    Rules:
    Inbound: 3389,1433
    SQL Authentication: Enabled
    Obs: Como se trata de um laboratório iremos reduzir o armazenamento de storage para 128GB, as informações serão encontradas na sessão de "SQL Server Settings" durante a criação da VM SQL, o restante das configurações manteremos o padrão.

2- Conectividade:

Neste passo iremos criar uma conexão entre as redes virtuais Source e Destination, pra isso iremos precisar realizar o Peering entre as redes, segue abaixo os passos para a conclusão:

3- Configuração dos conectar via RDP na maquina que criamos no primeiro step, dessa vez iremos instalar a feature de Active Directory:

O nome do domínio pode ser até o mesmo que utilizei (contoso.com), a única ressalva é que para ser um domínio qualificado precisa finalizar com ".com"; Ao final do processo a maquina irá reiniciar, quando logar novamente podemos utilizar o mesmo usuário que foi utilizado anteriormente.

Segundo passo nesta seção será a criação do usuário que iremos utilizar para realizar a migração do banco de dados entre ambientes:

Terceiro passo, vamos adicionar a maquina "vm-sql-source" ao domínio existente:

Obs: Antes de adicionarmos a maquina SQL ao domínio, é importante que adicionemos o IP privado da maquina responsável pelo serviço de AD ao DNS Servers das virtual networks do ambiente Source e Destination, após essas alterações, reinicie as máquinas e siga com os procedimentos.

Obs: Realizar o mesmo procedimento para a maquina "vm-sql-destination".

Após os procedimentos acima, deveremos ser capazes de nos conectar a vm usando nosso domínio "contoso", para realizar o acesso via RDP iremos utilizar:
domain\user
Senha

Um vez dentro da vm-sql-source deveremos liberar o acesso remoto ao usuário "migrate" que foi criado anteriormente, siga os seguintes passos:

Painel de Controle > System and Security > Allow remote access > Remote settings > Remote > Select Users > Add > Insira o nome do usuário "migrate".

4- Configuração do File Share:

Primeiro passo, vamos realizar aqui a criação do nosso File Share, ele será utilizado para armazenar o backup do SQL Server durante a migração do banco de dados:

Obs: Certifique de já ter criado o seu Azure Storage Account, caso precise de ajuda neste step, segue o link com todos passos necessários.

Segundo passo, agora realizaremos o mapeamento da unidade do Azure File Share, que criamos no step anterior, iremos mapear apenas para o "vm-sql-destination":
Mapeando a unidade:

Mapeando a unidade no SQL Server:

Habilitando o 'xpcmdshell':

Query to enable ‘xpcmdshell’ on SQL Server
Query to enable ‘xpcmdshell’ on SQL Server. GitHub Gist: instantly share code, notes, and snippets.

Mapeando um local ao SQL Server:

Mapping a local from file share to SQL Server
Mapping a local from file share to SQL Server. GitHub Gist: instantly share code, notes, and snippets.

Verificando o mapeamento:

Validanting the Map
Validanting the Map. GitHub Gist: instantly share code, notes, and snippets.

Obs:
Lembre-se de adicionar a letra correspondente ao mapeamento anteriormente executado, no meu caso utilizei a letra "z", como pode ser visto já havia realizado o mapeamento em meu ambiente, quando realizar o mapeamento pela primeira vez o output será de sucesso.

Caso queira desabilitar o "xpcmdshell", segue o link com os steps necessários.

5- Configuração do DMA:

Primeiro passo, vamos realizar o download o DMA no servidor "vm-sql-source", segue o link para download:
Obs: Provável que precisemos instalar o .Net Framework 4.8.

Instalação do DMA:
A instalação do DMA é simples o típico next > next >next.

Nosso terceiro passo nesta seção será conceder acesso ao usuário de domínio "migrate" aos bancos de dados Source e Destination:

Obs: O step acima foi realizada na VM Source, devemos repetir os mesmos procedimentos no ambiente VM Destination, única diferença é que ainda não teremos um banco de dados lá, portanto conceda apenas as server roles.

6- Importação do Banco de dados na origem:

Primeiro passo, vamos realizar o download da base de dados de teste, visite o site:
https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms

Realize o download do arquivo OLTP "AdventureWorks2019.bak"
Após o download, mova o arquivo de backup para o caminho padrão de backup do SQL Server:
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\Backup"

Segundo passo, realizar o restore do arquivo e backup, para o servidor de banco de dados, segue os passos logo abaixo:

7- Inicialização do DMA:

Primeiro passo, vamos inicializar o DMA na maquina "vm-sql-source" e realizar o Assessment da migração, após a realização do mesmo, seremos capazes de entender os impactos que essa migração nos trará:

Segunda passo, vamos realizar a migração do banco para o SQL Server Destination:

Terceiro passo, vamos agora validar a migração, analisando a maquina "vm-sql-destination":

Obs: Repare que realizamos o login com nosso usuário de domínio "migrate", a migração foi realizada com sucesso pois conseguimos mover todas as tabelas e dados contidos no banco de dados de origem.

Após a conclusão de todos os steps fomos capazes de realizar a migração do banco de dados utilizando o DMA, vale destacar que em migrações de bancos de dados online (Intolerante a paradas) outra estratégia deve ser analisada, inclusive é assunto para um novo post.

Não se esqueça de compartilhar o post com seus colegas, caso tenha qualquer dúvida nos deixe um comentário.