Como migrar o SQL Server para a Instância Gerenciada de SQL do Azure offline com o PowerShell e o Serviço de Migração de Banco de Dados do Azure

Neste artigo, você migra offline o banco de dados Adventureworks2016 restaurado em uma instância local do SQL Server 2005 ou posterior para uma Instância Gerenciada do Banco de Dados SQL do Azure usando o Microsoft Azure PowerShell. Migre bancos de dados do SQL Server para uma Instância Gerenciada de SQL do Azure usando o módulo Az.DataMigration no Microsoft Azure PowerShell.

Neste artigo, você aprenderá como:

  • Crie um grupos de recursos.
  • Crie uma instância do Serviço de Migração de Banco de Dados do Azure.
  • Crie um projeto de migração em uma instância do Serviço de Migração de Banco de Dados do Azure.
  • Execute o comando de migração offline.

Dica

No Serviço de Migração de Banco de Dados do Azure, você pode migrar seus bancos de dados offline ou enquanto estiverem online. Na migração offline, o tempo de inatividade do aplicativo começa quando a migração é iniciada. Para limitar o tempo de inatividade que leva para transferir para o novo ambiente após a migração, use uma migração online. É recomendável testar uma migração offline para determinar se o tempo de inatividade é aceitável. Se o tempo de inatividade esperado não for aceitável, faça uma migração online.

Este artigo fornece as etapas para uma migração offline, mas também é possível migrar online.

Pré-requisitos

Para concluir essas etapas, você precisa:

Entrar na assinatura do Microsoft Azure

Entre em sua assinatura do Azure usando o PowerShell. Para obter mais informações, leia o artigo Entrar com o Azure PowerShell.

Criar um grupo de recursos

Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados.

Crie um grupo de recursos usando o comando New-AzResourceGroup.

O exemplo abaixo cria um grupo de recursos chamado myResourceGroup na região Leste dos EUA.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Criar uma instância do Serviço de Migração de Banco de Dados do Azure

Crie uma nova instância do Serviço de Migração de Banco de Dados do Azure usando o cmdlet New-AzDataMigrationService. Esse cmdlet espera os seguintes parâmetros obrigatórios:

  • Nome do Grupo de Recursos do Azure. Use o comando New-AzResourceGroup para criar um grupo de recursos do Azure, como mostrado anteriormente, e forneça seu nome como um parâmetro.
  • Nome do serviço. Cadeia de caracteres que corresponde ao nome de serviço exclusivo desejado para o Serviço de Migração de Banco de Dados do Azure.
  • Local. Especifica o local do serviço. Especifique um local de data center do Azure, como Oeste dos EUA ou Sudeste Asiático.
  • Sku. Esse parâmetro corresponde ao nome do SKU do DMS. Atualmente, os nomes de SKU com suporte são Basic_1vCore, Basic_2vCores e GeneralPurpose_4vCores.
  • Identificador de Sub-rede Virtual. Você pode usar o cmdlet New-AzVirtualNetworkSubnetConfig para criar uma sub-rede.

O exemplo a seguir cria um serviço nomeado MyDMS no grupo de recursos MyDMSResourceGroup localizado na região Leste dos EUA com uma rede virtual nomeada MyVNET e uma sub-rede virtual chamada MySubnet.

$vNet = Get-AzVirtualNetwork -ResourceGroupName MyDMSResourceGroup -Name MyVNET

$vSubNet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vNet -Name MySubnet

