Offlinemigration von SQL Server zu Azure SQL Managed Instance mit PowerShell und Azure Database Migration Service

In diesem Artikel migrieren Sie die Datenbank Adventureworks2016, die in einer lokalen Instanz von SQL Server 2005 (oder höher) wiederhergestellt wurde, mithilfe von Microsoft Azure PowerShell offline zu einer Instanz in Azure SQL Managed Instance. Mithilfe des Moduls Az.DataMigration in Microsoft Azure PowerShell können Sie Datenbanken aus einer SQL Server-Instanz zu einer Instanz in Azure SQL Managed Instance migrieren.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

  • Erstellen Sie eine Ressourcengruppe.
  • Erstellen einer Instanz von Azure Database Migration Service
  • Erstellen eines Migrationsprojekts in einer Instanz von Azure Database Migration Service.
  • Führen Sie die Migration offline aus.

Tipp

In Azure Database Migration Service können Sie Ihre Datenbanken offline oder online migrieren. Bei einer Offlinemigration beginnt die Ausfallzeit der Anwendung mit dem Start der Migration. Um die Ausfallzeit auf die Zeit zu begrenzen, die für das Cutover zur neuen Umgebung nach der Migration erforderlich ist, führen Sie eine Onlinemigration durch. Wir empfehlen, dass Sie eine Offlinemigration testen, um zu bestimmen, ob die Ausfallzeit akzeptabel ist. Wenn die erwartete Ausfallzeit nicht akzeptabel ist, führen Sie eine Onlinemigration durch.

In diesem Artikel werden die Schritte für eine Offlinemigration beschrieben, es ist aber auch möglich, online zu migrieren.

Voraussetzungen

Zum Ausführen dieser Schritte benötigen Sie Folgendes:

  • SQL Server 2016 oder höher (beliebige Edition).
  • Eine lokale Kopie der AdventureWorks2016-Datenbank, die hier zum Download verfügbar ist.
  • Aktivieren Sie das TCP/IP-Protokoll, das in einer SQL Server Express-Installation standardmäßig deaktiviert ist. Aktivieren Sie das TCP/IP-Protokoll anhand des Artikels Aktivieren oder Deaktivieren eines Servernetzwerkprotokolls.
  • Konfigurieren Sie Ihre Windows-Firewall für Datenbank-Engine-Zugriff.
  • Ein Azure-Abonnement. Falls Sie kein Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Eine Instanz in Azure SQL Managed Instance. Sie können eine SQL-verwaltete Instanz erstellen, indem Sie die Details im Artikel Erstellen eines Azure SQL-verwaltete Instanz ausführen.
  • Laden Sie den Data Migration Assistant, Version 3.3 oder höher, herunter, und installieren Sie ihn.
  • Ein Microsoft Azure Virtual Network, das mit dem Azure Resource Manager-Bereitstellungsmodell erstellt wurde, das dem Azure Database Migration Service entweder über ExpressRoute oder über VPN Site-to-Site-Konnektivität für Ihre lokalen Quellserver bereitstellt.
  • Eine abgeschlossene Bewertung der lokalen Datenbank und Schemamigration mithilfe von Data Migration Assistant wie im Artikel Durchführen einer SQL Server-Migrationsbewertung beschrieben.
  • Laden Sie das Az.DataMigration-Modul (Version 0.7.2 oder höher) aus dem PowerShell-Katalog mit dem PowerShell-Cmdlet „Install-Module“ herunter und installieren Sie es.
  • Stellen Sie sicher, dass die für die Verbindung mit der SQL Server-Quellinstanz verwendeten Anmeldeinformationen über CONTROL SERVER-Berechtigungen verfügen.
  • Stellen Sie sicher, dass die für die Verbindung mit der Zielinstanz in Azure SQL Managed Instance verwendeten Anmeldeinformationen über die CONTROL DATABASE-Berechtigung für die Zieldatenbanken in Azure SQL Managed Instance verfügen.

Anmelden bei Ihrem Microsoft Azure-Abonnement

