Eseguire la migrazione di SQL Server a Istanza gestita di SQL offline con PowerShell e Servizio Migrazione del database di Azure

In questo articolo si esegue la migrazione offline del database Adventureworks2016 ripristinato in un'istanza locale di SQL Server 2005 o versione successiva a un Istanza gestita di SQL SQL di Azure usando Microsoft Azure PowerShell. È possibile eseguire la migrazione di database da un'istanza di SQL Server a un Istanza gestita di SQL usando il Az.DataMigration modulo in Microsoft Azure PowerShell.

In questo articolo vengono illustrate le operazioni seguenti:

  • Crea un gruppo di risorse.
  • Creare un'istanza del servizio Migrazione del database di Azure.
  • Creare un progetto di migrazione in un'istanza di Servizio Migrazione del database di Azure.
  • Eseguire la migrazione offline.

Suggerimento

In Servizio Migrazione del database di Azure è possibile eseguire la migrazione dei database offline o mentre sono online. In una migrazione offline , il tempo di inattività dell'applicazione inizia all'avvio della migrazione. Per limitare il tempo di inattività al tempo necessario per passare al nuovo ambiente dopo la migrazione, usare una migrazione online . È consigliabile testare una migrazione offline per determinare se il tempo di inattività è accettabile. Se il tempo di inattività previsto non è accettabile, eseguire una migrazione online.

Questo articolo illustra i passaggi per una migrazione offline, ma è anche possibile eseguire la migrazione online.

Prerequisiti

Per completare questi passaggi è necessario disporre di:

  • SQL Server 2016 o versione successiva (qualsiasi edizione).
  • Copia locale del database AdventureWorks2016 , disponibile per il download qui.
  • Per abilitare il protocollo TCP/IP che è disabilitato per impostazione predefinita con l'installazione di SQL Server Express. Abilitare il protocollo TCP/IP seguendo l'articolo Abilitare o disabilitare un protocollo di rete server.
  • Per configurare Windows Firewall per l'accesso al motore di database.
  • Una sottoscrizione di Azure. Se non se ne dispone, creare un account gratuito prima di iniziare.
  • Un Istanza gestita di SQL. È possibile creare un Istanza gestita di SQL seguendo i dettagli nell'articolo Creare un Istanza gestita di SQL di Azure.
  • Per scaricare e installare Data Migration Assistant v3.3 o versione successiva.
  • Un Rete virtuale di Microsoft Azure creato usando il modello di distribuzione Azure Resource Manager, che fornisce la Servizio Migrazione del database di Azure con connettività da sito a sito ai server di origine locali usando ExpressRoute o VPN.
  • Valutazione completa del database locale e della migrazione dello schema tramite Data Migration Assistant, come descritto nell'articolo Esecuzione di una valutazione della migrazione di SQL Server.
  • Per scaricare e installare il Az.DataMigration modulo (versione 0.7.2 o successiva) da PowerShell Gallery usando il cmdlet Di PowerShell Install-Module.
  • Per assicurarsi che le credenziali usate per connettersi all'istanza di SQL Server di origine dispongano dell'autorizzazione CONTROL edizione Standard RVER.
  • Per assicurarsi che le credenziali usate per connettersi al Istanza gestita di SQL di destinazione dispongano dell'autorizzazione CONTROL DATABA edizione Standard per i database di Istanza gestita di SQL di destinazione.

Accedere alla sottoscrizione di Microsoft Azure

Accedere alla sottoscrizione di Azure usando PowerShell. Per altre informazioni, vedere l'articolo Accedere con Azure PowerShell.

Creare un gruppo di risorse

Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

Creare un gruppo di risorse usando il comando New-AzResourceGroup.

L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nell'area Stati Uniti orientali.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Creare un'istanza del Servizio Migrazione del database di Azure

È possibile creare una nuova istanza del Servizio Migrazione del database di Azure tramite il cmdlet New-AzDataMigrationService. Questo cmdlet si aspetta i parametri obbligatori seguenti:

  • Nome del gruppo di risorse di Azure. È possibile usare il New-AzResourceGroup comando per creare un gruppo di risorse di Azure come illustrato in precedenza e specificarne il nome come parametro.
  • Nome del servizio. Stringa che corrisponde al nome univoco del servizio desiderato per Servizio Migrazione del database di Azure.
  • Posizione. Specifica il percorso del servizio. Specificare una posizione del data center di Azure, ad esempio Stati Uniti occidentali o Asia sud-orientale.
  • Sku. Questo parametro corrisponde al nome Sku DMS. I nomi sku attualmente supportati sono Basic_1vCore, Basic_2vCores GeneralPurpose_4vCores.
  • Identificatore della subnet virtuale. È possibile usare il cmdlet New-AzVirtualNetworkSubnetConfig per creare una subnet.

