Выполнение автономного переноса 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 статьи "Включение или отключение сетевого протокола сервера".
  • Настройте брандмауэр Windows для доступа к ядру СУБД.
  • Подписка 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 Azure

Войдите в свою подписку Azure с помощью PowerShell. Дополнительные сведения см. в статье Вход с помощью Azure PowerShell.

Создание или изменение группы ресурсов

Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.

Создайте группу ресурсов с помощью команды New-AzResourceGroup.

В следующем примере создается группа ресурсов с именем myResourceGroup в регионе Восточная часть США.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Создание экземпляра Azure Database Migration Service

Вы можете создать экземпляр 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 необходимо иметь сведения о подключении для исходных и целевых экземпляров, а также список баз данных, которые требуется перенести как часть проекта.

Создание объекта сведений о подключении к базе данных для исходных и целевых подключений

Вы можете создать объект сведений о подключении к базе данных с помощью командлета New-AzDmsConnInfo, который ожидает следующие параметры:

  • ServerType. Тип запрошенного подключения к базе данных, например SQL, Oracle или MySQL. Используйте SQL для SQL Server и SQL Azure.
  • DataSource. Имя или IP-адреса экземпляра SQL Server или экземпляра базы данных SQL.
  • AuthType. Тип проверки подлинности для подключения. Это может быть SqlAuthentication или WindowsAuthentication.
  • TrustServerCertificate. Этот параметр задает значение, указывающее, будет ли шифроваться канал при проходе по цепочке сертификатов для проверки надежности. Значением может быть $true или $false.

В приведенном ниже примере создается объект сведений о подключении для исходного SQL Server MySourceSQLServer с использованием проверки подлинности SQL:

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

В следующем примере показано создание Подключение ion Info для Управляемый экземпляр SQL Azure с именем targetmanagedinstance:

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

Указание баз данных для проекта миграции

Создайте список объектов AzDataMigrationDatabaseInfo, в котором указаны базы данных, переносимые в рамках проекта Azure Database Migration Servicee. Его можно предоставить в виде параметра для создания проекта. Для создания AzDataMigrationDatabaseInfo можно использовать командлет New-AzDataMigrationDatabaseInfo.

В следующем примере создается проект AzDataMigrationDatabaseInfo для базы данных AdventureWorks2016, который добавляется в список, чтобы его можно было предоставить в виде параметра для создания проекта.

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

Создание объекта проекта

Наконец, вы можете создать проект Azure Database Migration Service под названием MyDMSProject , расположенный в восточной части США, используя New-AzDataMigrationProject, и добавить ранее созданные исходные и целевые подключения и список баз данных для миграции.

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

Создание и запуск задачи миграции

Затем создайте и запустите задачу Azure Database Migration Service. Помимо информации, предоставленной с проектом, созданным в качестве предварительного условия, для задачи необходимо указать сведения об учетных данных для исходного и целевого подключения, а также список таблиц базы данных, которые необходимо перенести.

Создание параметров учетных данных для исходного и целевого подключения

Учетные данные безопасности подключения можно создать в виде объекта PSCredential.

В следующем примере показано создание объектов PSCredential для исходного и целевого подключения. Пароли представлены в качестве строковых переменных $sourcePassword и $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)

Создание объекта FileShare для резервного копирования

Теперь с помощью командлета New-AzDmsFileShare создайте объект FileShare, представляющий собой локальную сетевую папку SMB, в которую Azure Database Migration Service может поместить резервные копии базы данных-источника.

$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

Создание объекта выбранной базы данных

Следующим шагом является выбор исходной и целевой баз данных с помощью командлета New-AzDmsSelectedDB.

Ниже приведен пример миграции одной базы данных из SQL Server в Управляемый экземпляр SQL Azure:

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

Если для всего экземпляра SQL Server требуется перемещение в Управляемый экземпляр SQL Azure, то приведен цикл для передачи всех баз данных из источника ниже. В следующем примере укажите для $Server, $SourceUserName и $SourcePassword сведения о своем источнике 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
      }

Универсальный код ресурса (URI) SAS для контейнера службы хранилища Azure

Создайте переменную, содержащую URI SAS, который позволяет Azure Database Migration Service обращаться к контейнеру учетной записи хранения для отправки файлов резервных копий.

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