$service = New-AzDms -ResourceGroupName myResourceGroup `
  -ServiceName MyDMS `
  -Location EastUS `
  -Sku Basic_2vCores `
  -VirtualSubnetId $vSubNet.Id`

Criar um projeto de migração

Depois de criar uma instância do Serviço de Migração de Banco de Dados do Azure, crie um projeto de migração. Um projeto do Serviço de Migração de Banco de Dados do Azure exige informações de conexão para as instâncias de origem e de destino, bem como uma lista de bancos de dados que você deseja migrar como parte do projeto.

Criar um objeto de Informações de Conexão de Banco de Dados para as conexões de origem e destino

Crie um objeto de Informações de Conexão de Banco de Dados usando o cmdlet New-AzDmsConnInfo, que espera os seguintes parâmetro:

  • ServerType. O tipo de conexão de banco de dados solicitado, por exemplo, SQL, Oracle ou MySQL. Use o SQL para SQL Server e SQL do Azure.
  • DataSource. O nome ou IP de uma instância do SQL Server ou Instância de Banco de Dados SQL do Azure.
  • AuthType. O tipo de autenticação da conexão, que pode ser SqlAuthentication ou WindowsAuthentication.
  • TrustServerCertificate. Esse parâmetro define um valor que indica se o canal é criptografado durante o bypass percorrendo a cadeia de certificados para validar a relação de confiança. O valor pode ser $true ou $false.

O exemplo a seguir cria um objeto Connection Info para o SQL Server de origem chamado MySourceSQLServer usando autenticação SQL:

$sourceConnInfo = New-AzDmsConnInfo -ServerType SQL `
  -DataSource MySourceSQLServer `
  -AuthType SqlAuthentication `
  -TrustServerCertificate:$true

O próximo exemplo mostra a criação de Informações de Conexão para uma Instância Gerenciada SQL do Azure chamada 'targetmanagedinstance':

$targetResourceId = (Get-AzSqlInstance -Name "targetmanagedinstance").Id
$targetConnInfo = New-AzDmsConnInfo -ServerType SQLMI -MiResourceId $targetResourceId

Fornecer bancos de dados para o projeto de migração

Crie uma lista de objetos AzDataMigrationDatabaseInfo que especifica os bancos de dados como parte do projeto do Serviço de Migração de Banco de Dados do Azure, que podem ser fornecidos como parâmetro para a criação do projeto. Você pode usar o cmdlet New-AzDataMigrationDatabaseInfo para criar AzDataMigrationDatabaseInfo.

O exemplo a seguir cria o projeto AzDataMigrationDatabaseInfo para o banco de dados AdventureWorks2016 e adiciona-o à lista a ser fornecida como parâmetro para a criação do projeto.

$dbInfo1 = New-AzDataMigrationDatabaseInfo -SourceDatabaseName AdventureWorks
$dbList = @($dbInfo1)

Criar um objeto de projeto

Por fim, crie um projeto do Serviço de Migração de Banco de Dados do Azure chamado MyDMSProject localizado no Leste dos EUA usando New-AzDataMigrationProject e adicione as conexões de origem e destino criadas anteriormente e a lista de bancos de dados a serem migrados.

$project = New-AzDataMigrationProject -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName MyDMSProject `
  -Location EastUS `
  -SourceType SQL `
  -TargetType SQLMI `
  -SourceConnection $sourceConnInfo `
  -TargetConnection $targetConnInfo `
  -DatabaseInfo $dbList

Criar e iniciar uma tarefa de migração

Em seguida, crie e inicie uma tarefa do Serviço de Migração de Banco de Dados do Azure. Como pré-requisito, essa tarefa requer informações de credenciais da conexão para a origem e o destino, e a lista de tabelas de banco de dados a serem migrados, além das informações já fornecidas com o projeto criado.

Criar parâmetros de credenciais para a origem e o destino

Crie credenciais de segurança da conexão como o objeto PSCredential.

O exemplo a seguir mostra a criação de objetos PSCredential para fornecer para as conexões de origem e destino fornecendo senhas como variáveis de cadeia de caracteres $sourcePassword e $ targetPassword.

$secpasswd = ConvertTo-SecureString -String $sourcePassword -AsPlainText -Force
$sourceCred = New-Object System.Management.Automation.PSCredential ($sourceUserName, $secpasswd)
$secpasswd = ConvertTo-SecureString -String $targetPassword -AsPlainText -Force
$targetCred = New-Object System.Management.Automation.PSCredential ($targetUserName, $secpasswd)