L'esempio seguente crea un servizio denominato MyDMS nel gruppo di risorse MyDMSResourceGroup che si trova nell'area Stati Uniti orientali usando una rete virtuale denominata MyVNET e una subnet denominata 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`

Creare un progetto di migrazione

Dopo aver creato un'istanza del Servizio Migrazione del database di Azure, creare un progetto di migrazione. Un progetto Servizio Migrazione del database di Azure richiede informazioni di connessione per entrambe le istanze di origine e di destinazione, nonché un elenco dei database che si desidera migrare come parte del progetto.

Creare un oggetto informazioni di connessione del database per le connessioni di origine e di destinazione

È possibile creare un oggetto Database Connessione ion Info usando il New-AzDmsConnInfo cmdlet , che prevede i parametri seguenti:

  • ServerType. Il tipo di connessione al database richiesta, ad esempio SQL, Oracle o MySQL. Usare SQL per SQL Server e SQL Azure.
  • DataSource. Nome o IP di un'istanza di SQL Server o database SQL di Azure istanza.
  • AuthType. Il tipo di autenticazione per la connessione, che può essere SqlAuthentication o WindowsAuthentication.
  • TrustServerCertificate. Questo parametro imposta un valore che indica se il canale è crittografato durante il bypass della catena di certificati per convalidare l'attendibilità. Il valore può essere $true o $false.

L'esempio seguente crea un oggetto informazioni di Connessione ion per un'istanza di SQL Server di origine denominata MySourceSQLServer usando l'autenticazione sql:

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

L'esempio seguente mostra la creazione di Connessione ion Info per un Istanza gestita di SQL di Azure denominato 'targetmanagedinstance':

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

Fornire i database per il progetto di migrazione

Creare un elenco di AzDataMigrationDatabaseInfo oggetti che specifica i database come parte del progetto Servizio Migrazione del database di Azure, che può essere fornito come parametro per la creazione del progetto. È possibile usare il cmdlet New-AzDataMigrationDatabaseInfo per creare AzDataMigrationDatabaseInfo.

L'esempio seguente crea il AzDataMigrationDatabaseInfo progetto per il database AdventureWorks2016 e lo aggiunge all'elenco da specificare come parametro per la creazione del progetto.

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

Creare un oggetto progetto

Infine, è possibile creare un progetto di Servizio Migrazione del database di Azure denominato MyDMSProject che si trova negli Stati Uniti orientali usando New-AzDataMigrationProject e aggiungere le connessioni di origine e di destinazione create in precedenza e l'elenco dei database di cui eseguire la migrazione.

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

Creare e avviare un'attività di migrazione

Creare e avviare quindi un'attività Servizio Migrazione del database di Azure. Questa attività richiede informazioni sulle credenziali di connessione sia per l'origine che per la destinazione, nonché per l'elenco di tabelle di database di cui eseguire la migrazione e le informazioni già fornite con il progetto creato come prerequisito.

Creare i parametri delle credenziali per l'origine e la destinazione

Creare le credenziali di sicurezza della connessione come oggetto PSCredential .

Nell'esempio seguente viene illustrata la creazione di oggetti PSCredential per le connessioni di origine e di destinazione, fornendo password come variabili stringa $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)

Creare un oggetto FileShare di backup

Creare ora un oggetto FileShare che rappresenta la condivisione di rete SMB locale a cui Servizio Migrazione del database di Azure può eseguire i backup del database di origine usando il New-AzDmsFileShare cmdlet .

$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

Creare l'oggetto di database selezionato

Il passaggio successivo consiste nel selezionare i database di origine e di destinazione usando il New-AzDmsSelectedDB cmdlet .

Nell'esempio seguente viene eseguita la migrazione di un database singolo da SQL Server a un Istanza gestita di SQL di Azure:

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

Se un'intera istanza di SQL Server richiede un trasferimento in modalità lift-and-shift in un Istanza gestita di SQL di Azure, di seguito viene fornito un ciclo per accettare tutti i database dall'origine. Nell'esempio seguente, per $Server, $SourceUserName e $SourcePassword, specificare i dettagli di SQL Server di origine.

$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 di firma di accesso condiviso per il contenitore di Archiviazione di Azure

Creare variabili che contengono l'URI di firma di accesso condiviso che consente al Servizio Migrazione del database di Azure di accedere al contenitore dell'account di archiviazione in cui il servizio caricherà i file di backup per la migrazione.

$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"

Nota

Servizio Migrazione del database di Azure non supporta l'uso di un token di firma di accesso condiviso a livello di account. È necessario usare un URI di firma di accesso condiviso per il contenitore dell'account di archiviazione. Informazioni su come ottenere l'URI di firma di accesso condiviso per un contenitore BLOB.

Requisiti di configurazione aggiuntivi

È necessario soddisfare alcuni requisiti aggiuntivi:

  • Selezionare account di accesso. Creare un elenco di account di accesso di cui eseguire la migrazione, come illustrato nell'esempio seguente:

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

    Importante

    Attualmente, Servizio Migrazione del database di Azure supporta solo la migrazione degli account di accesso SQL.

  • Selezionare Processi agente. Creare un elenco di processi dell'agente di cui eseguire la migrazione, come illustrato nell'esempio seguente:

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

    Importante

    Attualmente, Servizio Migrazione del database di Azure supporta solo i processi con i passaggi del processo del sottosistema T-SQL.

Creare e avviare l'attività di migrazione

Usare il cmdlet New-AzDataMigrationTask per creare e avviare un'attività di migrazione.

Specificare i parametri

Il New-AzDataMigrationTask cmdlet prevede i parametri seguenti:

  • TaskType. È previsto il tipo di attività di migrazione da creare per SQL Server per Istanza gestita di SQL di Azure tipo di migrazione MigrateSqlServerSqlDbMi.
  • Nome del gruppo di risorse. Nome del gruppo di risorse di Azure in cui creare l'attività.
  • ServiceName. Istanza del Servizio Migrazione del database di Azure in cui creare l'attività.
  • ProjectName. Nome del progetto di migrazione del Servizio Migrazione del database di Azure in cui creare l'attività.
  • TaskName. Nome dell'attività da creare.
  • SourceConnection. Oggetto AzDmsConnInfo che rappresenta la connessione sql server di origine.
  • TargetConnection. Oggetto AzDmsConnInfo che rappresenta la connessione Istanza gestita di SQL di Azure di destinazione.
  • SourceCred. Oggetto PSCredential per la connessione al server di origine.
  • TargetCred. Oggetto PSCredential per la connessione al server di destinazione.
  • SelectedDatabase. Oggetto AzDataMigrationSelectedDB che rappresenta il mapping del database di origine e di destinazione.
  • BackupFileShare. L'oggetto di condivisione di rete che rappresenta la condivisione di rete locale dove il Servizio Migrazione del database di Azure può salvare i backup del database di origine.
  • BackupBlobSasUri. L'URI di firma di accesso condiviso che consente al Servizio Migrazione del database di Azure di accedere al contenitore dell'account di archiviazione in cui il servizio caricherà i file di backup. Informazioni su come ottenere l'URI di firma di accesso condiviso per un contenitore BLOB.
  • SelectedLogins. L'elenco di account di accesso selezionato per eseguire la migrazione.
  • SelectedAgentJobs. L'elenco di processi dell'agente selezionati per eseguire la migrazione.
  • SelectedLogins. L'elenco di account di accesso selezionato per eseguire la migrazione.
  • SelectedAgentJobs. L'elenco di processi dell'agente selezionati per eseguire la migrazione.

Creare e avviare un'attività di migrazione

L'esempio seguente crea e avvia un'attività di migrazione offline denominata 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 `

Monitorare la migrazione

Per monitorare la migrazione, eseguire le attività seguenti.

  1. Consolidare tutti i dettagli della migrazione in una variabile denominata $CheckTask.

    Per combinare i dettagli della migrazione, ad esempio proprietà, stato e informazioni sul database associate alla migrazione, usare il frammento di codice seguente:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Usare la $CheckTask variabile per ottenere lo stato corrente dell'attività di migrazione.

    Per usare la $CheckTask variabile per ottenere lo stato corrente dell'attività di migrazione, è possibile monitorare l'attività di migrazione in esecuzione eseguendo una query sulla proprietà state dell'attività, come illustrato nell'esempio seguente:

    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"
    }
    

Eliminare l'istanza di Servizio Migrazione del database di Azure

Al termine della migrazione, è possibile eliminare l'istanza di Servizio Migrazione del database di Azure:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Passaggi successivi

Per altre informazioni sulle Servizio Migrazione del database di Azure, vedere l'articolo Che cos'è il Servizio Migrazione del database di Azure?.

Per informazioni su altri scenari di migrazione (coppie di origine/destinazione), vedere la Guida alla migrazione del database Microsoft.