Melden Sie sich bei Ihrem Azure-Abonnement mithilfe der PowerShell an. Weitere Informationen finden Sie im Artikel Anmelden mit Azure PowerShell.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.

Erstellen Sie mit dem Befehl New-AzResourceGroup eine Ressourcengruppe.

Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup in der Region USA, Osten erstellt.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Erstellen einer Instanz von Azure Database Migration Service

Mit dem Cmdlet New-AzDataMigrationService können Sie eine neue Instanz von Azure Database Migration Service erstellen. Dieses Cmdlet erwartet die folgenden erforderlichen Parameter:

  • ResourceGroupName: Mit dem Befehl New-AzResourceGroup können Sie wie oben gezeigt eine Azure-Ressourcengruppe erstellen und deren Namen als Parameter bereitstellen.
  • ServiceName: Die Zeichenfolge, die dem gewünschten eindeutigen Dienstnamen für Azure Database Migration Service entspricht.
  • Standort. Gibt den Standort des Diensts an. Geben Sie einen Azure-Rechenzentrumsstandort an, z. B. „USA, Westen“ oder „Asien, Südosten“.
  • Sku: Dieser Parameter entspricht dem Sku-Namen des DMS. Derzeit unterstützte Sku-Namen sind Basic_1vCore, Basic_2vCores, GeneralPurpose_4vCores.
  • VirtualSubnetId: Sie können das Cmdlet New-AzVirtualNetworkSubnetConfig verwenden, um ein Subnetz zu erstellen.

Im folgenden Beispiel wird ein Dienst mit dem Namen MyDMS in der Ressourcengruppe MyDMSResourceGroup, die sich in der Region USA, Osten befindet, mit einem virtuellen Netzwerk namens MyVNET und einem Subnetz namens MySubnet erstellt.

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

Erstellen eines Migrationsprojekts

Nachdem Sie eine Instanz von Azure Database Migration Service erstellt haben, erstellen Sie ein Migrationsprojekt. Ein Azure Database Migration Service-Projekt erfordert Verbindungsinformationen sowohl für die Quell- als auch die Zielinstanz sowie eine Liste der Datenbanken, die Sie als Teil des Projekts migrieren möchten.

Erstellen eines Objekts mit Datenbankverbindungsinformationen für die Quell- und Zielverbindung

Mit dem Cmdlet New-AzDmsConnInfo, das die folgenden Parameter erwartet, können Sie ein Objekt mit Datenbankverbindungsinformationen erstellen:

  • ServerType: Der Typ der angeforderten Datenbankverbindung, z. B. „SQL“, „Oracle“ oder „MySQL“. Verwenden Sie „SQL“ für SQL Server und Azure SQL.
  • DataSource: Der Name oder die IP-Adresse einer SQL Server-Instanz oder einer Azure SQL-Datenbankinstanz.
  • AuthType: Der Authentifizierungstyp für die Verbindung. Dieser kann „SqlAuthentication“ oder „WindowsAuthentication“ sein.
  • TrustServerCertificate: Mit diesem Parameter wird ein Wert festgelegt, der angibt, ob der Kanal verschlüsselt wird, während das Durchlaufen der Zertifikatskette zum Überprüfen der Vertrauensstellung umgangen wird. Der Wert kann $true oder $false lauten.

Im folgenden Beispiel wird ein Objekt mit Verbindungsinformationen für eine SQL Server-Quellinstanz namens MySourceSQLServer mithilfe der SQL-Authentifizierung erstellt:

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

Das nächste Beispiel zeigt die Erstellung von Verbinden ion-Informationen für eine Azure SQL-verwaltete Instanz mit dem Namen "targetmanagedinstance":

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

Bereitstellen von Datenbanken für das Migrationsprojekt

Erstellen Sie eine Liste von AzDataMigrationDatabaseInfo-Objekten, in der Datenbanken als Teil des Azure Database Migration Service-Projekts angegeben sind, die als Parameter für die Erstellung des Projekts bereitgestellt werden können. Sie können das Cmdlet New-AzDataMigrationDatabaseInfo verwenden, um AzDataMigrationDatabaseInfo zu erstellen.

