Миграция базы данных с сервера 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'; go |
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