Перенос базы данных SQL Server в Базу данных SQL Azure с помощью Azure PowerShell

В этой статье описано, как перенести базу данных Adventureworks2012, восстановленную на локальном экземпляре SQL Server версии 2016 и выше, в Базу данных SQL Azure с помощью Microsoft Azure PowerShell. Вы можете выполнить перенос баз данных из экземпляра SQL Server в Базу данных SQL Azure с помощью модуля Az.DataMigration в Microsoft Azure PowerShell.

Вы узнаете, как выполнять следующие задачи:

  • Создайте группу ресурсов.
  • создание экземпляра Azure Database Migration Service;
  • создание проекта миграции в экземпляре Azure Database Migration Service;
  • выполнение миграции.

Предварительные требования

Для выполнения этих действий вам потребуется следующее:

Вход в подписку Microsoft Azure

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

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

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

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

В следующем примере создается группа ресурсов с именем myResourceGroup в регионе EastUS.

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.
  • Расположение. Указывает расположение службы. Укажите расположение центра обработки данных Azure, например западная часть США или Юго-Восточная Азия.
  • Sku. Этот параметр соответствует имени SKU DMS. Поддерживаемое сейчас имя Sku — 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 MyDMSResourceGroup `
  -ServiceName MyDMS `
  -Location EastUS `
  -Sku GeneralPurpose_4vCores `  
  -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 Azure.
  • AuthType. Тип проверки подлинности для подключения. Это может быть SqlAuthentication или WindowsAuthentication.
  • Параметр TrustServerCertificate задает значение, указывающее, будет ли шифроваться канал при проходе по цепочке сертификатов для проверки доверия. Значение может быть true или false.

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

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

Примечание

Если миграция завершается ошибкой при предоставлении источника DataSource в качестве общедоступного IP-адреса или DNS SQL Server, используйте имя виртуальной машины Azure, на котором выполняется SQL Server.

В следующем примере показано, как предоставить сведения о подключении для сервера с именем SQLAzureTarget с использованием проверки подлинности SQL:

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

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

Создайте список объектов , указывающих AzDataMigrationDatabaseInfo базы данных в составе проекта миграции баз данных Azure, которые можно указать в качестве параметра для создания проекта. Объекты AzDataMigrationDatabaseInfo можно создать с помощью командлета New-AzDataMigrationDatabaseInfo.

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

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

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

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

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

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

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

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

Учетные данные безопасности подключения можно создать в качестве объекта 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)

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

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

Теперь необходимо выбрать исходную и целевую базы данных и обеспечить сопоставление мигрируемых таблиц в качестве параметра, выполнив командлет New-AzDmsSelectedDB, как показано в следующем примере:

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

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

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

  • TaskType. Для типа миграции "из SQL Server в Базу данных SQL Azure" в создаваемой задаче миграции ожидается тип MigrateSqlServerSqlDb.
  • 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, представляющий сопоставление исходной и целевой баз данных.
  • SchemaValidation (необязательный параметр-переключатель). После миграции будет выполнено сравнение данных схемы для исходной и целевой баз данных.
  • DataIntegrityValidation (необязательный параметр-переключатель). После миграции будет выполнена проверка целостности по контрольной сумме данных в исходной и целевой базах данных.
  • QueryAnalysisValidation (необязательный параметр-переключатель). После миграции будет выполнен быстрый интеллектуальный анализ запросов путем извлечения запросов из исходной базы данных и их выполнения в целевой базе данных.

В следующем примере создается и запускается задача миграции с именем myDMSTask:

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

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

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

Мониторинг миграции

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

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

Удаление экземпляра DMS

После завершения миграции можно удалить экземпляр Azure Database Migration Service.

Remove-AzDms -ResourceGroupName myResourceGroup -ServiceName MyDMS

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