Migrowanie programu SQL Server do wystąpienia zarządzanego SQL w trybie offline przy użyciu programu PowerShell i usługi Azure Database Migration Service

W tym artykule przeprowadzisz migrację bazy danych Adventureworks2016 w trybie offline przywróconej do lokalnego wystąpienia programu SQL Server 2005 lub nowszego do usługi Azure SQL Managed Instance przy użyciu programu Microsoft Azure PowerShell. Bazy danych można migrować z wystąpienia programu SQL Server do wystąpienia zarządzanego SQL przy użyciu modułu Az.DataMigration w programie Microsoft Azure PowerShell.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Utwórz grupę zasobów.
  • Utwórz wystąpienie usługi Azure Database Migration Service.
  • Utwórz projekt migracji w wystąpieniu usługi Azure Database Migration Service.
  • Uruchom migrację w trybie offline.

Napiwek

W usłudze Azure Database Migration Service możesz migrować bazy danych w trybie offline lub w trybie online. Podczas migracji w trybie offline przestój aplikacji rozpoczyna się po rozpoczęciu migracji. Aby ograniczyć przestój do czasu potrzebnego na przejście do nowego środowiska po migracji, użyj migracji online . Zalecamy przetestowanie migracji w trybie offline w celu określenia, czy przestój jest akceptowalny. Jeśli oczekiwany przestój nie jest akceptowalny, wykonaj migrację online.

Ten artykuł zawiera kroki migracji w trybie offline, ale można go również migrować w trybie online.

Wymagania wstępne

Aby wykonać następujące kroki, potrzebne są następujące elementy:

  • SQL Server 2016 lub nowszy (dowolna wersja).
  • Lokalna kopia bazy danych AdventureWorks2016 , która jest dostępna do pobrania tutaj.
  • Aby włączyć protokół TCP/IP, który jest domyślnie wyłączony z instalacji programu SQL Server Express. Włącz protokół TCP/IP, postępując zgodnie z artykułem Włączanie lub wyłączanie protokołu sieciowego serwera.
  • Aby skonfigurować zaporę systemu Windows pod kątem dostępu do aparatu bazy danych.
  • Subskrypcja Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto.
  • Wystąpienie zarządzane SQL. Wystąpienie zarządzane SQL można utworzyć, postępując zgodnie ze szczegółami w artykule Tworzenie wystąpienia zarządzanego Azure SQL.
  • Aby pobrać i zainstalować usługę Data Asystent migracji w wersji 3.3 lub nowszej.
  • Sieć wirtualna platformy Microsoft Azure utworzona przy użyciu modelu wdrażania usługi Azure Resource Manager, który zapewnia usługę Azure Database Migration Service z łącznością typu lokacja-lokacja z lokalnymi serwerami źródłowymi przy użyciu usługi ExpressRoute lub sieci VPN.
  • Ukończona ocena lokalnej bazy danych i migracji schematu przy użyciu Asystent migracji danych, zgodnie z opisem w artykule Przeprowadzanie oceny migracji programu SQL Server.
  • Aby pobrać i zainstalować Az.DataMigration moduł (wersja 0.7.2 lub nowsza) z Galeria programu PowerShell za pomocą polecenia cmdlet Install-Module programu PowerShell.
  • Aby upewnić się, że poświadczenia używane do nawiązywania połączenia ze źródłowym wystąpieniem programu SQL Server mają uprawnienie CONTROL SERVER .
  • Aby upewnić się, że poświadczenia używane do nawiązywania połączenia z docelowym wystąpieniem zarządzanym SQL mają uprawnienie CONTROL DATABASE w docelowych bazach danych usługi SQL Managed Instance.

Zaloguj się do subskrypcji platformy Microsoft Azure

Zaloguj się do subskrypcji platformy Azure przy użyciu programu PowerShell. Aby uzyskać więcej informacji, zobacz artykuł Logowanie się przy użyciu programu Azure PowerShell.

Tworzenie grupy zasobów

Grupa zasobów platformy Azure to logiczny kontener, w którym zasoby platformy Azure są wdrażane i zarządzane.

Utwórz grupę zasobów przy użyciu New-AzResourceGroup polecenia .

Poniższy przykład tworzy grupę zasobów o nazwie myResourceGroup w regionie Wschodnie stany USA .

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Tworzenie wystąpienia usługi Azure Database Migration Service

Nowe wystąpienie usługi Azure Database Migration Service można utworzyć przy użyciu New-AzDataMigrationService polecenia cmdlet . To polecenie cmdlet oczekuje następujących wymaganych parametrów:

  • Nazwa grupy zasobów platformy Azure. Możesz użyć New-AzResourceGroup polecenia , aby utworzyć grupę zasobów platformy Azure, jak pokazano wcześniej i podać jej nazwę jako parametr.
  • Nazwa usługi. Ciąg odpowiadający żądanej unikatowej nazwie usługi dla usługi Azure Database Migration Service.
  • Lokalizacja. Określa lokalizację usługi. Określ lokalizację centrum danych platformy Azure, taką jak Zachodnie stany USA lub Azja Południowo-Wschodnia.
  • Jednostka SKU. Ten parametr odpowiada nazwie jednostki SKU usługi DMS. Obecnie obsługiwane nazwy jednostek SKU są Basic_1vCore, Basic_2vCores, GeneralPurpose_4vCores.
  • Identyfikator podsieci wirtualnej. Możesz użyć polecenia cmdlet New-AzVirtualNetworkSubnetConfig , aby utworzyć podsieć.