Im folgenden Beispiel wird das Projekt AzDataMigrationDatabaseInfo für die Datenbank AdventureWorks2016 erstellt und der Liste hinzugefügt, die als Parameter für die Projekterstellung bereitgestellt wird.

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

Erstellen eines Projektobjekts

Abschließend können Sie mit New-AzDataMigrationProject ein Azure Database Migration Service-Projekt mit Namen MyDMSProject erstellen, das sich in USA, Osten befindet, und die zuvor erstellte Quell- und Zielverbindung sowie die Liste der zu migrierenden Datenbanken hinzufügen.

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

Erstellen und Starten einer Migrationsaufgabe

Als Nächstes erstellen Sie eine Azure Database Migration Service-Aufgabe und starten diese. Diese Aufgabe erfordert außer den Informationen, die bereits durch das als Voraussetzung erstellte Projekt bereitgestellt werden, die Anmeldeinformationen sowohl für die Quell- als auch die Zielverbindung sowie die Liste der zu migrierenden Datenbanktabellen.

Erstellen von Parametern für Anmeldeinformationen für Quelle und Ziel

Erstellen Sie Sicherheitsanmeldeinformationen für die Verbindung als ein PSCredential-Objekt.

Das folgende Beispiel zeigt die Erstellung von PSCredential-Objekten sowohl für die Quell- als auch die Zielverbindung, wobei Kennwörter als Zeichenfolgenvariablen $sourcePassword und $targetPassword bereitgestellt werden.

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

Erstellen eines Sicherungs-FileShare-Objekts

Erstellen Sie nun ein FileShare-Objekt, das die lokale SMB-Netzwerkfreigabe darstellt, in die Azure Database Migration Service mit dem Cmdlet New-AzDmsFileShare die Quelldatenbanksicherungen ausführen kann.

$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

Erstellen eines ausgewählten Datenbankobjekts

Der nächste Schritt besteht darin, die Quell- und Zieldatenbanken mithilfe des Cmdlets New-AzDmsSelectedDB auszuwählen.

Im folgenden Beispiel wird eine einzelne Datenbank von SQL Server zu einem Azure SQL-verwaltete Instanz migriert:

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

Wenn eine gesamte SQL Server-Instanz einen Lift-and-Shift in eine Azure SQL-verwaltete Instanz benötigt, wird unten eine Schleife bereitgestellt, um alle Datenbanken aus der Quelle zu übernehmen. Geben Sie im folgenden Beispiel für „$Server“, „$SourceUserName“ und „$SourcePassword“ die Details Ihrer SQL Server-Quelle an.

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

SAS-URI für Azure-Speichercontainer

Erstellen Sie eine Variable, die den SAS-URI enthält, mit dem für den Azure Database Migration Service der Zugriff auf den Speicherkontocontainer gewährt wird, in den der Dienst die Sicherungsdateien hochlädt.

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

Hinweis

Die Verwendung eines SAS-Tokens auf Kontoebene wird von Azure Database Migration Service nicht unterstützt. Sie müssen einen SAS-URI für den Speicherkontocontainer verwenden. Erfahren Sie, wie der SAS-URI für Blobcontainer abgerufen wird.

Zusätzliche Konfigurationsanforderungen

Sie müssen einige zusätzliche Anforderungen berücksichtigen:

  • Auswählen von Anmeldungen. Erstellen Sie eine Liste der zu migrierenden Anmeldungen, wie im folgenden Beispiel gezeigt:

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

    Wichtig

    Zurzeit unterstützt Azure Database Migration Service nur das Migrieren von SQL-Anmeldungen.

  • Auswählen von Agent-Aufträgen. Erstellen Sie eine Liste der zu migrierenden Agent-Aufträge, wie im folgenden Beispiel gezeigt:

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

    Wichtig

    Zurzeit unterstützt Azure Database Migration Service nur Aufträge mit T-SQL-Subsystemauftragsschritten.

