Een SQL Server-database migreren naar Azure SQL Database met behulp van Azure PowerShell

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

In dit artikel leert u het volgende:

  • Maak een resourcegroep.
  • De Azure-portal gebruiken om een Azure Database Migration Service-exemplaar te maken.
  • Maak een migratieproject in een Azure Database Migration Service-exemplaar.
  • De migratie uitvoeren.

Vereisten

U hebt het volgende nodig om deze stappen te voltooien:

Meld u aan bij uw Microsoft Azure-abonnement

Gebruik de instructies in het artikel Aanmelden met Azure PowerShell om u aan te melden bij uw Azure-abonnement met behulp van PowerShell.

Een resourcegroep maken

Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Maak een resourcegroep voordat u een virtuele machine kunt maken.

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

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 New-AzResourceGroup gebruiken 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 op. Een Azure-datacenterlocatie opgeven, zoals VS - west of Azië - zuidoost
  • SKU. Deze parameter komt overeen met de naam van de DMS-SKU. De momenteel ondersteunde SKU-naam is 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 het subnet MySubnet.

 $vNet = Get-AzVirtualNetwork -ResourceGroupName MyDMSResourceGroup -Name MyVNET

$vSubNet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vNet -Name MySubnet

$service = New-AzDms -ResourceGroupName MyDMSResourceGroup `
  -ServiceName MyDMS `
  -Location EastUS `
  -Sku GeneralPurpose_4vCores `  
  -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 databaseverbindingsgegevensobject maken voor de bron- en doelverbindingen

U kunt een databaseverbindingsgegevensobject maken met behulp van de New-AzDmsConnInfo cmdlet. Deze cmdlet verwacht de volgende parameters:

  • ServerType. Het aangevraagde type databaseverbinding, 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 Azure SQL Database.
  • AuthType. Het verificatietype voor de verbinding, dat kan SqlAuthentication of WindowsAuthentication zijn.
  • Met de parameter TrustServerCertificate wordt een waarde ingesteld die aangeeft of het kanaal is versleuteld tijdens het omzeilen van de certificaatketen om vertrouwen te valideren. De waarde kan waar of onwaar zijn.

In het volgende voorbeeld wordt het object Verbindingsgegevens gemaakt voor SQL Server met de naam MySourceSQLServer met behulp van SQL-verificatie:

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

Notitie

Als de migratie eindigt met een fout bij het opgeven van de brongegevensbron als openbaar IP-adres of de DNS van SQL Server, gebruikt u de naam van de Azure-VM waarop de SQL Server wordt uitgevoerd.

In het volgende voorbeeld ziet u het maken van verbindingsgegevens voor een server met de naam SQLAzureTarget met behulp van SQL-verificatie:

$targetConnInfo = New-AzDmsConnInfo -ServerType SQL `
  -DataSource "sqlazuretarget.database.windows.net" `
  -AuthType SqlAuthentication `
  -TrustServerCertificate:$false

Databases opgeven voor het migratieproject

Maak een lijst met AzDataMigrationDatabaseInfo objecten die databases specificeert als onderdeel van het Azure Database Migration-project dat kan worden opgegeven als parameter voor het maken van het project. De cmdlet New-AzDataMigrationDatabaseInfo kan worden gebruikt om AzDataMigrationDatabaseInfo te maken.

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

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

Een projectobject maken

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

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

Een migratietaak maken en starten

Maak ten slotte de Azure Database Migration-taak en start deze. Voor de Azure Database Migration-taak zijn verbindingsreferentiegegevens vereist voor zowel bron- als doel- en lijst met databasetabellen die moeten worden gemigreerd, naast de informatie die al is opgegeven bij het gemaakte project als vereiste.

Referentieparameters maken voor bron en doel

Verbindingsbeveiligingsreferenties kunnen worden gemaakt als een PSCredential-object .

In het volgende voorbeeld ziet u het maken van PSCredential-objecten voor zowel bron- als doelverbindingen die wachtwoorden 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 tabeltoewijzing maken en bron- en doelparameters voor migratie selecteren

Een andere parameter die nodig is voor migratie, is het toewijzen van tabellen van bron naar doel die moeten worden gemigreerd. Maak een woordenlijst met tabellen die een toewijzing biedt tussen bron- en doeltabellen voor migratie. In het volgende voorbeeld ziet u de toewijzing tussen bron- en doeltabellen Human Resources-schema voor de Database AdventureWorks 2016.

$tableMap = New-Object 'system.collections.generic.dictionary[string,string]'
$tableMap.Add("HumanResources.Department", "HumanResources.Department")
$tableMap.Add("HumanResources.Employee","HumanResources.Employee")
$tableMap.Add("HumanResources.EmployeeDepartmentHistory","HumanResources.EmployeeDepartmentHistory")
$tableMap.Add("HumanResources.EmployeePayHistory","HumanResources.EmployeePayHistory")
$tableMap.Add("HumanResources.JobCandidate","HumanResources.JobCandidate")
$tableMap.Add("HumanResources.Shift","HumanResources.Shift")

De volgende stap is het selecteren van de bron- en doeldatabases en het opgeven van tabeltoewijzing om te migreren als een parameter met behulp van de New-AzDmsSelectedDB cmdlet, zoals wordt weergegeven in het volgende voorbeeld:

$selectedDbs = New-AzDmsSelectedDB -MigrateSqlServerSqlDb -Name AdventureWorks2016 `
  -TargetDatabaseName AdventureWorks2016 `
  -TableMap $tableMap

De migratietaak maken en starten

Gebruik de New-AzDataMigrationTask cmdlet om een migratietaak te maken en te starten. Deze cmdlet verwacht de volgende parameters:

  • TaskType. Het type migratietaak dat moet worden gemaakt voor SQL Server naar Azure SQL Het migratietype MigrateSqlServerSqlDb van de database wordt verwacht.
  • Naam van resourcegroep. Naam van de Azure-resourcegroep waarin de taak moet worden gemaakt.
  • ServiceName. Azure Database Migration Service exemplaar waarin de taak moet worden gemaakt.
  • ProjectName. Naam van Azure Database Migration Service project waarin de taak moet worden gemaakt.
  • Taaknaam. Naam van de taak die moet worden gemaakt.
  • SourceConnection. AzDmsConnInfo-object dat de bron SQL Server verbinding vertegenwoordigt.
  • TargetConnection. AzDmsConnInfo-object dat het doel Azure SQL databaseverbinding vertegenwoordigt.
  • SourceCred. PSCredential-object voor het maken van verbinding met de bronserver.
  • TargetCred. PSCredential-object om verbinding te maken met de doelserver.
  • SelectedDatabase. AzDataMigrationSelectedDB-object dat de bron- en doeldatabasetoewijzing vertegenwoordigt.
  • SchemaValidation. (optioneel, schakelparameter) Na de migratie wordt een vergelijking van de schemagegevens tussen bron en doel uitgevoerd.
  • DataIntegrityValidation. (optioneel, schakelparameter) Na de migratie voert u een validatie van de gegevensintegriteit op basis van een controlesom uit tussen de bron en het doel.
  • QueryAnalysisValidation. (optioneel, schakelparameter) Na de migratie voert u een snelle en intelligente queryanalyse uit door query's op te halen uit de brondatabase en deze uit te voeren in het doel.

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

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDb `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `

In het volgende voorbeeld wordt dezelfde migratietaak gemaakt en gestart als hierboven, maar worden ook alle drie de validaties uitgevoerd:

$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDb `
  -ResourceGroupName myResourceGroup `
  -ServiceName $service.Name `
  -ProjectName $project.Name `
  -TaskName myDMSTask `
  -SourceConnection $sourceConnInfo `
  -SourceCred $sourceCred `
  -TargetConnection $targetConnInfo `
  -TargetCred $targetCred `
  -SelectedDatabase  $selectedDbs `
  -SchemaValidation `
  -DataIntegrityValidation `
  -QueryAnalysisValidation `

Bewaak de migratie

U kunt de uitgevoerde migratietaak controleren door een query uit te voeren op de statuseigenschap van de taak, zoals wordt weergegeven in het volgende voorbeeld:

if (($mytask.ProjectTask.Properties.State -eq "Running") -or ($mytask.ProjectTask.Properties.State -eq "Queued"))
{
  write-host "migration task running"
}

Het DMS-exemplaar verwijderen

Nadat de migratie is voltooid, kunt u het Azure DMS-exemplaar verwijderen:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Volgende stap