Migrando dados On-Premises para o Azure com o novo Azure Database Migration Service

Olá Pessoal tudo bem? Espero que sim!

Recentemente a Microsoft anunciou o Public Preview do Azure Database Migration Service (Azure DMS) , uma nova forma de levar seus dados em bases SQL Server ou de outras fontes de dados para o Azure:

https://blogs.msdn.microsoft.com/datamigration/2017/11/15/announcing-the-azure-database-migration-service-public-preview/

Pensando nisso, resolvi montar este tutorial mostrando como migrar uma base de dados SQL Server localizada em um ambiente On-Premises para o Azure SQL Database usando o Azure DMS.

O tutorial explica desde de como criar uma conexão entre o Azure e um servidor em Hyper-V (On-Premises) usando VPN Site-to-Site até a migração dos dados com o Azure Database Migration Service.

Pré-Requisitos

 

 

HYPER-V

 

Abra o Virtual Switch Manager do Hyper-V e crie dois novos switches virtuais conforme abaixo:

Nome: External – Tipo: External (Associe a interface que provê sua conexão com a Internet)

Nome: Private – Tipo: Private

Crie uma máquina virtual nova com um disco dinâmico de 128 GB e 2 adaptadores de rede onde um deles deverá ser associado ao virtual switch External e o outro ao Private que criamos nos passos anteriores:

Instale o Windows Server 2016 + SQL Server 2016 ou superior e restaure o backup da base AdventureWorks2016 no SQL Server que você acabou de instalar.

Agora, você irá notar na VM que um dos adaptadores de rede vai estar com conexão na Internet, nomeie ele na VM como External para evitar confusão. O outro adaptador nomeie como Private:

No adaptador External, clique com o direito, e mantenha apenas as opções de TCP/IP marcadas conforme abaixo:

Deixe as configurações de IP e DNS em automático:

Clique em “Advanced...” e na aba WINS marque a opção Disable NetBIOS over TCP/IP:

No adaptador Private configure um IPv4 com máscara e DNS, não precisa de Gateway, no caso usarei:

Subnet Mask = 255.255.255.0

DNS = 192.168.0.1

IPv4 = 192.168.0.2

Por enquanto, está é nossa configuração para o Hyper-V, agora vamos partir para o Azure.

 

AZURE

 

Resource Group

 

Abra o Azure Portal, a primeira coisa que devemos fazer é criar um novo grupo de recursos, vou chama-lo de SAMPLE-DMS-S2S-RG:

Virtual Network

 

Dentro do grupo de recursos que foi criado, adicione uma Virtual Network, vou chama-la de SAMPLE-DMS-S2S-Vnet:

Em address space adicione 10.2.0.0/16.

Em subnet name vou dar o nome de SAMPLE-DMS-S2S-Vnet-Subnet.

Em subnet address range adicione 10.2.0.0/24.

Em resource group, selecione nosso grupo de recursos, no meu caso SAMPLE-DMS-S2S-RG:

Virtual Network Gateway

 

Agora, vamos criar um novo Virtual Network Gateway dentro do nosso Resource Group, ele irá conter nossa segunda subnet.

Vá em Virtual Networks> SAMPLE-DMS-S2S-Vnet > Subnets:

Clique em + Gateway Subnet e em address range use 10.2.1.0/24:

Você deve ver agora as duas Subnets conforme a imagem abaixo:

Agora dentro do nosso RG, adicione o Virtual Network Gateway e clique em Create:

Vou chamar o Virtual Network Gateway de SAMPLE-DMS-S2S-VnetGW.

Deixe o gateway type como VPN e seu vpn type como Route-based.

O SKU deixe em Basic.

Para a Virtual Network selecione a que criamos, no meu caso SAMPLE-DMS-S2S-Vnet.

Em Public IP, como não temos um, teremos que criar, vou chama-lo de SAMPLE-DMS-S2S-VnetGW-PublicIP. Lembrando que pode demorar um pouco até que um IP seja provisionado. Clique em Create ao final:

Obs.: Esta etapa pode levar vários minutos.

 

Local Network Gateway

Agora que criamos o Virtual Network Gateway, vamos criar um Local Network Gateway.

Em nosso grupo de recursos, adicione o Local Network Gateway e clique em Create:

Vou chamá-lo de SAMPLE-DMS-S2S-LocalNetGW.

Em IP address, precisamos voltar lá na nossa VM no Hyper-V e descobrir qual seu IP público, para isso, dentro da VM abra o prompt de comando e rode o seguinte:

nslookup myip.opendns.com resolver1.opendns.com

No meu caso meu IP público é 177.113.183.174:

