Eseguire la migrazione di SQL Server a Istanza gestita di SQL online con PowerShell e Servizio Migrazione del database di Azure
In questo articolo si esegue la migrazione online 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 online.
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 online, ma è anche possibile eseguire la migrazione offline.
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 A.
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.
Importante
Per le migrazioni online, è necessario aver già configurato le credenziali di Microsoft Entra. Per altre informazioni, vedere l'articolo Usare il portale per creare un'applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse.
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
È 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. Definire stringa di connessione di connettività di origine e di destinazione.
Lo script seguente definisce i dettagli di connessione di SQL Server di origine:
# Source connection properties
$sourceDataSource = "<mysqlserver.domain.com/privateIP of source SQL>"
$sourceUserName = "domain\user"
$sourcePassword = "mypassword"
Lo script seguente definisce i dettagli della connessione Istanza gestita di SQL di destinazione:
# Target MI connection properties
$targetMIResourceId = "/subscriptions/<subid>/resourceGroups/<rg>/providers/Microsoft.Sql/managedInstances/<myMI>"
$targetUserName = "<user>"
$targetPassword = "<password>"
Definire il mapping del database di origine e di destinazione
Fornire i database di cui eseguire la migrazione in questo progetto di migrazione
Lo script seguente esegue il mapping del database di origine al nuovo database nel Istanza gestita di SQL di destinazione con il nome specificato.
# Selected databases (Source database name to target database name mapping)
$selectedDatabasesMap = New-Object System.Collections.Generic.Dictionary"[String,String]"
$selectedDatabasesMap.Add("<source database name>", "<target database name> ")
Per più database, aggiungere l'elenco dei database allo script precedente usando il formato seguente:
$selectedDatabasesMap = New-Object System.Collections.Generic.Dictionary"[String,String]"
$selectedDatabasesMap.Add("<source database name1>", "<target database name1> ")
$selectedDatabasesMap.Add("<source database name2>", "<target database name2> ")
Creare il progetto del Servizio Migrazione del database di Azure
È possibile creare un progetto Servizio Migrazione del database di Azure all'interno dell'istanza del Servizio Migrazione del database.
# Create DMS project
$project = New-AzDataMigrationProject `
-ResourceGroupName $dmsResourceGroupName `
-ServiceName $dmsServiceName `
-ProjectName $dmsProjectName `
-Location $dmsLocation `
-SourceType SQL `
-TargetType SQLMI `
# Create selected databases object
$selectedDatabases = @();
foreach ($sourceDbName in $selectedDatabasesMap.Keys){
$targetDbName = $($selectedDatabasesMap[$sourceDbName])
$selectedDatabases += New-AzDmsSelectedDB -MigrateSqlServerSqlDbMi `
-Name $sourceDbName `
-TargetDatabaseName $targetDbName `
-BackupFileShare $backupFileShare `
}
Creare un oggetto FileShare di backup
Creare ora un oggetto FileShare che rappresenta la condivisione di rete SMB locale in cui Servizio Migrazione del database di Azure può eseguire i backup del database di origine usando il cmdlet New-AzDmsFileShare.
# SMB Backup share properties
$smbBackupSharePath = "\\shareserver.domain.com\mybackup"
$smbBackupShareUserName = "domain\user"
$smbBackupSharePassword = "<password>"
# Create backup file share object
$smbBackupSharePasswordSecure = ConvertTo-SecureString -String $smbBackupSharePassword -AsPlainText -Force
$smbBackupShareCredentials = New-Object System.Management.Automation.PSCredential ($smbBackupShareUserName, $smbBackupSharePasswordSecure)
$backupFileShare = New-AzDmsFileShare -Path $smbBackupSharePath -Credential $smbBackupShareCredentials
Definire il Archiviazione di Azure
Selezionare Archiviazione di Azure Contenitore da usare per la migrazione:
# Storage resource id
$storageAccountResourceId = "/subscriptions/<subscriptionname>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<mystorage>"
Configurare l'app Microsoft Entra
Specificare i dettagli necessari per Microsoft Entra ID per una migrazione online Istanza gestita di SQL:
# AAD properties
$AADAppId = "<appid-guid>"
$AADAppKey = "<app-key>"
# Create AAD object
$AADAppKeySecure = ConvertTo-SecureString $AADAppKey -AsPlainText -Force
$AADApp = New-AzDmsAadApp -ApplicationId $AADAppId -AppKey $AADAppKeySecure
Creare e avviare un'attività di migrazione
Creare e avviare quindi un'attività Servizio Migrazione del database di Azure. Chiamare l'origine e la destinazione usando le variabili ed elencare le tabelle di database di cui eseguire la migrazione:
# Managed Instance online migration properties
$dmsTaskName = "testmigration1"
# Create source connection info
$sourceConnInfo = New-AzDmsConnInfo -ServerType SQL `
-DataSource $sourceDataSource `
-AuthType WindowsAuthentication `
-TrustServerCertificate:$true
$sourcePasswordSecure = ConvertTo-SecureString -String $sourcePassword -AsPlainText -Force
$sourceCredentials = New-Object System.Management.Automation.PSCredential ($sourceUserName, $sourcePasswordSecure)
# Create target connection info
$targetConnInfo = New-AzDmsConnInfo -ServerType SQLMI `
-MiResourceId $targetMIResourceId
$targetPasswordSecure = ConvertTo-SecureString -String $targetPassword -AsPlainText -Force
$targetCredentials = New-Object System.Management.Automation.PSCredential ($targetUserName, $targetPasswordSecure)
L'esempio seguente crea e avvia un'attività di migrazione online:
# Create DMS migration task
$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDbMiSync `
-ResourceGroupName $dmsResourceGroupName `
-ServiceName $dmsServiceName `
-ProjectName $dmsProjectName `
-TaskName $dmsTaskName `
-SourceConnection $sourceConnInfo `
-SourceCred $sourceCredentials `
-TargetConnection $targetConnInfo `
-TargetCred $targetCredentials `
-SelectedDatabase $selectedDatabases `
-BackupFileShare $backupFileShare `
-AzureActiveDirectoryApp $AADApp `
-StorageResourceId $storageAccountResourceId
Per altre informazioni, vedere New-AzDataMigrationTask.
Monitorare la migrazione
Per monitorare la migrazione, eseguire le attività seguenti.
Controllare lo stato dell'attività
# Get migration task status details
$migTask = Get-AzDataMigrationTask `
-ResourceGroupName $dmsResourceGroupName `
-ServiceName $dmsServiceName `
-ProjectName $dmsProjectName `
-Name $dmsTaskName `
-ResultType DatabaseLevelOutput `
-Expand
# Task state will be either of 'Queued', 'Running', 'Succeeded', 'Failed', 'FailedInputValidation' or 'Faulted'
$taskState = $migTask.ProjectTask.Properties.State
# Display task state
$taskState | Format-List
Usare quanto segue per ottenere l'elenco degli errori:
# Get task errors
$taskErrors = $migTask.ProjectTask.Properties.Errors
# Display task errors
foreach($taskError in $taskErrors){
$taskError | Format-List
}
# Get database level details
$databaseLevelOutputs = $migTask.ProjectTask.Properties.Output
# Display database level details
foreach($databaseLevelOutput in $databaseLevelOutputs){
# This is the source database name.
$databaseName = $databaseLevelOutput.SourceDatabaseName;
Write-Host "=========="
Write-Host "Start migration details for database " $databaseName
# This is the status for that database - It will be either of:
# INITIAL, FULL_BACKUP_UPLOADING, FULL_BACKUP_UPLOADED, LOG_FILES_UPLOADING,
# CUTOVER_IN_PROGRESS, CUTOVER_INITIATED, CUTOVER_COMPLETED, COMPLETED, CANCELLED, FAILED
$databaseMigrationState = $databaseLevelOutput.MigrationState;
# Details about last restored backup. This contains file names, LSN, backup date, etc
$databaseLastRestoredBackup = $databaseLevelOutput.LastRestoredBackupSetInfo
# Details about last restored backup. This contains file names, LSN, backup date, etc
$databaseLastRestoredBackup = $databaseLevelOutput.LastRestoredBackupSetInfo
# Details about last Currently active/most recent backups. This contains file names, LSN, backup date, etc
$databaseActiveBackpusets = $databaseLevelOutput.ActiveBackupSets
# Display info
$databaseLevelOutput | Format-List
Write-Host "Currently active/most recent backupset details:"
$databaseActiveBackpusets | select BackupStartDate, BackupFinishedDate, FirstLsn, LastLsn -ExpandProperty ListOfBackupFiles | Format-List
Write-Host "Last restored backupset details:"
$databaseLastRestoredBackupFiles | Format-List
Write-Host "End migration details for database " $databaseName
Write-Host "=========="
}
Esecuzione del cutover
Con una migrazione online, viene eseguito un backup completo e il ripristino dei database e quindi si procede con il ripristino dei log delle transazioni archiviati in BackupFileShare.
Quando il database in un Istanza gestita di SQL di Azure viene aggiornato con i dati più recenti ed è sincronizzato con il database di origine, è possibile eseguire un cutover.
L'esempio seguente completerà il cutover\migration. Gli utenti richiamano questo comando a propria discrezione.
$command = Invoke-AzDmsCommand -CommandType CompleteSqlMiSync `
-ResourceGroupName myResourceGroup `
-ServiceName $service.Name `
-ProjectName $project.Name `
-TaskName myDMSTask `
-DatabaseName "Source DB Name"
Eliminazione dell'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
Risorse aggiuntive
Per informazioni su altri scenari di migrazione (coppie di origine/destinazione), vedere la Guida alla migrazione del database Microsoft.
Passaggi successivi
Per altre informazioni sulle Servizio Migrazione del database di Azure, vedere l'articolo Che cos'è il Servizio Migrazione del database di Azure?.