Миграция on-prem базы данных SQL Server в Azure SQL

В этой статье рассматриваются сценарии миграции базы данных SQL Server из локальной (on-premises) инфраструктуры в облачную базу Azure SQL.

Использование SQL Azure по модели PaS позволяет вам получить собственный облачный инстанс SQL без развёртывания виртуальных серверов в облаке.

Чем полезен SQL Azure?

  • Облачную базу данных можно использовать без изменения приложения и сохраняя локальную инфраструктуру в том виде, в котором она была до миграции
  • Простота масштабирования и высокая скорость доступа к данным в разных регионах/континентах
  • Простое и быстрое восстановление, наличие снапшотов (особо важно для разработчиков)
  • Оптимален для стартов, позволяет получить все возможности SQL, которые доступны большим проектам по доступной цене.

Создаем базу данных SQL Azure

Перед тем, как разворачивать базу данных в облаке, необходимо создать сервер базы данных в Microsoft Azure.

Для этого нужно выполнить следующие действия:

  1. Перейти на портал Azure ;
  2. В строке поиска введите «sql servers», выберите SQL servers ;
    SQL servers в Azure
  3. Если в вашей подписке нет серверов SQL, то нажмите Create SQL server ;
    список базы данных в SQL Azure
  4. На экране появится форма создания SQL-сервера. На этой форме необходимо заполнить все поля, отмеченные знаками *. Если вы еще не создали группу ресурсов для SQL-сервера, на этом шаге вы можете это сделать, нажав на кнопку Create new ;
    создать новый экземпляр SQL в Azure
  5. Следующим шагом будет настройка сетевого подключения к облачному SQL серверу. Разрешим создание правила брандмауэра для доступа к SQL серверу из Интернет;
    настройка сети для базы данных sql azure
  6. На следующем шаге есть возможность подключить к серверу услугу Azure Defender для SQL — это пакет для защиты SQL сервера. Более подробно о возможностях Azure Defender можно посмотреть на странице документации Microsoft ;
  7. Следующим шагом можно заполнить теги для нового сервера. Теги пригодятся, если нужно будет искать наш сервер в скриптах;
  8. Подтверждаем создание SQL-сервера нажатием кнопки Create . После нажатия кнопки «Create» будет создана ресурсная группа для нашего сервера и сам сервер SQL;
    база данных в azure создана
  9. Переходим в раздел «Firewalls and virtual networks», нажав на ссылку «Show firewall settings»;
    настройка сети для sql azure базы
  10. Нажимаем на «Add client IP», в поле «Client IP address» появляется текущее подключение к облачному Azure SQL.
    задать IP адрес для SQL базы данных в Azure
  11. Обязательно нажимаем кнопку Save

Создать облачный SQL сервер можно и при помощи PowerShell. Перед использованием PowerShell сначала нужно установить несколько модулей.

Сначала загружаем модуль Az при помощи команды

Install-Module -Name Az -AllowClobber

Затем загружаем модуль Az.Resources командой

Import-Module Az.Resources

И аутентифицируемся в Microsoft Azure:

Connect-AzAccount

Первым шагом мы создаем ресурсную группу Azure с именем ResourceGroup1:

AzureResourceGroup -Name "ResourceGroup1" -Location "NorthEurope"

Следующий шаг — создание сервера и настройка брандмауэра. В скрипте указываем созданную ресурсную группу, месторасположение, логин и пароль администратора, а также задаем параметр брандмауэра, позволяющий подключаться к серверу из Интернет.

Write-host "Creating primary server..."
$resourcegroupname = "ResourceGroup1"
$location = "NorthEurope"
$adminlogin = "sqladmin"
$password = "Azure1345678!"
$servername = "mysqlserver-1558185950"
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"
Write-host "Creating primary server..."
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName -ServerName $serverName -Location $location -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
$server
Write-host "Configuring server firewall rule..."
echo $resourcegroupname
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourcegroupname -ServerName $servername -FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
$serverFirewallRule

После создания ресурсной группы и сервера SQL можно переходить к миграции.

Миграция в SQL Azure с помощью SQL Server Management Studio