Poniższy przykład tworzy usługę o nazwie MyDMS w grupie zasobów MyDMSResourceGroup znajdującej się w regionie Wschodnie stany USA przy użyciu sieci wirtualnej o nazwie MyVNET i podsieci o nazwie 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`

Tworzenie projektu migracji

Po utworzeniu wystąpienia usługi Azure Database Migration Service utwórz projekt migracji. Projekt usługi Azure Database Migration Service wymaga informacji o połączeniu zarówno dla wystąpień źródłowych, jak i docelowych, a także listy baz danych, które mają zostać zmigrowane w ramach projektu.

Tworzenie obiektu Info Połączenie ion bazy danych dla połączeń źródłowych i docelowych

Obiekt Informacje o Połączenie ionie bazy danych można utworzyć przy użyciu New-AzDmsConnInfo polecenia cmdlet , które oczekuje następujących parametrów:

  • ServerType. Żądany typ połączenia z bazą danych, na przykład SQL, Oracle lub MySQL. Użyj języka SQL dla programu SQL Server i usługi Azure SQL.
  • Źródło danych. Nazwa lub adres IP wystąpienia programu SQL Server lub wystąpienia usługi Azure SQL Database.
  • AuthType. Typ uwierzytelniania dla połączenia, który może być sqlAuthentication lub WindowsAuthentication.
  • TrustServerCertificate. Ten parametr ustawia wartość, która wskazuje, czy kanał jest szyfrowany podczas pomijania chodzenia łańcucha certyfikatów w celu zweryfikowania zaufania. Wartość może mieć wartość $true lub $false.

Poniższy przykład tworzy obiekt info Połączenie ion dla źródłowego programu SQL Server o nazwie MySourceSQLServer przy użyciu uwierzytelniania SQL:

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

W następnym przykładzie pokazano tworzenie informacji o Połączenie ion dla usługi Azure SQL Managed Instance o nazwie "targetmanagedinstance":

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

Udostępnianie baz danych dla projektu migracji

Utwórz listę AzDataMigrationDatabaseInfo obiektów, które określają bazy danych w ramach projektu usługi Azure Database Migration Service, który można podać jako parametr tworzenia projektu. Możesz użyć polecenia cmdlet New-AzDataMigrationDatabaseInfo , aby utworzyć element AzDataMigrationDatabaseInfo.

Poniższy przykład tworzy AzDataMigrationDatabaseInfo projekt bazy danych AdventureWorks2016 i dodaje go do listy, która ma zostać podana jako parametr tworzenia projektu.

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

Tworzenie obiektu projektu

Na koniec możesz utworzyć projekt usługi Azure Database Migration Service o nazwie MyDMSProject znajdujący się w regionie Wschodnie stany USA przy użyciu i New-AzDataMigrationProject dodać utworzone wcześniej połączenia źródłowe i docelowe oraz listę baz danych do migracji.

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

Tworzenie i uruchamianie zadania migracji

Następnie utwórz i uruchom zadanie usługi Azure Database Migration Service. To zadanie wymaga informacji o poświadczeniach połączenia zarówno dla źródła, jak i obiektu docelowego, a także listy tabel bazy danych, które mają zostać zmigrowane, oraz informacji już dostarczonych z projektem utworzonym jako wymaganie wstępne.

Tworzenie parametrów poświadczeń dla źródła i elementu docelowego

Utwórz poświadczenia zabezpieczeń połączenia jako obiekt PSCredential .

W poniższym przykładzie pokazano tworzenie obiektów PSCredential dla połączeń źródłowych i docelowych, podając hasła jako zmienne ciągu $sourcePassword i $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)

Tworzenie kopii zapasowej obiektu FileShare

Teraz utwórz obiekt FileShare reprezentujący lokalny udział sieciowy SMB, do którego usługa Azure Database Migration Service może wykonywać kopie zapasowe źródłowej bazy danych przy użyciu New-AzDmsFileShare polecenia 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

Tworzenie wybranego obiektu bazy danych

Następnym krokiem jest wybranie źródłowych i docelowych baz danych przy użyciu New-AzDmsSelectedDB polecenia cmdlet .

Poniższy przykład dotyczy migrowania pojedynczej bazy danych z programu SQL Server do usługi Azure SQL Managed Instance:

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

Jeśli całe wystąpienie programu SQL Server wymaga przeniesienia metodą "lift-and-shift" do wystąpienia zarządzanego usługi Azure SQL, poniżej znajduje się pętla do przenoszenia wszystkich baz danych ze źródła. W poniższym przykładzie w przypadku $Server, $SourceUserName i $SourcePassword podaj szczegóły źródłowego programu SQL Server.

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

Identyfikator URI sygnatury dostępu współdzielonego dla kontenera usługi Azure Storage

Utwórz zmienną zawierającą identyfikator URI sygnatury dostępu współdzielonego, która zapewnia usłudze Azure Database Migration Service dostęp do kontenera konta magazynu, do którego usługa przekazuje pliki kopii zapasowej.

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

Uwaga

Usługa Azure Database Migration Service nie obsługuje używania tokenu SAS na poziomie konta. Musisz użyć identyfikatora URI sygnatury dostępu współdzielonego dla kontenera konta magazynu. Dowiedz się, jak uzyskać identyfikator URI sygnatury dostępu współdzielonego dla kontenera obiektów blob.

Dodatkowe wymagania dotyczące konfiguracji

Należy spełnić kilka dodatkowych wymagań:

  • Wybierz pozycję Logowania. Utwórz listę identyfikatorów logowania, które mają zostać zmigrowane, jak pokazano w poniższym przykładzie:

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

    Ważne

    Obecnie usługa Azure Database Migration Service obsługuje tylko migrowanie logowań SQL.

  • Wybierz pozycję Zadania agenta. Utwórz listę zadań agenta do zmigrowania, jak pokazano w poniższym przykładzie:

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

    Ważne

    Obecnie usługa Azure Database Migration Service obsługuje tylko zadania z krokami zadań podsystemu T-SQL.

Tworzenie i uruchamianie zadania migracji

New-AzDataMigrationTask Użyj polecenia cmdlet , aby utworzyć i uruchomić zadanie migracji.

Określanie parametrów

Polecenie New-AzDataMigrationTask cmdlet oczekuje następujących parametrów:

  • Typ zadania. Oczekiwano typu zadania migracji do utworzenia dla programu SQL Server do typu migracji usługi Azure SQL Managed Instance MigrateSqlServerSqlDbMi .
  • Nazwa grupy zasobów. Nazwa grupy zasobów platformy Azure, w której ma zostać utworzone zadanie.
  • ServiceName. Wystąpienie usługi Azure Database Migration Service, w którym ma zostać utworzone zadanie.
  • Nazwa projektu. Nazwa projektu usługi Azure Database Migration Service, w którym ma zostać utworzone zadanie.
  • TaskName. Nazwa zadania do utworzenia.
  • Źródło Połączenie ion. AzDmsConnInfo obiekt reprezentujący źródłowe połączenie z programem SQL Server.
  • Cel Połączenie ion. AzDmsConnInfo obiekt reprezentujący docelowe połączenie usługi Azure SQL Managed Instance.
  • SourceCred. Obiekt PSCredential na potrzeby nawiązywania połączenia z serwerem źródłowym.
  • TargetCred. Obiekt PSCredential na potrzeby nawiązywania połączenia z serwerem docelowym.
  • SelectedDatabase. AzDataMigrationSelectedDB obiekt reprezentujący mapowanie źródłowej i docelowej bazy danych.
  • BackupFileShare. Obiekt FileShare reprezentujący udział sieci lokalnej, do którego usługa Azure Database Migration Service może wykonywać kopie zapasowe źródłowej bazy danych.
  • BackupBlobSasUri. Identyfikator URI sygnatury dostępu współdzielonego udostępniający usłudze Azure Database Migration Service dostęp do kontenera konta magazynu, do którego usługa przekazuje pliki kopii zapasowej. Dowiedz się, jak uzyskać identyfikator URI sygnatury dostępu współdzielonego dla kontenera obiektów blob.
  • SelectedLogins. Lista wybranych logowań do migracji.
  • SelectedAgentJobs. Lista wybranych zadań agenta do migracji.
  • SelectedLogins. Lista wybranych logowań do migracji.
  • SelectedAgentJobs. Lista wybranych zadań agenta do migracji.

Tworzenie i uruchamianie zadania migracji

Poniższy przykład tworzy i uruchamia zadanie migracji offline o nazwie 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 `

Monitorowanie migracji

Aby monitorować migrację, wykonaj następujące zadania.

  1. Skonsoliduj wszystkie szczegóły migracji do zmiennej o nazwie $CheckTask.

    Aby połączyć szczegóły migracji, takie jak właściwości, stan i informacje o bazie danych skojarzone z migracją, użyj następującego fragmentu kodu:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Użyj zmiennej $CheckTask , aby uzyskać bieżący stan zadania migracji.

    Aby użyć $CheckTask zmiennej w celu pobrania bieżącego stanu zadania migracji, możesz monitorować zadanie migracji uruchomione, wykonując zapytanie o właściwość state zadania, jak pokazano w poniższym przykładzie:

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

Usuwanie wystąpienia usługi Azure Database Migration Service

Po zakończeniu migracji możesz usunąć wystąpienie usługi Azure Database Migration Service:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Następne kroki

Dowiedz się więcej o usłudze Azure Database Migration Service w artykule Co to jest usługa Azure Database Migration Service?.

Aby uzyskać informacje na temat dodatkowych scenariuszy migracji (par źródłowych/docelowych), zobacz Przewodnik po migracji bazy danych microsoft.