Crie um objeto FileShare de backup

Agora, crie um objeto FileShare que representa o compartilhamento de rede SMB local para o qual o Serviço de Migração de Banco de Dados do Azure possa levar os backups do banco de dados de origem usando o cmdlet New-AzDmsFileShare.

$backupPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$backupCred = New-Object System.Management.Automation.PSCredential ($backupUserName, $backupPassword)

$backupFileSharePath="\\10.0.0.76\SharedBackup"
$backupFileShare = New-AzDmsFileShare -Path $backupFileSharePath -Credential $backupCred

Criar objeto de banco de dados selecionado

A próxima etapa é selecionar os banco de dados de origem e de destino usando o cmdlet New-AzDmsSelectedDB.

O exemplo a seguir é para migrar um único banco de dados do SQL Server para uma Instância Gerenciada SQL do Azure:

$selectedDbs = @()
$selectedDbs += New-AzDmsSelectedDB -MigrateSqlServerSqlDbMi `
  -Name AdventureWorks2016 `
  -TargetDatabaseName AdventureWorks2016 `
  -BackupFileShare $backupFileShare `

Se uma instância inteira do SQL Server precisar de um lift-and-shift para uma Instância Gerenciada SQL do Azure, um loop para obter todos os bancos de dados da origem será fornecido abaixo. No exemplo a seguir, para $Server, $SourceUserName e $SourcePassword, forneça os detalhes do seu SQL Server de origem.