Наиболее простой способ миграции базы данных на on-prem SQL Server в Azure SQL– это использование средств SQL Management Studio.

  1. В SQL Server Management Studio выбираем базу данных, которую мы хотим перенести в облако, затем в контекстном меню выбираем « Deploy Database to Microsoft Azure SQL Database «. Откроется мастер миграции;
    Deploy Database to Microsoft Azure SQL Database
  2. Подключимся к SQL Azure. Для подключения к Azure SQL используем строку «Server name», которую можно скопировать со страницы ресурса нашей базы данных. Выбираем тип аутентификации «SQL Server Authentication», и указываем логин и пароль администратора, которые мы указали при создании сервера баз данных.
    Миграция on-prem базы данных SQL Server в Azure SQL
    подключение SQL Server Management Studio к базе данных в Azure
  3. На следующей странице мастера укажите название базы данных, которая будет создана в SQL Azure, уровень службы, объем базы данных и уровень обслуживания.
    параметры базы данных в Azure
  4. Мастер выполнит все необходимые шаги для миграции
    миграция базы данных sql server в azure
  5. В SQL Azure появится новая база данных.
    база данный sql azure появилась в sql server management studio

Перенос базы данных в облако закончен.

Миграция в SQL Azure через пакет приложений уровня данных (Data-tier Application DAC Package)

Приложение уровня данных (Data-tier Application DAC Package) это инструмент управления жизненным циклом базы данных. Разработчики создают базу данных в проекте базы данных SQL Server Data Tool, а затем передают пакет DAC администратору баз данных. Администраторы баз данных разворачивают приложение DAC на тестовый или продуктивный экземпляр SQL Server или используют пакет DAC для обновления ранее развернуой базы данных. В случае изменений в приложении, которые ведут к изменению схемы базы данных, администраторы также могут извлечь базу данных в пакет DAС и передать этот пакет разработчикам.

Пакет DAC – это файл с расширением DACPAC. Такой файл состоит из множества XML-разделов, в которых имеются метаданные приложения и базы данных, а также сами данные, хранящиеся в базе данных.

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

  1. Убедитесь, что у вас установлена последняя версия SQL Server Management Studio.
  2. Откройте SQL Server Management Studio и выберите базу данных, которую нужно перенести.
  3. Из контекстного меню в обозревателе объектов выберите пункт Tasks и нажмите на Export Data-tier Application .
    Export Data-tier Application в SQL Server Management
  4. Нажимаем Next для пропуска настроек по умолчанию.
  5. Проверим базу данных на совместимость. Для этого щелкнем вкладку Advanced и снимем флаг Select All .
  6. На странице Export Settings выберем параметр Save to Microsoft Azure , чтобы сохранить файл BACKUP в хранилище BLOB-объектов Azure.
  7. Перейдем на портал Azure, чтобы получить сведения об учетной записи хранилища.
    скопировать ключ доступа секрет SQL Azure
  8. Выберите учетную запись хранилища и скопируйте ключ доступа. Вставьте ключ в SQL Server Management Studio и нажмите Connect.
    Подключиться к хранилищу Microsoft Azure
  9. Теперь мы получили доступ х хранилищу BLOB-объектов Azure.
    Доступ к хранилищу блога базы данных SQL Azure - Экспорт данных для многоуровневого приложения - Параметры Exprt
  10. Выберите вкладку Advanced . Здесь можно выбрать объекты, которые мы будем проверять на совместимость. После нажатия кнопок Next и Finish мастер экспорта выполнит проверку совместимости базы данных. Если будут найдены какие-то проблемы, они появятся после проверки схемы.
  11. Если ошибок нет, база данных совместима и готова к миграции. Если появились ошибки, их необходимо исправить прежде чем продолжать процесс миграции.
    SQL Server - экспорт данных для многоуровневого приложения - просмотр результатов
  12. В мастере экспорта выберите сохранение файла BACKPAC на локальный диск и нажмите Next.
    На вкладке «Параметры экспорта» настройте экспорт для сохранения файла BACPAC либо на локальном диске, либо в хранилище BLOB-объектов Azure.
  13. Теперь, когда у нас есть файл BACPAC, мы можем выполнить его импорт. Подключитесь к порталу Azure и откройте страницу базы данных SQL. Перейдите в ресурсную группу и создайте новый экземпляр базы данных Azure.
  14. Выберите Import database на панели инструментов.
  15. Найдите учетную запись хранилища BLOB-объектов и выберите соответствующий контейнер для файла BACPAC.
  16. Введите имя новой базы данных, выберите подписку и размер хранилища и введите учетные данные администратора SQL.
  17. Нажмите ОК, Azure начнет импорт файла BACPAC в новую базу данных.

