Azure: Blob Storage и SQL – восстановление базы данных из bacpac-файла

Автор: | 30/08/2016
 

azure_logoЕкспорт описан тут>>>, а в посте ниже – выполним импорт из .bacpac в Azure SQL.

Сначала нам прислали файлы в *.bac – пришлось просить пересохранить в *.bacpac, т.к. устанавливать локальный MS SQL сервер для того, что бы восстановить из BAC и сохранить в BACPAC, который “понимает” SQL Azure – желания мало.

Находим файлы бекапов.

Логинимся:

$ azure login
info:    Executing command login
\info:    To sign in, use a web browser to open the page https://aka.ms/devicelogin.

Настраиваем подключение к Storage Account.

Меняем подписку:

$ azure account set e7aac243-***-***-***-c2493a6a3a7b
info:    Executing command account set
info:    Setting subscription to "App PII" with id "e7aac243-***-***-***-c2493a6a3a7b".
info:    Changes saved
info:    account set command OK

Получаем ключи:

$ azure storage account keys list storagename -g resourcegroupname
info:    Executing command storage account keys list
+ Getting storage account keys                                                 
data:    Primary: d1m***g==
data:    Secondary: Sco***Q==

Задаём переменные:

$ export AZURE_STORAGE_ACCOUNT=storagename
$ export AZURE_STORAGE_ACCESS_KEY=d1m***g==

Проверяем Blob-контейнеры:

$ azure storage container list
info:    Executing command storage container list
+ Getting storage containers                                                   
data:    Name            Public-Access  Last-Modified                
data:    --------------  -------------  -----------------------------
data:    pii-service  Blob           Mon, 22 Aug 2016 14:25:25 GMT

И файл-шары:

$ azure storage share list
info:    Executing command storage share list
+ Getting storage shares                                                       
data:    Name     Last-Modified                
data:    -------  -----------------------------
data:    backups  Mon, 22 Aug 2016 10:27:25 GMT

В файлах имеется каталог backups, в котором хранится несколько bacpac-файлов баз данных:

$ azure storage file list --share backups -p bacpac
info:    Executing command storage file list
+ Getting storage files under 'bacpac' of share backups                        
data:    Name                                    Length       Type
data:    --------------------------------------  -----------  ----
data:    App_SessionState_LIVE.bacpac            9241             
data:    meister.bacpac                    19469840081      
data:    meisterAustauschplattform.bacpac  1516302          
data:    meisterIntranet_STA.bacpac        7324255          
data:    meisterUSShop.bacpac              57184            
data:    meisterUSShop_STA.bacpac          58013            
data:    meister_STA.bacpac                5049777614       
data:    CloudPlatformUser_LIVE.bacpac      2845             
data:    CloudPlatformUser_STA.bacpac       21046            
data:    backup_200906240300.bacpac          130711867        
data:    [dbo].[sp_MSobjsearch]                  15691            

Azure SQL умеет выполнять импорт только из Blob-хранилища, поэтому – данные придётся перемещать.

Кроме AzCopy для Windows – ничего толковго не нашёл, потому – просто зальём базы на PC, а потом – обратно, но уже в Blob Storage:

$ azure storage file download --share backups -d . -p bacpac/App_SessionState_LIVE.bacpac
info:    Executing command storage file download
+ Download remote file 'bacpac/App_SessionState_LIVE.bacpac' from share backups to local path 'App_SessionState_LIVE.bacpac'
Percentage: 0% (0B/0B) Average Speed: 0B/S Elapsed Time: 00:00:00              
info:    File saved as App_SessionState_LIVE.bacpac

Повторяем для остальных.

Загружаем bacpac обратно, но теперь в контейнер Blob-хранилища:

$ azure storage blob upload --container containername -f App_SessionState_LIVE.bacpac
info:    Executing command storage blob upload
+ Checking blob App_SessionState_LIVE.bacpac in container containername      
+ Uploading App_SessionState_LIVE.bacpac to blob App_SessionState_LIVE.bacpac in container containername
Percentage: 100.0% (9.02KB/9.02KB) Average Speed: 9.02KB/S Elapsed Time: 00:00:00 
+ Getting Storage blob information                                             
data:    Property       Value                       
data:    -------------  ----------------------------
data:    container      containername              
data:    blob           App_SessionState_LIVE.bacpac
data:    blobType       BlockBlob                   
data:    contentLength  9241                        
data:    contentType    application/octet-stream    
data:    contentMD5     yOCNeKYhHLbERoRHTH+ILQ==    
info:    storage blob upload command OK

Повторяем для остальных.

Далее, т.к. для Linux утилит нет, а Azure CLI не поддерживает работу с Azure SQL (слов нет…) – то горестно вздыхаем,  идём в Azure Portal.

В SQL servers и выбираем нужный сервер:

azure_sql_db_import_1

Жмём Import – и выбираем хранилище, контейнер и объект (bacpac-файл), из которого Azure SQL восстановит базу:

azure_sql_db_import_2

В поля Server admin login и Password – вносим существующего администратора сервера:

azure_sql_db_import_3

Запускаем, готово:

azure_sql_db_import_4

Увы – Azure SQL во время импорта не выводит никаких сообщений о прогрессе, поэтому при импорте базы в 18G – остаётся только ждать.