$Query = "(select name as Database_Name from master.sys.databases where Database_id>4)";
$Databases= (Invoke-Sqlcmd -ServerInstance "$Server" -Username $SourceUserName
-Password $SourcePassword -database master -Query $Query)
$selectedDbs=@()
foreach($DataBase in $Databases.Database_Name)
    {
      $SourceDB=$DataBase
      $TargetDB=$DataBase

$selectedDbs += New-AzureRmDmsSelectedDB -MigrateSqlServerSqlDbMi `
                                              -Name $SourceDB `
                                              -TargetDatabaseName $TargetDB `
                                              -BackupFileShare $backupFileShare
      }

URI de SAS para Contêiner do Armazenamento do Microsoft Azure

Crie uma variável contendo o URI de SAS que fornece ao Serviço de Migração de Banco de Dados do Azure o acesso ao contêiner da conta de armazenamento para o qual o serviço faz upload dos arquivos de backup.

$blobSasUri="https://mystorage.blob.core.windows.net/test?st=2018-07-13T18%3A10%3A33Z&se=2019-07-14T18%3A10%3A00Z&sp=rwdl&sv=2018-03-28&sr=c&sig=qKlSA512EVtest3xYjvUg139tYSDrasbftY%3D"

Observação

O Serviço de Migração de Banco de Dados do Azure não dá suporte a Token SAS de nível de conta. Você deve usar um URI de SAS para o contêiner da conta de armazenamento. Saiba como obter o URI SAS do contêiner de blobs.

Requisitos adicionais de configuração

Há alguns requisitos adicionais que você precisa verificar:

  • Selecionar logons. Crie uma lista de logons a serem migrados, conforme mostrado no exemplo a seguir:

    $selectedLogins = @("user1", "user2")
    

    Importante

    Atualmente, o Serviço de Migração de Banco de Dados do Azure é compatível apenas com a migração de logons SQL.

  • Selecionar trabalhos do agente. Crie uma lista de trabalhos do agente a serem migradas, conforme mostrado no exemplo a seguir:

    $selectedAgentJobs = @("agentJob1", "agentJob2")
    

    Importante

    Atualmente, o Serviço de Migração de Banco de Dados do Azure dá suporte apenas a trabalhos com etapas de trabalho do subsistema T-SQL.

Criar e iniciar a tarefa de migração

Use o cmdlet New-AzDataMigrationTask para criar e iniciar uma tarefa de migração.

Especificar parâmetros

O cmdlet New-AzDataMigrationTask espera os seguintes parâmetros:

  • TaskType. O tipo de tarefa de migração a ser criada para o SQL Server para o tipo de migração da Instância Gerenciada de SQL do Azure MigrateSqlServerSqlDbMi é esperado.
  • Nome do Grupo de Recursos. Nome do grupo de recursos do Azure no qual a tarefa será criada.
  • ServiceName. Instância do Serviço de Migração de Banco de Dados do Azure na qual a tarefa será criada.
  • ProjectName. Nome do projeto do Serviço de Migração de Banco de Dados do Azure no qual criar a tarefa.
  • TaskName. Nome da tarefa a ser criada.
  • SourceConnection. Objeto AzDmsConnInfo que representa a conexão de origem do SQL Server.
  • TargetConnection. Objeto AzRmDmsConnInfo que representa a conexão de Instância Gerenciada de SQL do Azure de destino.
  • SourceCred. Objeto PSCredential para se conectar ao servidor de origem.
  • TargetCred. Objeto PSCredential para se conectar ao servidor de destino.
  • SelectedDatabase. Objeto AzDataMigrationSelectedDB que representa o mapeamento do banco de dados de origem e de destino.
  • BackupFileShare. Objeto FileShare que representa o compartilhamento de rede local para o qual o Serviço de Migração de Banco de Dados do Azure pode fazer backups de banco de dados de origem.
  • BackupBlobSasUri. O URI de SAS que fornece ao Serviço de Migração de Banco de Dados do Azure acesso ao contêiner da conta de armazenamento para o qual o serviço faz upload dos arquivos de backup. Saiba como obter o URI SAS do contêiner de blobs.
  • SelectedLogins. Lista de logons selecionados para migrar.
  • SelectedAgentJobs. Lista de trabalhos do agente selecionados para migrar.
  • SelectedLogins. Lista de logons selecionados para migrar.
  • SelectedAgentJobs. Lista de trabalhos do agente selecionados para migrar.

Criar e iniciar uma tarefa de migração

O exemplo a seguir mostra a criação e inicialização de uma tarefa de migração chamada myDMSTask:

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDbMi `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `
  -BackupFileShare $backupFileShare `
  -BackupBlobSasUri $blobSasUri `
  -SelectedLogins $selectedLogins `
  -SelectedAgentJobs $selectedJobs `

Monitorar a migração

Para monitorar a migração, execute as tarefas a seguir.

  1. Consolide todos os detalhes de migração em uma variável com nome de $CheckTask.

    Para combinar detalhes de migração, como propriedades, estado e informações de banco de dados associadas à migração, use o seguinte trecho de código:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Use a variável $CheckTask para obter o estado atual da tarefa de migração.

    Para usar a variável $CheckTask para obter o estado atual da tarefa de migração, você pode monitorar a tarefa de migração em execução consultando a propriedade State dela, conforme mostrado no exemplo a seguir:

    if (($CheckTask.ProjectTask.Properties.State -eq "Running") -or ($CheckTask.ProjectTask.Properties.State -eq "Queued"))
    {
      Write-Host "migration task running"
    }
    else if($CheckTask.ProjectTask.Properties.State -eq "Succeeded")
    {
      Write-Host "Migration task is completed Successfully"
    }
    else if($CheckTask.ProjectTask.Properties.State -eq "Failed" -or $CheckTask.ProjectTask.Properties.State -eq "FailedInputValidation" -or $CheckTask.ProjectTask.Properties.State -eq "Faulted")
    {
      Write-Host "Migration Task Failed"
    }
    

Excluir uma instância do Serviço de Migração de Banco de Dados do Azure

Quando a migração é concluída, você pode excluir a instância do Serviço de Migração de Banco de Dados do Azure:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Próximas etapas

Saiba mais sobre o Serviço de Migração de Banco de Dados do Azure no artigo O que é o Serviço de Migração de Banco de Dados do Azure?.

Para obter informações sobre cenários de migração adicionais (pares de origem/destino), consulte o Guia de migração de banco de dados da Microsoft.