Erstellen und Starten der Migrationsaufgabe

Verwenden Sie das Cmdlet New-AzDataMigrationTask zum Erstellen und Starten einer Migrationsaufgabe.

Angeben von Parametern

Das New-AzDataMigrationTask-Cmdlet erwartet die folgenden Parameter:

  • TaskType: Als Typ der Migrationsaufgabe, die für die Migration von SQL Server zu Azure SQL Managed Instance zu erstellen ist, wird MigrateSqlServerSqlDbMi erwartet.
  • ResourceGroupName: Name der Azure-Ressourcengruppe, in der die Aufgabe erstellt werden soll.
  • ServiceName: Instanz von Azure Database Migration Service, in der die Aufgabe erstellt werden soll.
  • ProjectName: Name des Azure Database Migration Service-Projekts, in dem die Aufgabe erstellt werden soll.
  • TaskName: Name der zu erstellenden Aufgabe.
  • SourceConnection. Das „AzDmsConnInfo“-Objekt, das die SQL Server-Quellverbindung darstellt.
  • TargetConnection. Das „AzDmsConnInfo“-Objekt, das die Zielverbindung zu Azure SQL Managed Instance darstellt.
  • SourceCred: Das PSCredential-Objekt für die Verbindung mit dem Quellserver.
  • TargetCred: Das PSCredential-Objekt für die Verbindung mit dem Zielserver.
  • SelectedDatabase: Das „AzDataMigrationSelectedDB“-Objekt, das die Quell- und Zieldatenbankzuordnung darstellt.
  • BackupFileShare. FileShare-Objekt, das die lokale Netzwerkfreigabe darstellt, auf die Azure Database Migration Service die Quelldatenbanksicherungen übertragen kann.
  • BackupBlobSasUri. Der SAS-URI, mit dem für den Azure Database Migration Service der Zugriff auf den Speicherkontocontainer gewährt wird, in den der Dienst die Sicherungsdateien hochlädt. Erfahren Sie, wie der SAS-URI für Blobcontainer abgerufen wird.
  • SelectedLogins. Liste der ausgewählten zu migrierenden Anmeldungen.
  • SelectedAgentJobs. Liste der ausgewählten zu migrierenden Agent-Aufträge.
  • SelectedLogins. Liste der ausgewählten zu migrierenden Anmeldungen.
  • SelectedAgentJobs. Liste der ausgewählten zu migrierenden Agent-Aufträge.

Erstellen und Starten einer Migrationsaufgabe

Im folgenden Beispiel wird eine Offlinemigrationsaufgabe mit dem Namen myDMSTask erstellt und gestartet:

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

Überwachen der Migration

Um die Migration zu überwachen, führen Sie die folgenden Aufgaben aus.

  1. Konsolidieren Sie alle Migrationsdetails in eine Variablen namens „$CheckTask“.

    Verwenden Sie zum Kombinieren der Migrationsdetails wie Eigenschaften, Zustand und der Migration zugeordnete Datenbankinformationen den folgenden Codeausschnitt:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Verwenden Sie die Variable $CheckTask, um den aktuellen Zustand der Migrationsaufgabe abzurufen.

    Um die Variable $CheckTask zum Abrufen des aktuellen Zustands der Migrationsaufgabe zu verwenden, können Sie die Ausführung der Migrationsaufgabe überwachen, indem Sie die Zustandseigenschaft der Aufgabe abfragen, wie es im folgenden Beispiel gezeigt wird:

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

Löschen der Instanz von Azure Database Migration Service

Nach Abschluss der Migration können Sie die Azure Database Migration Service-Instanz löschen:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Nächste Schritte

Weitere Informationen zu Azure Database Migration Service finden Sie im Artikel Was ist Azure Database Migration Service?.

Informationen zu zusätzlichen Migrationsszenarien (Quelle/Ziel-Paare) finden Sie im Leitfaden zur Datenbankmigration von Microsoft.