Как проверить состояние операции импорта и экспорта SQL в Azure?

Я выполняю импорт базы данных SQL с помощью файла BacPac в Azure с помощью API управления REST. Мне нужно иметь возможность проверить статус импорта, поскольку Azure не позволяет мне отправлять события, когда импорт выполняется успешно.

Вот документация по выполняемой мной операции: https://docs.microsoft.com/en-us/rest/api/sql/databases%20-%20import%20export/import

Я уже пытался использовать Azure Analysis Services API для проверки состояния операции по идентификатору операции и региону, в котором она произошла. Однако вызов этой конечной точки возвращает мне 404 не найдено.

Вот документация по конечной точке Azure Analysis Services API, которую я пытаюсь вызвать с идентификатором операции импорта и регионом, в котором она произошла: https://docs.microsoft.com/en-us/rest/api/analysisservices/servers/listoperationresults

Я ожидаю, что службы Analysis Services предоставят мне статус операции импорта/экспорта, которую я начал с помощью API управления Azure. Это приводит к ошибке 404, поэтому я не уверен, что вызываю правильную конечную точку API (я дважды проверил, чтобы убедиться, что в URI, который я создаю, нет опечаток, чтобы проверить статус операции).


person Colin Laws    schedule 20.06.2019    source источник
comment
В качестве примечания я знаю, что аналогичный ответ был опубликован на следующий вопрос; однако он не дает решения этой проблемы: stackoverflow.com/questions/46346009/   -  person Colin Laws    schedule 20.06.2019
comment
вам удалось получить статус без powershell?   -  person rfcdejong    schedule 18.09.2020


Ответы (6)


Я знаю, как отслеживать ход операции импорта/экспорта, если вместо этого вы используете PowerShell, но я не знаю, как отслеживать ход выполнения с помощью Azure REST API.

Если вы используете PowerShell, Командлет New-AzureRmSqlDatabaseImport для импорта базы данных или вы используете New-Azure​RmSql​Database​Export для экспорта базы данных, вы можете использовать Get-AzureRmSqlDatabaseImportExportStatus для отслеживания хода выполнения операции импорта/экспорта.

person Alberto Morillo    schedule 21.06.2019
comment
Для моего проекта требуется, чтобы я мог импортировать базы данных в Azure SQL через REST API, а также проверять статус импорта через API. В настоящее время я работаю с Microsoft над поиском решения, и они предложили подход powershell; однако, как я уже упоминал, это, к сожалению, не сработает для моего варианта использования. - person Colin Laws; 21.06.2019
comment
Один из способов использования PowerShell в этом случае без непосредственного выполнения команд из веб-приложения — создание приложения-функции Azure с PoweShell Core. Просто напишите функции для переноса команд PowerShell, которые вы хотите использовать, и вызовите их с помощью Http-клиента. - person Colin Laws; 24.04.2020
comment
@Alberto — AzureRmSqlDatabaseImportExportStatus и его текущая версия Az.Sql.Get-AzSqlDatabaseImportExportStatus ожидают параметр OperationStatusLink, который обычно возвращается командлетом, инициирующим экспорт. Как получить OperationStatusLink для экспорта, который был инициирован, скажем, порталом Azure, и вы хотите проверить его статус? - person Matthew; 02.10.2020

Чтобы отслеживать ход импорта, откройте страницу сервера базы данных и в разделе «Настройки» выберите «История импорта/экспорта». В случае успеха импорт имеет статус Завершено.

https://docs.microsoft.com/bs-latn-ba/azure/sql-database/sql-database-import?view=azureipps&tabs=azure-powershell

person miraba    schedule 17.01.2020
comment
В своем исходном сообщении я указал, что использую Azure REST API для проверки этой информации. - person Colin Laws; 21.01.2020

Я нашел статью Экспорт базы данных SQL Azure, в ней говорилось о том, как для проверки состояния экспорта с помощью API-интерфейса службы импорта/экспорта базы данных SQL Microsoft Azure REST.