Em Address space, adicione a sub-rede do network adapter Private da nossa VM no Hyper V, no caso 192.168.0.2/32, ao término clique em Create:

New connection - Local Network Gateway

Agora, precisamos criar uma conexão no nosso Local Network Gateway. Para isso, vá em suas settings>connections e clique em +Add:

Vou chama-la de SAMPLE-DMS-S2S-LocalNetGW-Conn.

Defina seu Virtual Network Gateway com o que criamos anteriormente, no meu caso, SAMPLE-DMS-S2S-VnetGW.

Defina uma Shared Key (PSK) e lembre-se de anota-la pois iremos precisar dela depois em nossa VM no Hyper-V, ao final clique em OK:

Se todas etapas foram devidamente feitas até aqui podemos partir para a configuração do RRAS em nossa VM no Hyper-V.

 

Configuração do RRAS na VM do Hyper-V.

 

Em nossa VM no Hyper abra o Server Manager.

Vá em Manage>Add Roles and Features.

Em Before You Begin clique em Next.

Em Selection installation type selecione Role-Based or Feature-based installation e clique em Next.

Em Select server destination clique em Next.

Em Select server roles selecione Remote Access e clique em Next.

Em Select features clique em Next.

Em Remote Access clique em Next.

Em Role Services marque Direct Access and VPN (RAS):

Clique em Add Features:

Depois marque Routing também e clique em Next:

Em Web Server Role (IIS) clique em Next.

Em Select role services deixe o default e clique em Next.

Em Confirmation clique em Install.

Após o término da instalação, no Server Manager, em Tools, clique em Routing and Remote Access:

Clique com o direito no nome do computador e selecione Configure and Enable Routing and Remote Access:

Na primeira tela clique em Next.

Em Configuration, marque Secure connection between two private networks e clique em Next:

Em Demand-Dial Connections marque Yes e clique em Next:

Em IP Address Assignment selecione Automatically e clique em Next:

Clique em Finish e aguarde:

Após isso, uma nova janela já vai abrir para configurarmos a Demand-Dial Interface, clique em Next:

De um nome e clique em Next, no caso vou chama-la de SAMPLE-S2S-RRAS-Azure:

Em Connection Type selecione Connecting using virtual private network (VPN) e clique em Next:

Em VPN type selecione IKEv2 e clique em Next:

Em IP Address, vá em nosso Virtual Network Gateway no Azure e copie seu Public IP (Lembra que o criamos?), cole o endereço copiado e clique em Next:

Em Protocols and Security selecione Route IP Packets on this interface e clique em Next:

Em Static Routes, vamos adicionar a rota da nossa subnet no Azure, no caso 10.2.0.0, 255.255.255.0, Metric: 24, depois clique em Next:

Depois cheque a rota adicionada em Static Routes:

Em Dial-Out Credentials de um nome qualquer e clique em Next e na última tela em Finish:

Agora em Routing and Remote Access > Network Interfaces, clique com o direito na interface que criamos, no meu caso, SAMPLE-S2S-RRAS-Azure, depois clique em Propriedades:

Na aba Security, marque a opção Use preshared key for authentication e informe a mesma PSK que usamos no Azure:

Na aba options, marque a opção Persistent Connection:

Testando a conexão entre o ambiente On-Premisses e o Azure

Agora, clique com o direito na interface, no meu caso SAMPLE-S2S-RRAS-Azure e clique em Connect.

Se deu tudo certo, a conexão será estabelecida e você poderá comprovar isso olhando a coluna Connection State e lá no Azure, a coluna STATUS dentro da Connection do Local Network Gateway:

Se por acaso a conexão não puder ser estabelecida, verifique se as portas do Azure estão liberadas no Firewall e também não se esqueça dos dispositivos de rede, os links a seguir podem ajudar:

/en-us/azure/architecture/reference-architectures/hybrid-networking/vpn https://blogs.technet.microsoft.com/rrasblog/2006/06/14/which-ports-to-unblock-for-vpn-traffic-to-pass-through/

Faça um ping da VM do Hyper-V no IP 10.2.0.0, o mesmo deve responder com sucesso:

Data Migration Assistant – Migração do schema do banco On-Premisses para o Azure

Agora vamos realizar a migração do Schema do banco através do Data Migration Assistant (DMA).

