SQL Server offline migreren naar SQL Managed Instance met PowerShell & Azure Database Migration Service

In dit artikel migreert u offline de Database Adventureworks2016 die is hersteld naar een on-premises exemplaar van SQL Server 2005 of hoger naar een met Azure SQL beheerd exemplaar met behulp van Microsoft Azure PowerShell. U kunt databases migreren van een SQL Server-exemplaar naar een met SQL beheerd exemplaar met behulp van de Az.DataMigration module in Microsoft Azure PowerShell.

In dit artikel leert u het volgende:

  • Maak een resourcegroep.
  • Maak een exemplaar van de Azure Database Migration Service.
  • Maak een migratieproject in een exemplaar van Azure Database Migration Service.
  • Voer de migratie offline uit.

Tip

In Azure Database Migration Service kunt u uw databases offline migreren of terwijl ze online zijn. Bij een offlinemigratie wordt de downtime van toepassingen gestart wanneer de migratie wordt gestart. Als u de downtime wilt beperken tot de tijd die nodig is om na de migratie over te gaan naar de nieuwe omgeving, gebruikt u een onlinemigratie . U wordt aangeraden een offlinemigratie te testen om te bepalen of de downtime acceptabel is. Als de verwachte downtime niet acceptabel is, voert u een onlinemigratie uit.

Dit artikel bevat stappen voor een offlinemigratie, maar het is ook mogelijk om online te migreren.

Vereisten

U hebt het volgende nodig om deze stappen uit te voeren:

  • SQL Server 2016 of hoger (elke editie).
  • Een lokale kopie van de AdventureWorks2016-database, die u hier kunt downloaden.
  • Als u het TCP/IP-protocol wilt inschakelen, dat standaard is uitgeschakeld met sql Server Express-installatie. Schakel het TCP/IP-protocol in door het artikel Een servernetwerkprotocol in- of uitschakelen te volgen.
  • Uw Windows Firewall configureren voor toegang tot de database-engine.
  • Een Azure-abonnement. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.
  • Een met SQL beheerd exemplaar. U kunt een met SQL beheerd exemplaar maken door de details te volgen in het artikel Een azure SQL Managed Instance maken.
  • Data Migration Assistant v3.3 of hoger downloaden en installeren.
  • Een virtueel Microsoft Azure-netwerk dat is gemaakt met behulp van het Azure Resource Manager-implementatiemodel, dat azure Database Migration Service biedt met site-naar-site-connectiviteit met uw on-premises bronservers met behulp van ExpressRoute of VPN.
  • Een voltooide evaluatie van uw on-premises database en schemamigratie met Behulp van Data Migration Assistant, zoals beschreven in het artikel Een SQL Server-migratiebeoordeling uitvoeren.
  • Als u de Az.DataMigration module (versie 0.7.2 of hoger) wilt downloaden en installeren vanuit de PowerShell Gallery met behulp van de PowerShell-cmdlet Install-Module.
  • Om ervoor te zorgen dat de referenties die worden gebruikt om verbinding te maken met het SQL Server-bronexemplaren de MACHTIGING CONTROL SERVER hebben.
  • Om ervoor te zorgen dat de referenties die worden gebruikt om verbinding te maken met het doel-SQL Managed Instance de MACHTIGING CONTROL DATABASE heeft voor de sql Managed Instance-doeldatabases.

Aanmelden bij uw Microsoft Azure-abonnement

Meld u aan bij uw Azure-abonnement met behulp van PowerShell. Zie het artikel Aanmelden met Azure PowerShell voor meer informatie.

Een brongroep maken

Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd.

Maak een resourcegroep met behulp van de New-AzResourceGroup opdracht.

In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt in de regio VS - oost.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Een exemplaar maken van Azure Database Migration Service

U kunt een nieuw exemplaar van Azure Database Migration Service maken met behulp van de New-AzDataMigrationService cmdlet. Deze cmdlet verwacht de volgende vereiste parameters:

  • Naam van Azure-resourcegroep. U kunt de opdracht gebruiken New-AzResourceGroup om een Azure-resourcegroep te maken zoals eerder is weergegeven en de naam ervan op te geven als parameter.
  • Servicenaam. Tekenreeks die overeenkomt met de gewenste unieke servicenaam voor Azure Database Migration Service.
  • Locatie. Hiermee geeft u de locatie van de service. Geef een Azure-datacenterlocatie op, zoals VS - west of Azië - zuidoost.
  • SKU. Deze parameter komt overeen met de naam van de DMS-SKU. Momenteel ondersteunde SKU-namen worden Basic_1vCore, Basic_2vCores, GeneralPurpose_4vCores.
  • Virtuele subnet-id. U kunt de cmdlet New-AzVirtualNetworkSubnetConfig gebruiken om een subnet te maken.

