Выполнение переноса SQL Server в Управляемый экземпляр SQL с подключением к сети, используя PowerShell и Azure Database Migration Service
Выполняя действия, приведенные в этой статье, мы перенесем базу данных Adventureworks2016, восстановленную в локальном экземпляре SQL Server 2005 (или более поздней версии), в Управляемый экземпляр SQL Azure SQL с помощью Microsoft Azure PowerShell. Базы данных можно перенести из экземпляра SQL Server в Управляемый экземпляр SQL, используя в Microsoft Azure PowerShell модуль Az.DataMigration
.
Вы узнаете, как выполнять следующие задачи:
- Создать группу ресурсов.
- Создайте экземпляр Azure Database Migration Service.
- Создание проекта миграции в экземпляре Azure Database Migration Service.
- Выполнение переноса с подключением к сети.
Совет
В Службе azure Database Migration Service можно перенести базы данных в автономном режиме или во время их работы в сети. При автономной миграции время простоя приложения начинается при запуске миграции. Чтобы ограничить время простоя, необходимое для перехода к новой среде после миграции, используйте миграцию через Интернет . Рекомендуется протестировать автономную миграцию, чтобы определить допустимо ли время простоя. Если ожидаемое время простоя недопустимо, выполните миграцию по сети.
В этой статье приведены действия по переносу с подключением к сети, однако вы также можете выполнить миграцию в автономном режиме.
Необходимые компоненты
Для выполнения этих действий вам потребуется следующее:
SQL Server 2016 или более поздней версии (любой выпуск).
Локальная копия базы данных AdventureWorks2016, которую можно загрузить здесь.
При установке SQL Server Express включите протокол TCP/IP, который отключен по умолчанию. Для этого выполните инструкции в разделе Использование диспетчера конфигурации SQL Server статьи "Включение или отключение сетевого протокола сервера".
Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начать работу.
Управляемый экземпляр SQL. Управляемый экземпляр SQL можно создать, выполнив инструкции из статьи Создание Управляемого экземпляра SQL Azure.
Загруженный и установленный Помощник по миграции данных версии 3.3 или более поздней.
Виртуальная сеть Microsoft Azure, созданная с помощью модели развертывания Azure Resource Manager, которая обеспечивает для Azure Database Migration Service подключение типа "сеть — сеть" через ExpressRoute или VPN к локальным исходным серверам.
Завершенная оценка миграции локальной базы данных и схемы, выполненная с помощью Помощника по миграции данных, как описано в статье Выполнение оценки миграции SQL Server.
Модуль
Az.DataMigration
(версии 0.7.2 или более поздней), загруженный и установленный из коллекции PowerShell с помощьюкомандлета PowerShell Install-Module.Убедитесь, что учетные данные, используемые для подключения к исходному экземпляру SQL Server, имеют разрешение CONTROL SERVER.
Убедитесь, что учетные данные, используемые для подключения к целевому Управляемому экземпляру SQL, имеют разрешение CONTROL DATABASE в базах данных целевого Управляемого экземпляра SQL.
Важно!
Для миграции через Интернет необходимо настроить учетные данные Microsoft Entra. Дополнительные сведения см. в статье "Использование портала" для создания приложения Microsoft Entra и субъекта-службы, доступ к ресурсам.
Создание или изменение группы ресурсов
Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.
Создайте группу ресурсов с помощью команды New-AzResourceGroup
.
В следующем примере создается группа ресурсов с именем myResourceGroup в регионе Восточная часть США.
New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS
Создание экземпляра DMS
Вы можете создать экземпляр Azure Database Migration Service, выполнив командлет New-AzDataMigrationService
.
Для этого командлета нужно передать следующие обязательные параметры:
- ResourceGroupName. Вы можете выполнить команду
New-AzResourceGroup
, чтобы создать группу ресурсов Azure, как описано в предыдущем разделе, и указать ее имя в качестве параметра. - ServiceName. Строка, соответствующая требуемому уникальному имени службы для Azure Database Migration Service.
- Location. Указывает расположение службы. Укажите расположение центра обработки данных Azure, например "Западная часть США" или "Юго-Восточная Азия".
- Sku. Этот параметр соответствует имени SKU DMS. Сейчас поддерживаются такие имена SKU: Basic_1vCore, Basic_2vCores, GeneralPurpose_4vCores.
- VirtualSubnetId. Для создания подсети можно использовать командлет
New-AzVirtualNetworkSubnetConfig
.
В указанном ниже примере создается служба с именем MyDMS в группе ресурсов MyDMSResourceGroup, расположенная в регионе Восточная часть США. Ее компонентами является виртуальная сеть с именем MyVNET и подсеть с именем 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`
Создание проекта миграции
Создав экземпляр Azure Database Migration Service, создайте проект миграции. Для проекта Azure Database Migration Service необходимо иметь сведения о подключении для исходных и целевых экземпляров, а также список баз данных, которые требуется перенести как часть проекта. Определите строки подключения для возможности подключения источника и целевого объекта.
Следующий скрипт определяет сведения о подключении источника SQL Server:
# Source connection properties
$sourceDataSource = "<mysqlserver.domain.com/privateIP of source SQL>"
$sourceUserName = "domain\user"
$sourcePassword = "mypassword"
Следующий скрипт определяет сведения о подключении целевого Управляемого экземпляра SQL:
# Target MI connection properties
$targetMIResourceId = "/subscriptions/<subid>/resourceGroups/<rg>/providers/Microsoft.Sql/managedInstances/<myMI>"
$targetUserName = "<user>"
$targetPassword = "<password>"
Определение сопоставления исходной и целевой баз данных
Укажите базы данных, которые нужно перенести в этом проекте миграции
Следующий скрипт сопоставляет базу данных-источник с соответствующей новой базой данных в целевом Управляемом экземпляре SQL с указанным именем.
# 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> ")
Если вы используете несколько баз данных, добавьте список баз данных в указанный выше скрипт в следующем формате:
$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> ")
Создание проекта DMS
Проект Azure Database Migration Service можно создать в экземпляре DMS.
# 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 `
}
Создание объекта FileShare для резервного копирования
Теперь с помощью командлета New-AzDmsFileShare создайте объект FileShare, представляющий собой локальную сетевую папку SMB, в которую Azure Database Migration Service может поместить резервные копии базы данных-источника.
# 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
Определение службы хранилища Azure
Выберите контейнер службы хранилища Azure, который будет использоваться для миграции:
# Storage resource id
$storageAccountResourceId = "/subscriptions/<subscriptionname>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<mystorage>"
Настройка приложения Microsoft Entra
Укажите необходимые сведения для идентификатора Microsoft Entra для миграции Управляемый экземпляр SQL через Интернет:
# AAD properties
$AADAppId = "<appid-guid>"
$AADAppKey = "<app-key>"
# Create AAD object
$AADAppKeySecure = ConvertTo-SecureString $AADAppKey -AsPlainText -Force
$AADApp = New-AzDmsAadApp -ApplicationId $AADAppId -AppKey $AADAppKeySecure
Создание и запуск задачи миграции
Затем создайте и запустите задачу Azure Database Migration Service. Вызовите источник и целевой объект с помощью переменных и создайте список таблиц базы данных, которые нужно перенести:
# 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)
В следующем примере показано, как создавать и запускать задачу миграции с подключением к сети:
# 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
Дополнительные сведения см. в описании New-AzDataMigrationTask.
Отслеживайте ход миграции.
Чтобы осуществлять мониторинг миграции, выполните указанные ниже действия.
Проверьте состояние задачи
# 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
Чтобы получить список ошибок, используйте следующую команду:
# 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 "=========="
}
Выполнение прямой миграции
При миграции с подключением к сети выполняется полное резервное копирование и восстановление баз данных, после чего продолжается работа по восстановлению журналов транзакций, хранящихся в BackupFileShare.
Прямую миграцию можно выполнить после обновления базы данных в Управляемом экземпляре SQL Azure с использованием актуальных данных и ее синхронизации с базой данных-источником.
В следующем примере показано завершение прямой миграции. Пользователи вызывают эту команду по собственному усмотрению.
$command = Invoke-AzDmsCommand -CommandType CompleteSqlMiSync `
-ResourceGroupName myResourceGroup `
-ServiceName $service.Name `
-ProjectName $project.Name `
-TaskName myDMSTask `
-DatabaseName "Source DB Name"
Удаление экземпляра Azure Database Migration Service
Завершив миграцию, вы можете удалить экземпляр Azure Database Migration Service:
Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS
Дополнительные ресурсы
Сведения о дополнительных сценариях миграции (пары "источник — целевой объект") см. в руководстве по миграции баз данныхМайкрософт.
Следующие шаги
Дополнительные сведения о службе Azure Database Migration Service см. в статье Что такое служба Azure Database Migration Service?.