Sdílet prostřednictvím


Online migrace SQL Serveru do služby SQL Managed Instance pomocí služby PowerShell a Azure Database Migration Service

V tomto článku online migrujete databázi Adventureworks2016 obnovenou do místní instance SQL Serveru 2005 nebo novější do spravované instance Azure SQL Pomocí Microsoft Azure PowerShellu. Databáze z instance SQL Serveru můžete migrovat do spravované instance SQL pomocí Az.DataMigration modulu v Microsoft Azure PowerShellu.

V tomto článku získáte informace o těchto tématech:

  • Vytvořte skupinu prostředků.
  • Vytvořte instanci služby Azure Database Migration Service.
  • Vytvořte projekt migrace v instanci služby Azure Database Migration Service.
  • Spusťte migraci online.

Tip

Ve službě Azure Database Migration Service můžete migrovat databáze offline nebo během online režimu. V offline migraci se výpadek aplikace spustí při spuštění migrace. Pokud chcete omezit prostoje na dobu potřebnou k přerušení provozu do nového prostředí po migraci, použijte online migraci. Doporučujeme otestovat offline migraci, abyste zjistili, jestli je výpadek přijatelný. Pokud očekávaný výpadek není přijatelný, proveďte online migraci.

Tento článek obsahuje postup online migrace, ale je také možné migrovat offline.

Požadavky

K provedení těchto kroků potřebujete:

  • SQL Server 2016 nebo novější (libovolná edice)

  • Místní kopie databáze AdventureWorks2016 , která je k dispozici ke stažení zde.

  • Pokud chcete povolit protokol TCP/IP, který je ve výchozím nastavení zakázaný při instalaci SQL Serveru Express. Podle článku Povolení nebo zakázání síťového protokolu serveru povolte protokol TCP/IP.

  • Konfigurace brány Windows Firewall pro přístup k databázovému stroji

  • Předplatné Azure. Pokud ho nemáte, vytvořte si bezplatný účet před tím, než začnete.

  • Spravovaná instance SQL. Spravovanou instanci SQL můžete vytvořit podle podrobností v článku Vytvoření spravované instance ASQL.

  • Stažení a instalace data Pomocník s migrací verze 3.3 nebo novější

  • Virtuální síť Microsoft Azure vytvořená pomocí modelu nasazení Azure Resource Manager, který poskytuje službě Azure Database Migration Service připojení typu site-to-site k místním zdrojovým serverům pomocí ExpressRoute nebo VPN.

  • Dokončené posouzení místní databáze a migrace schématu pomocí služby Data Pomocník s migrací, jak je popsáno v článku Provedení posouzení migrace SQL Serveru.

  • Pokud chcete modul stáhnout a nainstalovat Az.DataMigration (verze 0.7.2 nebo novější) z Galerie prostředí PowerShell pomocí rutiny PowerShellu install-Module.

  • Chcete-li zajistit, aby přihlašovací údaje použité pro připojení ke zdrojové instanci SQL Serveru měly oprávnění CONTROL SERVER .

  • Aby se zajistilo, že přihlašovací údaje používané pro připojení k cílové spravované instanci SQL mají oprávnění CONTROL DATABASE k cílovým databázím služby SQL Managed Instance.

    Důležité

    Pro online migrace už musíte mít nastavené přihlašovací údaje Microsoft Entra. Další informace najdete v článku Použití portálu k vytvoření aplikace Microsoft Entra a instančního objektu, který má přístup k prostředkům.

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logický kontejner, ve kterém se nasazují a spravují prostředky Azure.

Pomocí příkazu vytvořte skupinu New-AzResourceGroup prostředků.

Následující příklad vytvoří skupinu prostředků myResourceGroup v oblasti USA – východ.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Vytvoření instance DMS

Pomocí rutiny New-AzDataMigrationService můžete vytvořit novou instanci služby Azure Database Migration Service. Tato rutina očekává následující požadované parametry:

  • Název skupiny prostředků Azure Pomocí New-AzResourceGroup příkazu můžete vytvořit skupinu prostředků Azure, jak je znázorněno dříve, a zadat její název jako parametr.
  • Název služby. Řetězec, který odpovídá požadovanému jedinečnému názvu služby pro službu Azure Database Migration Service.
  • Umístění: Určuje umístění služby. Zadejte umístění datového centra Azure, například USA – západ nebo Jihovýchodní Asie.
  • Skladová položka. Tento parametr odpovídá názvu skladové položky DMS. Aktuálně podporované názvy skladových položek jsou Basic_1vCore, Basic_2vCores GeneralPurpose_4vCores.
  • Identifikátor virtuální podsítě. Pomocí této rutiny New-AzVirtualNetworkSubnetConfig můžete vytvořit podsíť.

