Как создать подписку на сетку событий для успешного импорта SQL DacPac? - PullRequest
0 голосов
/ 10 июня 2019

Мне не удалось создать подписку на сетку событий для действия "Создать новую базу данных из DacPac".

Я попытался создать подписку на сетку событий для группы ресурсов, содержащей мой SQL Server. Я включил отправку всех событий для группы ресурсов и зарегистрировал веб-крюк для отправки событий в группе ресурсов. Я протестировал подписку на сетку событий, и она отправляет веб-хуки для ResourceWriteSuccess, ResourceDeleteSuccess и т. Д. Поэтому я знаю, что реализация между моим приложением и Azure работает правильно.

Вот полезная нагрузка события, для которого я пытаюсь создать подписку на сетку событий.

{
    "authorization": {
        "action": "Microsoft.Sql/servers/import/action",
        "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.Sql/servers/my-sql-server"
    },
    "caller": "00000000-0000-0000-0000-000000000000",
    "channels": "Operation",
    "claims": {
        "aud": "https://management.azure.com/",
        "iss": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
        "iat": "1560193452",
        "nbf": "1560193452",
        "exp": "1560197352",
        "aio": "82WgYJi2DHbwKEodlmt4/lNKdx2cDQA=",
        "appid": "00000000-0000-0000-0000-000000000000",
        "appidacr": "1",
        "http://schemas.microsoft.com/identity/claims/identityprovider": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
        "http://schemas.microsoft.com/identity/claims/objectidentifier": "00000000-0000-0000-0000-000000000000",
        "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "00000000-0000-0000-0000-000000000000",
        "http://schemas.microsoft.com/identity/claims/tenantid": "00000000-0000-0000-0000-000000000000",
        "uti": "OzdZ2AA_HkCWRjLQ0E9hAQ",
        "ver": "1.0"
    },
    "correlationId": "00000000-0000-0000-0000-000000000000",
    "description": "",
    "eventDataId": "00000000-0000-0000-0000-000000000000",
    "eventName": {
        "value": "EndRequest",
        "localizedValue": "End request"
    },
    "category": {
        "value": "Administrative",
        "localizedValue": "Administrative"
    },
    "eventTimestamp": "2019-06-10T19:09:14.4117972Z",
    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.Sql/servers/my-sql-server/events/00000000-0000-0000-0000-000000000000/ticks/636957905544117972",
    "level": "Informational",
    "operationId": "5b1a45c6-297c-4c1e-81c5-31a10375a9e0",
    "operationName": {
        "value": "Microsoft.Sql/servers/import/action",
        "localizedValue": "Create new database from DacPac"
    },
    "resourceGroupName": "my-resource-group",
    "resourceProviderName": {
        "value": "Microsoft.Sql",
        "localizedValue": "Microsoft SQL"
    },
    "resourceType": {
        "value": "Microsoft.Sql/servers",
        "localizedValue": "Microsoft.Sql/servers"
    },
    "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.Sql/servers/my-sql-server",
    "status": {
        "value": "Accepted",
        "localizedValue": "Accepted"
    },
    "subStatus": {
        "value": "Accepted",
        "localizedValue": "Accepted (HTTP Status Code: 202)"
    },
    "submissionTimestamp": "2019-06-10T19:10:57.1665135Z",
    "subscriptionId": "00000000-0000-0000-0000-000000000000",
    "properties": {
        "statusCode": "Accepted",
        "serviceRequestId": "00000000-0000-0000-0000-000000000000"
    },
    "relatedEvents": []
}

Я ожидал, что при создании подписки на сетку событий для группы ресурсов со всеми включенными событиями будет отправлен веб-крюк для события, показанного выше; тем не менее, я не получаю никаких сообщений о том, что эта операция была успешно выполнена.

1 Ответ

1 голос
/ 13 июня 2019

На основании нашего обсуждения и тестирования:

  1. Импорт базы данных с использованием функции на портале Azure работает очень хорошо, на портале Журнал активности показаны все этапы импорта фонового асинхронного процесса, а также события AEG опубликованы.

  2. Импорт базы данных с использованием REST POST Базы данных - Импорт-экспорт - Импорт ведет себя по-разному в Журнале операций , и AEG отсутствует. событие опубликовано. В следующем примере показана эта проблема:

    POST: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Default-SQL-NorthCentralUS/providers/Microsoft.Sql/servers/h000000000/import?api-version=2014-04-01
    {
      "databaseName": "TestDbImport",
      "edition": "Basic",
      "serviceObjectiveName": "Basic",
      "maxSizeBytes": "2147483648",
      "storageKeyType": "StorageAccessKey",
      "storageKey": "....",
      "storageUri": "https://xxxxxxx.blob.core.windows.net/database/testbacpac.bacpac",
      "administratorLogin": "myadmin",
      "administratorLoginPassword": "********",
      "authenticationType": "SQL"
    }
    

    POST принят, и портал Active Log запрашивает следующее:

activelog1

вышеупомянутое сообщение журнала остается навсегда, это указывает на то, что операция импорта была принята, но больше нет журналов активности от этого фонового процесса импорта. В журнале нет сообщения о том, что процесс завершен и т. Д. Кроме того, в этом процессе импорта не опубликовано ни одного события AEG. С другой стороны, база данных была создана, обновлена ​​и т. Д., Но у нас нет никаких признаков завершения. Обратите внимание, что статус журнала активности должен быть завершен в состоянии Failed или Succeeded .

Я вижу здесь, есть проблема. Мы не можем ожидать события AEG от этой группы ресурсов, если нет сообщений журнала активности. Похоже, что в процессе операции импорта для сообщений журнала активности возможна ошибка инструментария.

Обратите внимание, что другие API REST, такие как Export, Create Database, Delete и т. Д., Работают хорошо, включая все журналы активности и события AEG.

Итак, вот обходной путь для этой преднамеренной ошибки. Он основан на создании пустой базы данных перед использованием операции импорта.

Ниже приведен пример:

Создание пустой базы данных:

    PUT: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Default-SQL-NorthCentralUS/providers/Microsoft.Sql/servers/h000000000/databases/TestDbImport?api-version=2017-10-01-preview
    {
      "location": "NorthCentralUS"
    }

После доставки события AEG об успешной записи базы данных,

 "eventType": "Microsoft.Resources.ResourceWriteSuccess",
 "resourceUri": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Default-SQL-NorthCentralUS/providers/Microsoft.Sql/servers/h000000000/databases/TestDbImport",
 "operationName": "Microsoft.Sql/servers/databases/write",
 "status": "Succeeded",

Операция импорта может быть отправлена ​​(см. Выше URL и полезную нагрузку).

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

enter image description here

Я рекомендую отправить отзыв команде SQL Azure для этой проблемы с операцией импорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...