Обзор:

На портале управления щелкните базу данных, и на панели инструментов отобразится недавний статус экспорта. На снимке экрана 5 вы увидите, что статус АВТОМАТИЧЕСКИЙ ЭКСПОРТ для моей базы данных отображается как НИКОГДА НЕ ЭКСПОРТИРОВАНО. Это изменится после успешного экспорта. На портале управления щелкните базу данных, и на панели инструментов отобразится недавний статус экспорта. введите здесь описание изображения

После завершения экспорта, который в конечном итоге был запланирован на 1:00, завершен через 5 минут, и статус автоматического экспорта на моей панели инструментов показывает то же самое. (См. скриншот 6). введите здесь описание изображения

Надеюсь это поможет.

person Leon Yue    schedule 21.06.2019
comment
К сожалению, это не помогает. В этой статье показано использование устаревшего портала Azure, но не предлагается пример доступа к статусу импорта через API Azure Resource Manager. - person Colin Laws; 21.06.2019

Для любого API, такого как BeginX(), существует соответствующий API X(), ожидающий завершения. В этом случае вместо BeginImport() используйте Импорт().

Если вы хотите иметь более прямой контроль над опросом, вы можете заглянуть внутрь определения импорта и напрямую использовать нижний уровень, т. е. BeginImportWithHttpMessagesAsync(), а затем GetPostOrDeleteOperationResultAsync():

        public async Task<AzureOperationResponse<ImportExportResponse>> ImportWithHttpMessagesAsync(string resourceGroupName, string serverName, string databaseName, ExportRequest parameters, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            // Send request
            AzureOperationResponse<ImportExportResponse> _response = await BeginImportWithHttpMessagesAsync(resourceGroupName, serverName, databaseName, parameters, customHeaders, cancellationToken).ConfigureAwait(false);

            // Poll for completion
            return await Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken).ConfigureAwait(false);
        }

Этот ответ предназначен специально для .net, но для других языков применяется тот же принцип.

person Jared Moore    schedule 22.06.2019
comment
Я использую PHP, и Microsoft не предоставляет клиентскую библиотеку для этого языка. Есть ли способ сделать это через REST API? - person Colin Laws; 24.06.2019
comment
Да, код, о котором я говорю, — это всего лишь слой над REST API. Ответ POST будет содержать заголовок Location, в котором указан URI состояния операции. Вы можете ПОЛУЧИТЬ этот URI, чтобы проверить прогресс. URI, возвращаемый заголовком Location, намеренно не задокументирован в Swagger, поскольку он должен быть непрозрачным для клиентов, т. е. клиенты не должны ожидать, каким должен быть путь. - person Jared Moore; 12.07.2019
comment
К сожалению, я обнаружил, что, хотя можно проверить статус, вы не можете различить статус «успешно» и «сбой», поскольку URI статуса операции импорта содержит имя импортируемой базы данных в своем пути. Это означает, что в случае сбоя импорта URI вернет 404 (поскольку база данных никогда не была бы создана, поэтому путь не указывает на реальный ресурс). - person Colin Laws; 12.07.2019

Согласно Майкрософт:

У нас есть REST API для операций импорта/экспорта в Azure sql, но у нас нет REST API для определения статуса импорта/экспорта. Клиент должен использовать Powershell для получения статуса

Я также обнаружил, что невозможно узнать, произошел ли сбой импорта с помощью команды Powershell, потому что у нее нет uri базы данных (из-за сбоя импорта), чтобы проверить статус импорта.

person Colin Laws    schedule 21.06.2019

в базе данных перейдите к обзору -> внизу проверьте уведомления -> вы делаете щелчок по изображению

введите здесь описание изображения

введите здесь описание изображения

person Vesper    schedule 02.06.2021
comment
В вопросе указано, что я пытаюсь получить статус через REST API Azure ARM. - person Colin Laws; 28.06.2021