Následující příklad vytvoří službu s názvem MyDMS ve skupině prostředků MyDMSResourceGroup umístěné v oblasti USA – východ pomocí virtuální sítě s názvem MyVNET a podsítě s názvem 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`

Vytvoření projektu migrace

Po vytvoření instance služby Azure Database Migration Service vytvořte projekt migrace. Projekt služby Azure Database Migration Service vyžaduje informace o připojení pro zdrojové i cílové instance a také seznam databází, které chcete migrovat jako součást projektu. Definujte zdrojová a cílová připojení připojovací řetězec.

Následující skript definuje podrobnosti o připojení ke zdrojovému SQL Serveru:

# Source connection properties
$sourceDataSource = "<mysqlserver.domain.com/privateIP of source SQL>"
$sourceUserName = "domain\user"
$sourcePassword = "mypassword"

Následující skript definuje podrobnosti o připojení cílové služby SQL Managed Instance:

# Target MI connection properties
$targetMIResourceId = "/subscriptions/<subid>/resourceGroups/<rg>/providers/Microsoft.Sql/managedInstances/<myMI>"
$targetUserName = "<user>"
$targetPassword = "<password>"

Definování mapování zdrojové a cílové databáze

Poskytnutí databází, které se mají migrovat v tomto projektu migrace

Následující skript mapuje zdrojovou databázi na příslušnou novou databázi v cílové spravované instanci SQL se zadaným názvem.

# 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> ")

Pro více databází přidejte seznam databází do výše uvedeného skriptu pomocí následujícího formátu:

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

Vytvoření projektu DMS

V instanci DMS můžete vytvořit projekt služby Azure Database Migration Service.

# 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 `
}

Vytvoření záložního objektu FileShare

Teď vytvořte objekt FileShare představující místní sdílenou složku sítě SMB, do které může služba Azure Database Migration Service zálohovat zdrojové databáze pomocí rutiny 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

Definování služby Azure Storage

Vyberte kontejner azure Storage, který se má použít k migraci:

# Storage resource id
$storageAccountResourceId = "/subscriptions/<subscriptionname>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<mystorage>"

Konfigurace aplikace Microsoft Entra

Zadejte požadované podrobnosti o ID Microsoft Entra pro online migraci služby SQL Managed Instance:

# AAD properties
$AADAppId = "<appid-guid>"
$AADAppKey = "<app-key>"

# Create AAD object
$AADAppKeySecure = ConvertTo-SecureString $AADAppKey -AsPlainText -Force
$AADApp = New-AzDmsAadApp -ApplicationId $AADAppId -AppKey $AADAppKeySecure

Vytvoření a spuštění úlohy migrace

Dále vytvořte a spusťte úlohu služby Azure Database Migration Service. Volání zdroje a cíle pomocí proměnných a výpis databázových tabulek, které se mají migrovat:

# 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)

Následující příklad vytvoří a spustí úlohu online migrace:

# 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

Další informace naleznete v tématu New-AzDataMigrationTask.

Monitorování migrace

Pokud chcete monitorovat migraci, proveďte následující úlohy.

Kontrola stavu úkolu

# 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

Seznam chyb získáte pomocí následujícího příkazu:-

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

Provedení přímé migrace

Při online migraci se provede úplná záloha a obnovení databází a pak pokračuje práce na obnovení transakčních protokolů uložených ve službě BackupFileShare.

Když se databáze ve službě Azure SQL Managed Instance aktualizuje s nejnovějšími daty a synchronizuje se se zdrojovou databází, můžete provést přímou migraci.

Následující příklad dokončí přímou\migraci. Uživatelé volají tento příkaz podle vlastního uvážení.

$command = Invoke-AzDmsCommand -CommandType CompleteSqlMiSync `
                               -ResourceGroupName myResourceGroup `
                               -ServiceName $service.Name `
                               -ProjectName $project.Name `
                               -TaskName myDMSTask `
                               -DatabaseName "Source DB Name"

Odstranění instance služby Azure Database Migration Service

Po dokončení migrace můžete instanci služby Azure Database Migration Service odstranit:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Další materiály

Informace o dalších scénářích migrace (zdrojových/cílových párů) najdete v průvodci migrací databází Microsoftu.

Další kroky

Další informace o službě Azure Database Migration Service najdete v článku Co je služba Azure Database Migration Service?