Se voce ainda não baixou o DMA, baixe e o instale em nossa VM no Hyper-V, (Download: https://www.microsoft.com/en-us/download/details.aspx?id=53595)

Abra o DMA, na esquerda, clique no sinal de “+” , selecione Migration, de um nome ao projeto, no meu caso SAMPLE-AzureDMS-Demo, em Source deixe como SQL Server e target como Azure SQL Database, em migration scope deixe selecionado Schema Only e clique em Create:

Em connect to source informe o nome da instância On-Premises, defina o método de autenticação que preferir, no meu caso irei usar Windows Authentication, marque as opções de Encrypt Connection e Trust Server Certificate e clique em Connect:

Selecione a base AdventureWorks2016 que havíamos restaurado inicialmente e clique em Next:

Em Connect to target server, clique em Create New Azure SQL Database:

Abra o portal do Azure e crie em nosso Resource Group uma nova Azure SQL Database em branco chamada AdventureWorks2016:

Em Server, crie um novo, no meu caso vou chama-lo de azuredmstestserver:

Na SQL database que acabamos de criar clique em Set server firewall:

Crie uma regra contendo o IP público da nossa VM no Hyper-V, no meu caso 177.113.183.174, clique em Save:

Volte ao DMA e informe o server name da SQL database criada, método de autenticação, marque as opções de Encrypt connection e Trust Server Certificate e clique em Connect:

Selecione a Azure SQL Database que criamos e clique em Next:

Em Select objects, deixe todos objetos marcados e clique em Generate SQL Script:

Após o script ter sido gerado clique em Deploy schema:

Aguarde a execução do deploy:

Após o deploy do schema feche o DMA.

 

Azure Database Migration Service – Data migration

Agora que nosso schema já foi migrado para o Azure, vamos levar os dados usando o novo serviço Azure Database Migration Service.

No menu do Portal clique em Subscriptions:

Após selecionar a assinatura, vá em Resource Providers:

Procure por Microsoft.DataMigration e clique em Register.

Agora clique em Create a resource, localize o Azure Database Migration Service e clique em Create:

Nas configurações do Azure DMS, de um nome ao recurso (chamei o meu de SAMPLE-AzureDMS-Demo), selecione a Vnet que criamos, no meu caso SAMPLE-DMS-S2S-Vnet e clique em Create:

Depois que o deploy finalizar, abra o recurso e clique em + New Migration Project:

De um nome ao projeto, no meu caso AzureDMSDataMigration e clique em Create:

Agora, em Select source, coloque o IP do adaptador Private da nossa VM no Hyper-V (que é também o IP que responde nosso SQL Server), informe o usuário (no meu caso o sysadmin) e clique em Save:

Na próxima etapa vamos selecionar a base AdventureWorks2016 e clicar em Save:

Agora vamos informar os dados do nosso SQL database de destino e clicar em Save:

A próxima tela é um sumário do que está envolvido no nosso projeto dentro do DMS, confira as informações e clique em Save:

Agora, estaremos de volta a tela do nosso DMS, clique em cima do projeto que acabamos de criar e em cima clique em + New Activity e depois em Run Database Migration:

Será necessário redigitar a senha do source server e target server, faça isso e clique em Save.

Na etapa Map to target database note que a SQL database que já havíamos criado anteriormente será selecionada automaticamente, aqui também devemos marcar a opção SET SOURCE DATABASE READ-ONLY, feito isso clique em Save:

Na etapa Select tables, como já levamos o schema das tabelas da base On-Premisses anteriormente, ele automaticamente já fez o link delas com as tabelas vazias da Azure SQL database, clique em Save:

Agora, temos uma tela sumarizando o que foi selecionado, de um nome para a atividade (no meu caso AzureDMSActivity), em Validation Option deixe como Do Not Validade afinal é somente um teste, confirme as demais informações e estando tudo certo clique em Run migration:

Agora nossa atividade no DMS estará com status de Running:

Clicando na atividade é possível acompanhar a migração ou mesmo para-la:

Aguarde o DMS terminar a migração dos dados entre as tabelas, no meu caso levou ~4 minutos:

Voce também pode fazer download de um PDF contendo detalhes da migração, basta clicar em Download report:

Exemplo de relatório:

Clicando na linha indicativa da base de dados você também consegue ver o status por tabela pelo próprio portal:

Bom pessoal era isso, espero que o tutorial tenha sido útil a vocês!

 

Abraço e até a próxima!

Referências:

Migrate SQL Server to Azure SQL Database https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-to-azure-sql

Differentiating Microsoft’s Database Migration Tools and Services

https://blogs.msdn.microsoft.com/datamigration/2017/10/13/differentiating-microsofts-database-migration-tools-and-services/

Let’s Configure Azure Site-to-Site VPN with RRAS in Azure Resource Manager! https://blogs.technet.microsoft.com/jletsch/2016/03/15/lets-configure-azure-site-to-site-vpn-with-rras-in-azure-resource-manager/