Миграция базы данных с сервера Microsoft SQL Server on-premises в Azure SQL database
Введение
В данном руководстве описан процесс миграции базы данных с сервера Microsoft SQL Server on-premises в Azure SQL database посредством экспорта Data-tier Application и последующего импорта базы Azure SQL database из bacpac-файла.
Перед началом процесса миграции следует обеспечить выполнение следующих условий:
- Логин на сервере on-premises, с которого нужно перенести базу (под которым предполагается выполнять этот перенос) должен входить в роль сервера sysadmin.
- Должны быть созданы учётная запись и подписка в Azure.
Сам процесс миграции состоит из следующих шагов:
- Создание storage account и блоб-контейнера в нём в Azure.
- Экспорт bacpac-файла базы данных с сервера Microsoft SQL Server on-premises в блоб-контейнер.
- Создание инстанса SQL Server в Azure.
Импорт базы данных из bacpac-файла, сохраненного в блоб-контейнере в инстанс SQL Server в Azure
Создание storage account и блоб-контейнера в нём в Azure
-
Открываем в браузере portal.azure.com и после входа в свою учётную запись на домашней странице нажимаем “Create a resource”.
-
На открывшейся странице нажимаем “Storage account”.
- На открывшейся странице “Create a storage account” указываем следующие значения:
Поле |
Значение |
Subscription |
Подписка, в которой создаётся storage account. |
Resource group |
Существующая или новая группа в зависимости от предпочтений. |
Storage account name |
Имя создаваемого storage аккаунта. Должно быть уникальным среди всех storage аккаунтов в Azure, от 3 до 24 символов, только строчные буквы и цифры. На скриншоте ниже - frdsstorageacc. |
Region |
Регион в котором будет создан storage account. Рекомендуется использовать тот же регион, в котором будет создан Azure SQL server. |
Performance |
Standard или Premium (что по сути означает HDD или SSD для создаваемого storage account) в зависимости от потребностей и бюджета. На скриншоте выбрано значение по умолчанию Standard. |
Redundancy |
Куда будет реплицироваться storage account, для обеспечения high availability. Выбирается опция в зависимости от потребностей и бюджета. На скриншоте выбрано значение по умолчанию Geo-redundant storage (GRS). |
Make read access to data available in the event of regional unavailability. |
Оставляем значение по умолчанию. |
-
Нажимаем “Review + create” и после валидации всех настроек ещё раз “Create”. Создание storage account может занять несколько минут.
-
После завершения создания нажимаем“Go to resource”.
-
В левой части страницы созданного storage account нажимаем “Containers”.
-
На открывшейся странице нажимаем “+ Container”.
- Указываем желаемое имя контейнера, остальные настройки оставляем по умолчанию.
9. Нажимаем “Create” - контейнер будет создан и отображён на странице аккаунта.
На этом процесс создания storage account и настройки контейнера можно считать завершенным.
Экспорт bacpac-файла базы данных с сервера Microsoft SQL Server on-premises в блоб-контейнер
- Открываем SSMS и подключаемся к on-premises SQL Server, на котором находится база для переноса.
-
Нажимаем на базу правой кнопкой мыши и в появившемся контекстном меню выбираем Tasks -> Export Data-tier.
-
В появившемся окне Introduction нажимаем “Next”.
-
На вкладке Export Settings выбираем “Save to Microsoft Azure” и нажимаем кнопку “Connect...” для подключения к storage account.
- В появившейся форме для аутентификации в Azure вводим данные своей учётной записи.
- После аутентификации в появившемся окне выбираем подписку, storage account и блоб контейнер, куда будет сохранён bacpac-файл и нажимаем “ОК”.
7. Убеждаемся, что в окне Export Settings указаны правильные значения и нажимаем Next, а затем Finish.
8. Процесс экспорта отображается в окне “Progress”.
9. После завершения экспорта закрываем окно. Можно открыть контейнер на портале Azure и убедиться, что bacpac-файл был успешно
скопирован.
На этом экспорт bacpac-файла в блоб контейнер можно считать завершённым.
Создание инстанса SQL Server в Azure
-
Открываем в браузере portal.azure.com, переходим на домашнюю страницу и нажимаем “Create a resource”.
-
В строке поиска набираем “SQL Server” и нажимаем ввод.
-
В результатах поиска находим ресурс “Azure SQL” и нажимаем на него.
- На открывшейся странице нажимаем “Create”.
5. На открывшейся странице в разделе “How do you plan to use the service?” доступно три опции - “SQL databases”, “SQL managed instances” и “SQL virtual machines”. В данном руководстве рассмотрен процесс создания SQL databases. Нажав на “Show details” на панели “SQL databases”, можно увидеть описание различных типов ресурсов для этой опции - “Single database”, “Elastic pool” и “Database server”. Выбор типа ресурса зависит от потребностей, для данного примера выбираем “Database server” и нажимаем “Create”.
6. На открывшейся странице указываем следующие значения
Поле |
Значение |
Subscription |
Подписка, в которой создаётся сервер. |
Resource group |
Существующая или новая группа в зависимости от предпочтений. |
Server name |
Имя создаваемого сервера. Должно быть уникальным среди всех серверов в Azure, не должно быть зарезервированным словом. Должно содержать только строчные буквы, цифры и “-”, но не может начинаться с “-”. Длина - не более 63 символов. На скриншоте ниже - forrardssql. |
Region |
Регион в котором будет создан сервер. |
Server admin login |
Логин для админа. |
Password |
Пароль для админского логина. |
Confirm password |
Ещё раз пароль. |
7. Нажимаем “Review + create”, а затем ещё раз “Create”. Создание сервера может занять несколько минут.
На этом создание инстанса SQL Server в Azure можно считать завершённым.
Импорт базы данных из bacpac-файла, сохраненного в блоб-контейнере, в инстанс SQL Server в Azure
1. После завершения создания инстанса SQL Server в Azure, на открывшейся странице нажимаем “Go to resource”
2. На открывшейся странице нажимаем “Import database”.
3. На открывшейся странице нужно указать параметры импортируемой базы данных. Для выбора bacpac-файла, созданного ранее, нажимаем “Select backup”.
4. Далее нужно выбрать storage account и блоб-контейнер в нём, куда был экспортирован bacpac-файл, а затем выбрать этот файл и нажать “Select”.
5. Выбранный файл отобразится в окне настройки параметров импорта. Следующим шагом нужно выбрать ресурсы, используемые базой данных. Для этого нажимаем “Configure database”.
6. Ресурсы выбираются в зависимости от планируемой нагрузки и бюджета, для данного примера была выбрана минимальная конфигурация. После выбора конфигурации нажимаем “Apply”.
7. Выбранная конфигурация отобразится в окне настройки параметров импорта.
8. Последним шагом указываем название базы данных, collation, а также логин и пароль для входа на сервер (те значения, которые были заданы на этапе создания сервера). После указания всех параметров нажимаем “ОК”. Импорт базы данных займёт какое-то время в зависимости от количества данных. Следует иметь в виду, что панель с уведомлениями, отображающая прогресс импорта базы через какое-то время может зависнуть и показывать, что импорт продолжается тогда, когда по факту он уже завершился. Для большей надёжности следует проверять состояние базы, открыв её в “All resources”.
На этом процесс миграции базы данных с сервера Microsoft SQL Server on-premises в Azure SQL database можно считать завершённым.
Полезные ссылки
Quickstart: Import a BACPAC file to a database in Azure SQL Database or Azure SQL Managed Instance
https://docs.microsoft.com/en-us/azure/azure-sql/database/database-import?tabs=azure-powershell
Миграция базы данных с сервера Microsoft SQL Server on-premises в Azure SQL managed instance посредством backup/restore
В данном руководстве описан процесс миграции базы данных с сервера Microsoft SQL Server on-premises в Azure SQL managed instance.
Перед началом процесса миграции следует обеспечить выполнение следующих необходимых условий:
Логин на сервере on-premises, с которого нужно перенести базу (под которым предполагается выполнять этот перенос) должен входить в роль сервера sysadmin.
Должна быть создана подписка в Azure.
Должен быть создан ресурс Azure SQL managed instance в Azure.
В Azure SQL managed instance также должен быть создан логин, входящий в роль сервера sysadmin.
Сам процесс миграции состоит из следующих шагов:
- Создание в Azure ресурса storage account, в котором будет размещён бэкап базы данных.
- Бэкап базы данных с сервера on-premises в blob контейнер в Azure storage account.
- Рестор базы данных из blob контейнера в Azure storage account в Azure SQL managed instance.
Создание в Azure ресурса storage account, в котором будет размещён бэкап базы данных
- Открывает в браузере portal.azure.com и входим в свою учётную запись.
- Нажимаем кнопку “Create a resource” в верхней части страницы портала.
3. В открывшейся странице выбираем “Storage account”.
4. На открывшейся странице “Create a storage account” указываем следующие значения.
Поле |
Значение |
Subscription |
Подписка, в которой создаётся storage account. |
Resource group |
Существующая или новая группа в зависимости от предпочтений. |
Storage account name |
Имя создаваемого storage аккаунта. Должно быть уникальным среди всех storage аккаунтов в Azure, от 3 до 24 символов, только строчные буквы и цифры. На скриншоте ниже - frdsstorageacc. |
Region |
Регион в котором будет создан storage account. Рекомендуется использовать тот же регион, в котором создан Azure SQL managed instance. |
Performance |
Standard или Premium (что по сути означает HDD или SSD для создаваемого storage account) в зависимости от потребностей и бюджета. На скриншоте выбрано значение по умолчанию Standard. |
Redundancy |
Куда будет реплицироваться storage account, для обеспечения high availability. Выбирается опция в зависимости от потребностей и бюджета. На скриншоте выбрано значение по умолчанию Geo-redundant storage (GRS). |
Make read access to data available in the event of regional unavailability. |
Оставляем значение по умолчанию. |
5. Нажимаем “Review + create” и после валидации всех настроек ещё раз “Create”. Создание storage account может занять пару минут.
6. После завершения создания жмём “Go to resource”.
7. В левой части страницы созданного storage account нажимаем “Containers”.
8. На открывшейся странице нажимаем “+ Container”.
9. Указываем желаемое имя контейнера, остальные настройки оставляем по умолчанию.
10. Нажимаем “Create” - контейнер будет создан и отображён на странице аккаунта.
На этом процесс создания storage account и настройки контейнера можно считать завершённым. Страницу аккаунта в браузере следует оставить открытой, при бэкапе базы данных она потребуется для получения доступа к контейнеру.
Бэкап базы данных с сервера on-premises в blob контейнер в Azure storage account
- Открываем SSMS и подключаемся к серверу on-premises под логином, входящим в роль сервера sysadmin.
- Открываем окно для выполнения запросов.
- Сначала нужно создать credential, под которым SSMS будет выполнять бэкап базы данных в Azure storage account. Для создания потребуется Access key созданного storage account. Возвращаемся в браузер с открытой страницей созданного аккаунта и нажимаем “Access keys”.
4. В открывшемся окне нажимаем “Show keys”.
Одно из значений Key для key1 или key2 нужно будет использовать на следующем шаге для создания credential.
5. В общем случае запрос для этого выглядит следующим образом
create credential [AzureStorageBackups] with identity = '<storage account name>' , secret = '<storage account key from portal (Access key)>'; go |
Здесь <storage account name> нужно заменить на имя созданного storage account - frdsstorageacc, а <storage account key from portal (Access key)> - на одно из значений Key из предыдущего шага.
create credential [AzureStorageBackups] with identity = 'frdsstorageacc' , secret = 'sidxe6IRr9lJ4i4HaTnlxQYs2xfw5JNhED1nkMqVYvDtElm00K1LY3QldryLjluhgzKHVXH7bvLVUMM2Oy/uSA=='; go |
6. Нажимаем F5 - будет создан credential.
7. Далее нужно получить URL контейнера, который был создан последним шагом при создании storage account в Azure. Переходим в браузер и в левой части страницы аккаунта нажимаем “Containers”.
8. Находим созданный контейнер (на скриншоте - backups) и кликаем по нему правой кнопкой мыши, а затем нажимаем к контекстном меню “Container properties”.
9. На появившейся странице видим URL с адресом контейнера.
10. В рамках данного руководства не рассматриваются различные опции, которые могут быть использованы при бэкапе баз данных, запрос написан в простейшем виде для демонстрационных целей. В общем виде он выглядит так.
backup database [<database name>] to url = N'<container address>/<backup_file_name>' with credential = '<credential>'; go |
Здесь вместо <database name> указывается имя базы данных, вместо <container address> - URL контейнера из предыдущего шага, вместо <backup_file_name> - имя файла бэкапа и вместо <credential> - credential, созданный на шаге 6.
backup database [DataWarehouse] to url = N'https://frdsstorageacc.blob.core.windows.net/backups/DataWarehouse_backup_20210525.bak' with credential = 'AzureStorageBackups'; go |
11. Нажимаем F5 - бэкап будет создан в контейнере внутри Azure storage account.
12. Вернувшись в браузер и открыв страницу контейнера, можно убедиться, что он содержит page blob с указанным на предыдущем шаге именем.
На этом процесс создания бэкапа можно считать завершённым. Страницу storage account в браузере следует оставить открытой, т.к. она понадобится на следующем шаге.
Рестор базы данных из blob контейнера в Azure storage account в Azure SQL managed instance
- В SSMS подключаемся к Azure SQL managed instance под логином, входящим в роль сервера sysadmin.
- Открываем окно для выполнения запросов.
- Перед выполнением рестора нужно создать credential, под которым SSMS будет обращаться к Azure storage account. Credential, создаваемый на этом шаге отличается от того, который создавался для бэкапа базы данных. Возвращаемся на страницу контейнера в браузере и нажимаем “Shared access signature”.
4. На открывшейся странице можно оставить все опции по умолчанию и нажать “Generate SAS token and URL”.
5. На появившейся странице видим Blob SAS token.
6. Запрос для создания credential выглядит так.
create credential [<container address>] with identity = 'SHARED ACCESS SIGNATURE' , secret = '<SAS token>'; go |
Здесь вместо <container address> нужно указать URL контейнера, тот же самый, который использовался при бэкапе, а вместо <SAS token> - значение Blob SAS token из предыдущего шага.
create credential [https://frdsstorageacc.blob.core.windows.net/backups] with identity = 'SHARED ACCESS SIGNATURE' , secret = 'sp=r&st=2021-05-25T12:11:13Z&se=2021-05-25T20:11:13Z&spr=https&sv=2020-02-10&sr=c&sig=9k57zcE2nzO666LPgIee%2Bx%2F%2Ba4lAj%2FbWbb%2FdX81fq04%3D'; |
7. Нажимаем F5 - будет создан credential.
8. Запрос для рестора базы данных:
restore database [DataWarehouse] from url = N'<container address>/<backup_file_name>'; go |
Здесь вместо <container address> нужно указать URL контейнера, а вместо вместо <backup_file_name> - имя файла бэкапа. Полный URL должен получиться точно таким же, какой использовался для бэкапа базы данных на сервере on-premises.
restore database [DataWarehouse] from url = N'https://frdsstorageacc.blob.core.windows.net/backups/DataWarehouse_backup_20210525.bak'; go |
9. Нажимаем F5 - через какое-то время база данных будет восстановлена.
На этом процесс миграции базы данных с сервера Microsoft SQL Server on-premises в Azure SQL managed instance можно считать завершённым.
Полезные ссылки
Backup database to Azure Blob Storage:
https://dallasdbas.com/sql-backups-azure-storage/
Restore database to Azure SQL Managed Instance from Azure Blob Storage:
https://docs.microsoft.com/en-us/azure/azure-sql/managed-instance/restore-sample-database-quickstart