Примечание.

Azure Database Migration Service не поддерживает использование маркера SAS на уровне учетной записи. Для контейнера учетной записи хранения необходимо использовать универсальный код ресурса (URI) SAS. Получение SAS для контейнера больших двоичных объектов.

Дополнительные требования к конфигурации

Существует несколько дополнительных требований, которые необходимо выполнить:

  • Выбор имен для входа. Создайте список имен для входа, которые нужно перенести, как показано в следующем примере:

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

    Важно!

    В настоящее время Azure Database Migration Service поддерживает перенос имен входа только для SQL.

  • Выбор заданий агентов. Создайте список заданий агентов, которые будут перенесены, как показано в следующем примере:

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

    Важно!

    В настоящее время Azure Database Migration Service поддерживает только задания с этапами задания подсистемы T-SQL.

Создание и запуск задачи миграции

Выполните командлет New-AzDataMigrationTask, чтобы создать и запустить задачу миграции.

Указание параметров

Для командлета New-AzDataMigrationTask ожидаются следующие параметры:

  • TaskType. Для создаваемой задачи миграции для типа миграции "из SQL Server в Управляемый экземпляр SQL Azure" ожидается тип MigrateSqlServerSqlDbMi.
  • ResourceGroupName. Имя группы ресурсов Azure, в которой будет создана задача.
  • ServiceName. Экземпляр Azure Database Migration Service, в котором будет создана задача.
  • ProjectName. Имя проекта Azure Database Migration Service, в котором будет создана задача.
  • TaskName. Имя задачи, которая будет создана.
  • SourceConnection. Объект AzDmsConnInfo, представляющий подключение к источнику SQL Server.
  • TargetConnection. Объект AzDmsConnInfo, представляющий подключение к целевому Управляемому экземпляру SQL Azure.
  • SourceCred. Объект PSCredential для подключения к исходному серверу.
  • TargetCred. Объект PSCredential для подключения к целевому серверу.
  • SelectedDatabase. Объект AzDataMigrationSelectedDB, представляющий сопоставление исходной и целевой баз данных.
  • BackupFileShare. Объект FileShare, представляющий локальную сетевую папку, в которую Azure Database Migration Service может поместить резервные копии базы данных-источника.
  • BackupBlobSasUri. URI SAS, который позволяет Azure Database Migration Service обращаться к контейнеру учетной записи хранения для отправки файлов резервных копий. Узнайте, как получить URI SAS для контейнера больших двоичных объектов.
  • SelectedLogins. Список выбранных для переноса имен для входа.
  • SelectedAgentJobs. Список выбранных заданий агента для переноса.
  • SelectedLogins. Список выбранных для переноса имен для входа.
  • SelectedAgentJobs. Список выбранных заданий агента для переноса.

Создание и запуск задачи миграции

В следующем примере создается и запускается задача миграции в автономном режиме с именем 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 `

Отслеживайте ход миграции.

Чтобы осуществлять мониторинг миграции, выполните указанные ниже действия.

  1. Объедините все сведения о миграции в переменную с именем $CheckTask.

    Чтобы объединить сведения о миграции, такие как свойства, состояние и сведения о базе данных, связанные с миграцией, используйте следующий фрагмент кода:

    $CheckTask = Get-AzDataMigrationTask -ResourceGroupName myResourceGroup `
                                         -ServiceName $service.Name `
                                         -ProjectName $project.Name `
                                         -Name myDMSTask `
                                         -ResultType DatabaseLevelOutput `
                                         -Expand
    Write-Host ‘$CheckTask.ProjectTask.Properties.Output’
    
  2. Используйте переменную $CheckTask для получения текущего состояния задачи миграции.

    Чтобы использовать переменную $CheckTask для получения текущего состояния задачи миграции, можно отслеживать выполнение задачи миграции, запросив свойство состояния задачи, как показано в следующем примере:

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

Удаление экземпляра Azure Database Migration Service

Завершив миграцию, вы можете удалить экземпляр Azure Database Migration Service:

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

Следующие шаги

Дополнительные сведения о службе Azure Database Migration Service см. в статье Что такое служба Azure Database Migration Service?.

Сведения о дополнительных сценариях миграции (пары "источник — целевой объект") см. в руководстве по миграции баз данныхМайкрософт.