In het volgende voorbeeld wordt een service met de naam MyDMS gemaakt in de resourcegroep MyDMSResourceGroup in de regio VS - oost met behulp van een virtueel netwerk met de naam MyVNET en een subnet met de naam 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`

Een migratieproject maken

Nadat u een Azure Database Migration Service-exemplaar hebt gemaakt, maakt u een migratieproject. Een Azure Database Migration Service-project vereist verbindingsgegevens voor zowel de bron- als doelexemplaren, evenals een lijst met databases die u wilt migreren als onderdeel van het project.

Een Database Verbinding maken ion Info-object maken voor de bron- en doelverbindingen

U kunt een Database Verbinding maken ion Info-object maken met behulp van de New-AzDmsConnInfo cmdlet, die de volgende parameters verwacht:

  • ServerType. Het type databaseverbinding dat is aangevraagd, bijvoorbeeld SQL, Oracle of MySQL. Gebruik SQL voor SQL Server en Azure SQL.
  • DataSource. De naam of het IP-adres van een SQL Server-exemplaar of Een Azure SQL Database-exemplaar.
  • AuthType. Het verificatietype voor verbinding, dat kan SqlAuthentication of WindowsAuthentication zijn.
  • TrustServerCertificate. Met deze parameter wordt een waarde ingesteld die aangeeft of het kanaal is versleuteld tijdens het omzeilen van de certificaatketen om de vertrouwensrelatie te valideren. De waarde kan $true of $false.

In het volgende voorbeeld wordt een Verbinding maken ion Info-object gemaakt voor een bron-SQL Server met de naam MySourceSQLServer met behulp van SQL-verificatie:

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

In het volgende voorbeeld ziet u het maken van Verbinding maken ion Info voor een Azure SQL Managed Instance met de naam targetmanagedinstance:

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

Databases opgeven voor het migratieproject

Maak een lijst AzDataMigrationDatabaseInfo met objecten die databases specificeren als onderdeel van het Azure Database Migration Service-project, dat kan worden opgegeven als parameter voor het maken van het project. U kunt de cmdlet New-AzDataMigrationDatabaseInfo gebruiken om te maken AzDataMigrationDatabaseInfo.

In het volgende voorbeeld wordt het AzDataMigrationDatabaseInfo project voor de AdventureWorks2016-database gemaakt en toegevoegd aan de lijst die moet worden opgegeven als parameter voor het maken van een project.

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

Een projectobject maken

Ten slotte kunt u een Azure Database Migration Service-project met de naam MyDMSProject in VSNew-AzDataMigrationProject - oost maken en de eerder gemaakte bron- en doelverbindingen en de lijst met databases toevoegen die moeten worden gemigreerd.

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

Een migratietaak maken en starten

Maak en start vervolgens een Azure Database Migration Service-taak. Voor deze taak zijn verbindingsreferentiegegevens vereist voor zowel de bron als het doel, evenals de lijst met databasetabellen die moeten worden gemigreerd en de informatie die al is opgegeven bij het project dat is gemaakt als een vereiste.

Referentieparameters maken voor bron en doel

Maak verbindingsbeveiligingsreferenties als een PSCredential-object .

In het volgende voorbeeld ziet u het maken van PSCredential-objecten voor zowel de bron- als doelverbindingen, waarbij wachtwoorden worden opgegeven als tekenreeksvariabelen $sourcePassword en $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)

Een back-up maken van een FileShare-object

Maak nu een FileShare-object dat de lokale SMB-netwerkshare vertegenwoordigt waarmee Azure Database Migration Service de back-ups van de brondatabase kan maken met behulp van de 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

Geselecteerd databaseobject maken

De volgende stap is het selecteren van de bron- en doeldatabases met behulp van de New-AzDmsSelectedDB cmdlet.

Het volgende voorbeeld is voor het migreren van één database van SQL Server naar een met Azure SQL beheerd exemplaar:

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

Als een volledig SQL Server-exemplaar een lift-and-shift nodig heeft in een Met Azure SQL beheerd exemplaar, wordt hieronder een lus gegeven om alle databases uit de bron te halen. Geef in het volgende voorbeeld voor $Server, $SourceUserName en $SourcePassword de sql Server-brongegevens op.

$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 voor Azure Storage-container

Maak een variabele met de SAS-URI die azure Database Migration Service toegang biedt tot de opslagaccountcontainer waarnaar de service de back-upbestanden uploadt.

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

Notitie

Azure Database Migration Service biedt geen ondersteuning voor het gebruik van een SAS-token op accountniveau. U moet een SAS-URI gebruiken voor de opslagaccountcontainer. Lees hier meer over het verkrijgen van de SAS-URI voor de blob-container.

Aanvullende configuratievereisten

Er zijn enkele aanvullende vereisten die u moet afhandelen:

  • Selecteer aanmeldingen. Maak een lijst met aanmeldingen die moeten worden gemigreerd, zoals wordt weergegeven in het volgende voorbeeld:

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

    Belangrijk

    Momenteel biedt Azure Database Migration Service alleen ondersteuning voor het migreren van SQL-aanmeldingen.

  • Selecteer agenttaken. Maak een lijst met agenttaken die moeten worden gemigreerd, zoals wordt weergegeven in het volgende voorbeeld:

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

    Belangrijk

    Momenteel ondersteunt Azure Database Migration Service alleen taken met taakstappen van het T-SQL-subsysteem.

De migratietaak maken en starten

Gebruik de New-AzDataMigrationTask cmdlet om een migratietaak te maken en te starten.

Parameters opgeven

De New-AzDataMigrationTask cmdlet verwacht de volgende parameters:

  • TaskType. Het type migratietaak dat moet worden gemaakt voor SQL Server naar Azure SQL Managed Instance-migratietype MigrateSqlServerSqlDbMi is verwacht.
  • Naam van resourcegroep. De naam van de Azure-resourcegroep waarin de taak moet worden gemaakt.
  • ServiceName. Azure Database Migration Service-exemplaar waarin de taak moet worden gemaakt.
  • ProjectName. De naam van het Azure Database Migration Service-project waarin de taak moet worden gemaakt.
  • TaskName. De naam van de taak die moet worden gemaakt.
  • Bron Verbinding maken ion. AzDmsConnInfo-object dat de SQL Server-bronverbinding vertegenwoordigt.
  • Doel Verbinding maken ion. AzDmsConnInfo-object dat de azure SQL Managed Instance-doelverbinding vertegenwoordigt.
  • SourceCred. PSCredential-object voor het maken van verbinding met de bronserver.
  • TargetCred. PSCredential-object voor het maken van verbinding met de doelserver.
  • SelectedDatabase. AzDataMigrationSelectedDB-object dat de bron- en doeldatabasetoewijzing vertegenwoordigt.
  • BackupFileShare. FileShare-object dat de lokale netwerkshare vertegenwoordigt waarnaar de Azure Database Migration Service de back-ups van de brondatabase kan maken.
  • BackupBlobSasUri. De SAS-URI die azure Database Migration Service toegang biedt tot de opslagaccountcontainer waarnaar de service de back-upbestanden uploadt. Lees hier meer over het verkrijgen van de SAS-URI voor de blob-container.
  • SelectedLogins. Lijst met geselecteerde aanmeldingen die moeten worden gemigreerd.
  • SelectedAgentJobs. Lijst met geselecteerde agenttaken die moeten worden gemigreerd.
  • SelectedLogins. Lijst met geselecteerde aanmeldingen die moeten worden gemigreerd.
  • SelectedAgentJobs. Lijst met geselecteerde agenttaken die moeten worden gemigreerd.

Een migratietaak maken en starten

In het volgende voorbeeld wordt een offlinemigratietaak met de naam myDMSTask gemaakt en gestart:

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

De migratie bewaken

Voer de volgende taken uit om de migratie te bewaken.

  1. Voeg alle migratiedetails samen in een variabele met de naam $CheckTask.

    Als u migratiedetails wilt combineren, zoals eigenschappen, status en databasegegevens die zijn gekoppeld aan de migratie, gebruikt u het volgende codefragment:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Gebruik de $CheckTask variabele om de huidige status van de migratietaak op te halen.

    Als u de $CheckTask variabele wilt gebruiken om de huidige status van de migratietaak op te halen, kunt u de migratietaak bewaken door een query uit te voeren op de statuseigenschap van de taak, zoals wordt weergegeven in het volgende voorbeeld:

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

Het exemplaar van Azure Database Migration Service verwijderen

Nadat de migratie is voltooid, kunt u het Azure Database Migration Service-exemplaar verwijderen:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Volgende stappen

Meer informatie over Azure Database Migration Service vindt u in het artikel Wat is de Azure Database Migration Service?

Zie de Handleiding voor migratie van Microsoft Database voor meer informatie over aanvullende migratiescenario's (bron-/doelparen).