Microsoft рекомендует этот способ, если размер базы данных не превышает 150 Гб.

Импорт базы данных в SQL Azure с помощью утилиты SqlPackage

Если у вас большая база данных, и ее размер превышает 150 Гб, то Microsoft рекомендует использовать утилиту SqlPackage .

sqlpackage.exe /a:import /tcs:"Data Source=<serverName>.database.windows.net;Initial Catalog=<migratedDatabase>;User Id=<userId>;Password=<password>" /sf:AdventureWorks2016.bacpac /p:DatabaseEdition=Free /p:DatabaseServiceObjective=S0

Эта команда импортирует базу данных AdventureWorks2016 в Azure SQL с именем myMigrateDatabase с уровнем служб Free и уровнем обслуживания S0.

Подробные сведения об утилите sqlpackage.exe можно прочитать на сайте документации Microsoft: https://docs.microsoft.com/ru-ru/sql/tools/sqlpackage/sqlpackage?view=sql-server-ver15

Миграция в SQL Azure с помощью PowerShell

Для миграции базы данных в SQL Azure можно использовать командлет New-AzSqlDatabaseImport . Перед использованием этого командлета необходимо сохранить bacpac-файл в хранилище azure.

Пример команда импорта:

New-AzSqlDatabaseImport -ResourceGroupName "RG01" -ServerName " Server01" -DatabaseName "Database01" -StorageKeyType "StorageAccessKey" -StorageKey "StorageKey01" -StorageUri "http://account01.blob.core.contoso.net/bacpacs/database01.bacpac" -AdministratorLogin "User" -AdministratorLoginPassword $SecureString -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 5000000

Параметры командлета:

  • AdministratorLoginPassword – секрет для доступа к базе данных
  • ResourceGroupName – имя ресурсной группы
  • ServerName – имя сервера
  • StorageKey – секретная строка
  • StorageKeyType – тип ключа доступа, может быть StorageAccessKey или SharedAccessKey.
  • StorageUri – URI для bacpac-файла
  • ServiceObjectiveName — уровень обслуживания
  • DatabaseMaxSizeBytes – максимальный объем базы данных

Увидеть процесс миграции поможет командлет Get-AzSqlDatabaseImportExportStatus . Командлет возвращает статус операции: InProgress или Succeeded.

Отменить операцию можно при помощи командлета Stop-AzSqlDatabaseActivity . Пример использования в скрипте:

function Cancel-AzSQLImportExportOperation
{
param
(
[parameter(Mandatory=$true)][string]$ResourceGroupName
,[parameter(Mandatory=$true)][string]$ServerName
,[parameter(Mandatory=$true)][string]$DatabaseName
)
$Operation = Get-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName | Where-Object {($_.Operation -eq "ExportDatabase" -or $_.Operation -eq "ImportDatabase") -and $_.State -eq "InProgress"}
if(-not [string]::IsNullOrEmpty($Operation))
{
do
{
Write-Host -ForegroundColor Cyan ("Operation " + $Operation.Operation + "with OperationID: " + $Operation.OperationId + " is now " + $Operation.State)
$UserInput = Read-Host -Prompt "Should I cancel this operation? (Y/N)"
} while($UserInput -ne "Y" -and $UserInput -ne "N")
if($UserInput -eq "Y")
{
"Canceling operation"
Stop-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -OperationId $Operation.OperationId
}
else
{"Exiting without canceling the operation"}
}
else
{
"No import or export operation is now running"
}
}

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

Cancel-AzSQLImportExportOperation -ResourceGroupName RG01 –ServerName Server01 -DatabaseName Database01

После миграции базы данных необходимо обеспечить безопасность базы данных. Защита баз данных SQL Azure включает в себя следующие операции:

  • ограничение доступа с помощью правил брандмауэра;
  • настройка администратора Azure Active Directory (Azure AD);
  • управление доступом пользователей с помощью аутентификации SQL или Azure AD и безопасных строк подключения;
  • включение таких функций, как аудит, маскирование данных и шифрование.

Наша следующая статья будет посвящена безопасности в SQL Azure .

Как мы видим, утилиты и другие возможности предоставляют большой выбор инструментов для миграции ваших данных в Microsoft Azure, а администратору остается выбрать подходящую утилиту или скрипт.

Автор статьи Oleg Astakhov при поддержке канала Azure RU Community https://t.me/AzureRUCommunity
EnglishRussianUkrainian