Przywracanie baz danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu interfejsu API REST

Ten artykuł wyjaśnia, jak przywrócić bazę danych serwera SQL w maszynie wirtualnej Azure z punktu przywracania utworzonego przez Azure Backup za pomocą API RcEST.

Na końcu tego artykułu dowiesz się, jak wykonywać następujące operacje przy użyciu interfejsu API REST:

  • Wyświetlanie punktów przywracania dla kopii zapasowej bazy danych SQL.
  • Wyświetlanie punktów odzyskiwania migawek oraz zakresów odzyskiwania do określonego momentu dla baz danych i instancji SQL.
  • Pobierz bazy danych i ścieżki katalogów danych zawarte w punkcie odzyskiwania.
  • Przywracanie pełnej bazy danych SQL.

Aby wyświetlić scenariusze tworzenia kopii zapasowych i przywracania, które obecnie obsługujemy, zobacz macierz wsparcia. Często zadawane pytania można znaleźć w często zadawanych pytaniach.

Wymagania wstępne

Przyjęto założenie, że utworzono kopię zapasową bazy danych SQL na potrzeby przywracania. Jeśli jej nie masz, zobacz Tworzenie kopii zapasowych baz danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu interfejsu API REST .

W tym artykule użyjemy następujących zasobów:

  • Magazyn usługi Recovery Services: SQLServer2012
  • Grupa zasobów: SQLServerSelfHost
  • Sql Server: sqlserver-0
  • Baza danych SQL: msdb

Przywracanie regionu podstawowego

Aby można było uruchomić regularny proces przywracania w głównym regionie, zobacz następujące sekcje. Aby uzyskać informacje o przywracaniu między regionami, zobacz sekcję Przywracanie między regionami .

Pobierz "ContainerName" i "ProtectedItemName"

W przypadku większości wywołań interfejsu API związanych z przywracaniem należy przekazać wartości parametrów {containerName} i {protectedItemName} identyfikatora URI. Użyj atrybutu ID w treści odpowiedzi operacji GET backupprotectableitems , aby pobrać wartości dla tych parametrów. W naszym przykładzie identyfikator bazy danych, którą chcemy chronić, to:

/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/sqldatabase;mssqlserver;msdb

Wartości są tłumaczone w następujący sposób:

  • {containername}: VMAppContainer; Compute; SQLServerPMDemo; sqlserver-0
  • {protectedItemName}: sqldatabase; mssqlserver; msdb

Pobieranie punktów odzyskiwania dla zarchiwizowanej bazy danych SQL

Aby przywrócić każdą kopię zapasową bazy danych:

  1. Wybierz punkt odzyskiwania, aby wykonać operację przywracania.

  2. Wyświetl listę dostępnych punktów odzyskiwania elementu kopii zapasowej przy użyciu wywołania interfejsu API REST listy punktów odzyskiwania . Jest to operacja GET ze wszystkimi odpowiednimi wartościami.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/protectedItems/{protectedItemName}/recoveryPoints?api-version=2016-12-01
    

    Ustaw wartości identyfikatora URI w następujący sposób:

    • {fabricName}: Azure
    • {vaultName}: SQLServer2012
    • {containerName}: VMAppContainer; Compute; SQLServerPMDemo; sqlserver-0
    • {protectedItemName}: sqldatabase; mssqlserver; msdb
    • {resourceGroupName}: SQLServerSelfHost

    Identyfikator URI GET zawiera wszystkie wymagane parametry. Nie jest wymagana żadna dodatkowa treść żądania.

    GET "https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.RecoveryServices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/sqldatabase;mssqlserver;msdb/recoveryPoints?api-version=2016-12-01"
    

Przykładowa odpowiedź na potrzeby pobierania punktów odzyskiwania

Po przesłaniu identyfikatora URI GET otrzymujesz odpowiedź 200:

HTTP/1.1 200 OK
Pragma: no-cache
X-Content-Type-Options: nosniff
x-ms-request-id: fab6cc6f-db1e-4ac1-acac-fc82ebdb1fdb
x-ms-client-request-id: 6fb93717-2876-47df-b01f-d53af5f08785; 6fb93717-2876-47df-b01f-d53af5f08785
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-reads: 14999
x-ms-correlation-request-id: fab6cc6f-db1e-4ac1-acac-fc82ebdb1fdb
x-ms-routing-request-id: SOUTHINDIA:20180604T061127Z:fab6cc6f-db1e-4ac1-acac-fc82ebdb1fdb
Cache-Control: no-cache
Date: Mon, 04 Jun 2018 06:11:26 GMT
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET

{
  "value": [
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/55515936059579",
      "name": "55515936059579",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2018-06-01T22:15:12Z",
        "type": "Full"
      }
    },
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/62043109781074",
      "name": "62043109781074",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2018-05-31T22:15:08Z",
        "type": "Full"
      }
    },
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/69710749096214",
      "name": "69710749096214",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2018-05-30T22:15:09Z",
        "type": "Full"
      }
    },
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/55459165802209",
      "name": "55459165802209",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2018-05-29T22:15:15Z",
        "type": "Full"
      }
    },
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/56798287946753",
      "name": "56798287946753",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2018-05-28T13:18:15Z",
        "type": "Full"
      }
    },
    {
      "id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/DefaultRangeRecoveryPoint",
      "name": "DefaultRangeRecoveryPoint",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLPointInTimeRecoveryPoint",
        "timeRanges": [
          {
            "startTime": "2018-05-28T11:03:34Z",
            "endTime": "2018-06-02T00:02:31Z"
          }
        ],
        "type": "Log"
      }
    }
  ]
}

Punkt odzyskiwania jest identyfikowany z polem {name} w powyższej odpowiedzi.

Snapshot zapytań i punkty odzyskiwania strumieniowego

Dla instancji SQL i baz danych chronionych migawkami użyj wersji interfejsu API 2024-01-31-preview dla następujących zapytań o punkty odzyskiwania. Zamień symbole zastępcze URI na szczegóły sejfu oraz nazwy kontenerów i chronionych elementów zwrócone przez listowanie chronionych elementów. Zakoduj w formacie URL wyrażenie filtra podczas wysyłania żądania.

Użyj restorePointQueryType do wyboru typów punktów odzyskania:

Value Zwrócono punkty odzyskiwania
FullDifferentialAndSnapshot Pełne, różnicowe i migawkowe punkty odzyskiwania dla bazy danych.
Snapshot Punkty odzyskiwania snapshotów dla bazy danych lub instancji.
FullAndDifferential Przesyłanie pełnych i różnicowych punktów odzyskiwania dla bazy danych.
Log Zakresy czasu odzyskiwania dziennika dla bazy danych.

Wymień pełne, różnicowe i snapshot punkty odzysku

Użyj nazwy chronionego elementu bazy danych, takiej jak SQLDataBase;mssqlserver;testdb:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'FullDifferentialAndSnapshot'

Lista punktów odzyskiwania snapshotów

Dla bazy danych użyj nazwy chronionego elementu bazy danych:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Snapshot'

Na przykład użyj nazwy elementu chronionego przez instancję, takiej jak SQLInstance;mssqlserver:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{instanceProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Snapshot'

Lista punktów odzyskiwania pełnego i różnicowego w trybie strumieniowym

Możesz także określić okno czasowe i uwzględnić miękkie usunięte punkty odzyskiwania:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=startDate eq '2024-02-15 05:12:12 PM' and endDate eq '2024-02-22 05:12:12 PM' and restorePointQueryType eq 'FullAndDifferential' and includeSoftDeletedRP eq 'true'

Zastąp przykładowe daty wymaganym przedziałem czasowym. Tablica value zawiera punkty odzyskiwania o właściwościach takich jak recoveryPointTimeInUTC, type, oraz recoveryPointTierDetails. Informacje o retencji mogą pojawić się w recoveryPointProperties, w tym expiryTime, ruleName, oraz isSoftDeleted.

Zakresy odzyskiwania dziennika zapytań na potrzeby przywracania do określonego momentu

Aby wymienić zakresy odzyskiwania logów dla bazy danych, użyj następującego żądania:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Log'

Odpowiedź zawiera element DefaultRangeRecoveryPoint. Poniższy przykład pokazuje wybrane pola odpowiedzi:

{
  "value": [
    {
      "name": "DefaultRangeRecoveryPoint",
      "properties": {
        "objectType": "AzureWorkloadSQLPointInTimeRecoveryPoint",
        "timeRanges": [
          {
            "startTime": "2024-02-07T17:12:13.2853054Z",
            "endTime": "2024-02-22T15:30:13Z"
          }
        ],
        "type": "Log"
      }
    }
  ]
}

Wybierz czas przywrócenia w zwróconych zakresach.

Wyszukuj zakresy dziennika bazy danych według trybu odzyskiwania

Dla odzyskiwania opartego na strumieniowaniu określ recoveryMode eq 'WorkloadRecovery':

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Log' and recoveryMode eq 'WorkloadRecovery'

Dla odzyskiwania opartego na migawkach określ recoveryMode eq 'SnapshotAttachAndRecover':

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Log' and recoveryMode eq 'SnapshotAttachAndRecover'

Oba zapytania zwracają pokazany wcześniej format odpowiedzi zakresu odzyskiwania dziennika.

Wyszukiwanie zakresów dziennika bazy danych dla przywracania instancji

Na przykład w przypadku przywracania do określonego punktu w czasie najpierw wybierz punkt odzyskiwania migawki instancji i pobierz dołączone do niego bazy danych. Dla każdej uwzględnionej bazy danych odpytaj jej zakresy logów przy użyciu wybranych szczegółów migawki bazowej:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2024-01-31-preview&$filter=restorePointQueryType eq 'Log' and recoveryMode eq 'SnapshotAttachAndRecover' and baseSnapshotRPId eq '{baseSnapshotRPId}' and baseRPDatasourceId eq '{baseRPDatasourceId}'
  • {baseSnapshotRPId}: name punkt odzyskiwania migawki wybranej instancji.
  • {baseRPDatasourceId}: protectedItemDataSourceId chronionego elementu instancji, a nie identyfikator źródła danych bazy podrzędnej.
  • {databaseProtectedItemName}: Chroniona nazwa elementu podrzędnej bazy danych, której dotyczy zapytanie.

Uzyskaj bazy danych i ścieżki dysków w migawce instancji

Pobierz wybrany punkt odzyskiwania instancji, aby uzyskać zawarte w nim bazy danych i ścieżki dysków. Używaj tych samych metadanych przy przygotowywaniu przywracania migawek instancji lub przywracania punktu w czasie instancji:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{instanceProtectedItemName}/recoveryPoints/{snapshotRecoveryPointId}?api-version=2024-01-31-preview

{snapshotRecoveryPointId} jest name punktem odzyskiwania. Poniższy przykład pokazuje wybrane pola odpowiedzi:

{
  "name": "2265756871711897922",
  "properties": {
    "objectType": "AzureWorkloadSQLRecoveryPoint",
    "extendedInfo": {
      "dataDirectoryTimeInUTC": "2024-03-13T08:03:25Z",
      "dataDirectoryPaths": [
        {
          "type": "DiskDrives",
          "path": "F:\\"
        },
        {
          "type": "DiskDrives",
          "path": "G:\\"
        }
      ],
      "includedDatabases": [
        {
          "datasourceId": "2265838378698362078",
          "datasourceName": "MSSQLSERVER;user1"
        }
      ],
      "snapshotRecoveryPointInfo": {}
    },
    "recoveryPointTimeInUTC": "2024-03-13T08:03:25Z",
    "type": "SnapshotFull",
    "recoveryPointTierDetails": [
      {
        "type": "InstantRP",
        "status": "Valid"
      }
    ]
  }
}

extendedInfo.includedDatabases identyfikuje bazy danych zarejestrowane w wybranej migawce. extendedInfo.dataDirectoryPaths identyfikuje ścieżki dysku dostępne dla zaawansowanej konfiguracji przywracania.

Pobierz ścieżki bazy danych do zaawansowanej konfiguracji przywracania

Aby uzyskać szczegóły punktu odzyskiwania bazy danych dla strumieniowania lub migawki:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints/{recoveryPointId}?api-version=2023-02-01

Sprawdź properties.extendedInfo.dataDirectoryPaths pod kątem ścieżek plików danych i dziennika oraz nazw logicznych. Na przykład:

{
  "dataDirectoryTimeInUTC": "2024-03-04T18:03:35Z",
  "dataDirectoryPaths": [
    {
      "type": "Data",
      "path": "F:\\DATA\\TestDB1.mdf",
      "logicalName": "TestDB1"
    },
    {
      "type": "Log",
      "path": "F:\\LOG\\TestDB1_log.ldf",
      "logicalName": "TestDB1_log"
    }
  ],
  "snapshotRecoveryPointInfo": {}
}

Do przywracania punktów w czasie bazy danych należy żądać rozszerzonych informacji przy wymienianiu zakresów odzyskiwania logów. Poniższy przykład wykorzystuje odzyskiwanie oparte na migawkach:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/{databaseProtectedItemName}/recoveryPoints?api-version=2023-02-01&$filter=startDate eq '2024-02-06 07:50:56 AM' and endDate eq '2024-03-07 07:23:05 AM' and extendedInfo eq 'true' and restorePointQueryType eq 'Log' and recoveryMode eq 'SnapshotAttachAndRecover'

Zamień przykładowe daty na wymagane okno zapytania. Odpowiedź zawiera zakresy dziennika odzyskiwania i properties.extendedInfo, w tym dataDirectoryTimeInUTC, dataDirectoryPaths oraz snapshotRecoveryPointInfo.

Poprzedzające zapytania pobierają punkty odzyskiwania i metadane konfiguracji przywracania. Poniższa sekcja opisuje istniejące żądanie przywrócenia strumieniowej bazy danych.

Odzyskiwanie bazy danych przy użyciu interfejsu API REST

Uruchomienie przywracania to żądanie POST. Aby wykonać tę operację, użyj trigger restore REST API.

POST https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/protectedItems/{protectedItemName}/recoveryPoints/{recoveryPointId}/restore?api-version=2019-05-13

Wartości {containerName} i {protectedItemName} są ustawione tutaj, a identyfikator recoveryPointID to pole {name} punktu odzyskiwania, o którym wspomniano powyżej.

POST https://management.azure.com/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerSelfHost/providers/Microsoft.RecoveryServices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/protectedItems/sqldatabase;mssqlserver;msdb/recoveryPoints/56798287946753/restore?api-version=2019-05-13'

Tworzenie treści żądania

Przykład treści żądania przywrócenia bazy danych do tego samego katalogu danych

Poniższe żądanie definiuje właściwości wymagane do inicjowania przywracania bazy danych SQL do tego samego katalogu.

{
   "properties":{
        "objectType":"AzureWorkloadSQLRestoreRequest",
        "shouldUseAlternateTargetLocation":false,
        "isNonRecoverable":false,
        "targetInfo":{"ContainerName": "compute;SQLServerPMDemo;sqlserver-0", "DatabaseName" : "SQLINSTANCE/msdb"},
        "alternateDirectoryPaths":null,
        "isFallbackOnDefaultDirectoryEnabled":true,
        "recoveryType":"AlternateLocation",
        "sourceResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerPMDemo/providers/Azure/virtualmachines/compute;SQLServerPMDemo;sqlserver-0"       
    }
}
Przykład treści żądania przywrócenia bazy danych do alternatywnego katalogu danych

Poniższe żądanie definiuje właściwości wymagane do inicjowania przywracania bazy danych SQL do tego samego katalogu.

{
    "properties":{ 
        "objectType":"AzureWorkloadSQLRestoreRequest",
        "shouldUseAlternateTargetLocation":true,
        "isNonRecoverable":false,
        "targetInfo":
        {
            "overwriteOption":"Overwrite","containerName":"compute;oneboxrg;oneboxvm","databaseName":"SQLINSTANCE/msdb"},
            "alternateDirectoryPaths":[{"mappingType":"Log","sourcePath":"C:\\SQLfiles\\Default.ldf","targetPath":"C:\\SQLFiles\\Temp.ldf"}],
            "recoveryType":"AlternateLocation",
            "sourceResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerPMDemo/providers/Azure/virtualmachines/compute;SQLServerPMDemo;sqlserver-0"
        }
    }
}

Odpowiedź

Wyzwalanie operacji przywracania jest operacją asynchroniczną. Ta operacja tworzy kolejną operację, która musi być śledzona oddzielnie.

Zwraca dwie odpowiedzi: 202 (Zaakceptowane) podczas tworzenia innej operacji i 200 (OK) po zakończeniu tej operacji.

Przykład odpowiedzi
Status Code:
OK

Headers:
Pragma                        : no-cache
Cache-Control                 : no-cache
Server                        : Microsoft-IIS/10.0,Microsoft-IIS/10.0
X-Content-Type-Options        : nosniff
x-ms-request-id               : f17973f5-c788-482f-8aad-6bb50e647a2e
x-ms-client-request-id        : b0356a0e-c68d-4ac2-a53f-4f546685146d,b0356a0e-c68d-4ac2-a53f-4f546685146d
X-Powered-By                  : ASP.NET
Strict-Transport-Security     : max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-resource-requests: 149
x-ms-correlation-request-id   : f17973f5-c788-482f-8aad-6bb50e647a2e
x-ms-routing-request-id       : SOUTHINDIA:20210801T104711Z:f17973f5-c788-482f-8aad-6bb50e647a2e
Date                          : Sun, 01 Aug 2021 10:47:11 GMT

{
    "id":"/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerSelfHost/providers/Microsoft.RecoveryServices/vaults/SQLServer2012/backupJobs/0bda1a53-73fa-427e-9a1c-72a2016adee3",
    "name": "0bda1a53-73fa-427e-9a1c-72a2016adee3",
    "type": "Microsoft.RecoveryServices/vaults/backupJobs",
    "properties": {
    "jobType": "AzureWorkloadJob",
    "actionsInfo": [
      1
    ],
    "workloadType": "SQLDataBase",
    "duration": "PT1.6543659S",
    "extendedInfo": {
      "tasksList": [
        {
          "taskId": "Transfer data from vault",
          "status": "InProgress"
        }
      ],
      "propertyBag": {
        "Job Type": "Recovery to the original database"
      }
    },
    "isUserTriggered": true,
    "entityFriendlyName": "msdb [sqlserver-0]",
    "backupManagementType": "AzureWorkload",
    "operation": "Restore",
    "status": "InProgress",
    "startTime": "2021-08-01T10:47:09.5865449Z",
    "activityId": "b0356a0e-c68d-4ac2-a53f-4f546685146d"
  }
}

Przywracanie między regionami

Jeśli włączono przywracanie między regionami, punkty odzyskiwania również zostaną zreplikowane do sparowanego regionu pomocniczego. Następnie możesz pobrać te punkty odzyskiwania i zainicjować przywracanie na maszynie, która znajduje się w regionie współpracującym. W przypadku normalnego przywracania maszyna docelowa powinna być zarejestrowana w magazynie docelowym w regionie pomocniczym. W poniższych krokach opisano pełny proces:

  1. Pobierz elementy kopii zapasowej replikowane do regionu pomocniczego.

    W poniższym przykładzie musisz mieć następujące elementy:

    • Kontener: VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0
    • Element chroniony: sqldatabase; mssqlserver; msdb) dla bazy danych, która musi zostać przywrócona, wykonując kroki wymienione wcześniej w tym dokumencie.
  2. Pobierz punkty odzyskiwania (odrębne i/lub dzienniki), które są replikowane do regionu pomocniczego.

  3. Wybierz serwer docelowy, który jest zarejestrowany w magazynie w sparowanym regionie pomocniczym.

  4. Wyzwalaj przywracanie do tego serwera i śledź go przy użyciu identyfikatora JobId.

Uwaga / Notatka

Punkt odzyskiwania (RPO) dla danych kopii zapasowej, który ma być dostępny w regionie zapasowym, wynosi 12 godzin. W związku z tym po włączeniu funkcji CRR docelowy punkt odzyskiwania dla regionu pomocniczego wynosi 12 godzin plus czas trwania częstotliwości rejestrowania dzienników (który można ustawić na co najmniej 15 minut).

Pobierz unikalne punkty odzyskiwania z regionu pomocniczego

Użyj interfejsu API List Recovery Points, aby pobrać listę dostępnych punktów odzyskiwania dla bazy danych w regionie zapasowym. W poniższym przykładzie opcjonalny filtr jest stosowany do pobierania pełnych i różnicowych punktów odzyskiwania w danym zakresie czasowym.

GET "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerSelfHost/providers/Microsoft.RecoveryServices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/recoveryPoints/?$filter=startDate eq'2021-07-25 08:41:32 AM' and endDate eq '2021-08-01 08:41:45 AM' and restorePointQueryType eq 'FullAndDifferential' and extendedInfo eq 'True'&api-version=2018-12-20"

Przykładowa odpowiedź dla odczytu punktów odzyskiwania

Headers:
Pragma                        : no-cache
X-Content-Type-Options        : nosniff
x-ms-request-id               : 66b3fbb4-e38a-4a4b-98c7-56db66ab52e6
x-ms-client-request-id        : 35eb7834-8b5c-4a2c-adda-eee2ed02eb08,35eb7834-8b5c-4a2c-adda-eee2ed02eb08
Strict-Transport-Security     : max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-resource-requests: 149
x-ms-correlation-request-id   : 66b3fbb4-e38a-4a4b-98c7-56db66ab52e6
x-ms-routing-request-id       : SOUTHINDIA:20210801T102906Z:66b3fbb4-e38a-4a4b-98c7-56db66ab52e6
Cache-Control                 : no-cache
Date                          : Sun, 01 Aug 2021 10:29:06 GMT
Server                        : Microsoft-IIS/10.0
X-Powered-By                  : ASP.NET

Body:
{
  "value": [
    {
      "id":
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerSelfHost/providers/Microsoft.RecoveryServices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/RecoveryPoints/932604119111216382",
      "name": "932604119111216382",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2021-07-31T16:33:48Z",
        "type": "Full"
      }
    },
    {
      "id":
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerSelfHost/providers/Microsoft.RecoveryServices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;compute;SQLServerPMDemo;sqlserver-0/protectedItems/SQLDataBase;mssqlserver;msdb/RecoveryPoints/932599942005436803",
      "name": "932599942005436803",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/recoveryPoints",
      "properties": {
        "objectType": "AzureWorkloadSQLRecoveryPoint",
        "recoveryPointTimeInUTC": "2021-07-30T16:33:49Z",
        "type": "Full"
      }
    },
.....

Punkt odzyskiwania jest identyfikowany z polem {name} w powyższej odpowiedzi.

Uzyskiwanie tokenu dostępu

Aby wykonać przywracanie między regionami, należy wymagać tokenu dostępu, aby umożliwić właściwą komunikację między usługami Azure Backup. Aby uzyskać token dostępu, wykonaj następujące kroki:

  1. Użyj interfejsu API Microsoft Entra Properties , aby pobrać właściwości Microsoft Entra dla regionu zapasowego (westus w poniższym przykładzie).

    GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/westus/backupAadProperties?api-version=2018-12-20
    

    Zwrócona odpowiedź ma następujący format:

    {
      "properties": {
        "tenantId": "00000000-0000-0000-0000-000000000000",
        "audience": "https://RecoveryServices/IaasCoord/aadmgmt/wus",
        "servicePrincipalObjectId": "00000000-0000-0000-0000-000000000000"
      }
    }
    
  2. Użyj interfejsu API uzyskiwania tokenu dostępu, aby uzyskać token dostępu w celu umożliwienia komunikacji między usługami Azure Backup.

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/protectedItems/{protectedItemName}/recoveryPoints/{recoveryPointId}/accessToken?api-version=2018-12-20
    

    Aby wykonać żądanie, wklej zawartość odpowiedzi zwróconej przez Microsoft Entra Properties API w poprzednim kroku.

    Zwrócony format odpowiedzi jest następujący:

    {
      "protectableObjectUniqueName": "MSSQLSERVER/model",
        "protectableObjectFriendlyName": "msdb",
        "protectableObjectWorkloadType": "SQL",
        "protectableObjectProtectionState": "Protected",
        "protectableObjectContainerHostOsName": "sqlserver-0",
        "protectableObjectParentLogicalContainerName": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/sqlserver-0",
        "containerId": "0000000",
        "policyName": "HourlyLogBackup",
        "policyId": "00000000-0000-0000-0000-000000000000",
        "objectType": "WorkloadCrrAccessToken",
        "accessTokenString": "<access-token-string>",
        "subscriptionId": "00000000-0000-0000-0000-000000000000",
        "resourceGroupName": "SQLServerSelfHost",
        "resourceName": "SQLServer2012",
        "resourceId": "0000000000000000000",
        "protectionContainerId": 0000000,
        "recoveryPointId": "932603497994988273",
        "recoveryPointTime": "7/31/2021 4:33:17 PM",
        "containerName": "Compute;SQLServerPMDemo;sqlserver-0",
        "containerType": "VMAppContainer",
        "backupManagementType": "AzureWorkload",
        "datasourceType": "SQLDataBase",
        "datasourceName": "msdb",
        "datasourceId": "932350676859704517",
        "datasourceContainerName": "Compute;SQLServerPMDemo;sqlserver-0",
        "coordinatorServiceStampId": "00000000-0000-0000-0000-000000000000",
        "coordinatorServiceStampUri": "https://pod01-wbcm1.eus.backup.windowsazure.com",
        "protectionServiceStampId": "00000000-0000-0000-0000-000000000000",
        "protectionServiceStampUri": "https://pod01-prot1j-int.eus.backup.windowsazure.com",
        "rpOriginalSAOption": false,
        "rpIsManagedVirtualMachine": false,
        "bMSActiveRegion": "EastUS"
    }
    

Przywracanie dysków do regionu pomocniczego

Użyj interfejsu API wyzwalacza przywracania między regionami , aby przywrócić element do regionu pomocniczego.

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{azureRegion}/backupCrossRegionRestore?api-version=2018-12-20

Treść żądania powinna zawierać dwie części:

  1. crossRegionRestoreAccessDetails: wklej blok właściwości odpowiedzi z żądania interfejsu API uzyskiwania tokenu dostępu wykonanego w poprzednim kroku, aby wypełnić ten segment treści żądania.

  2. restoreRequest: Aby wypełnić segment restoreRequest w treści żądania, należy przekazać szczegóły kontenera (zarejestrowanego w magazynie w regionie pomocniczym), do którego ma zostać przywrócona baza danych, wraz z nazwą, pod którą przywrócona baza danych powinna być przechowywana. Aby wykonać przywracanie pełnej kopii zapasowej do regionu pomocniczego, określ AlternateLocation jako typ odzyskiwania.

Przykładowa treść żądania w celu przywrócenia dysków maszyny wirtualnej do regionu pomocniczego jest następująca:

  {
  "crossRegionRestoreAccessDetails": {
	      "protectableObjectUniqueName": "MSSQLSERVER/model",
        "protectableObjectFriendlyName": "msdb",
        "protectableObjectWorkloadType": "SQL",
        "protectableObjectProtectionState": "Protected",
        "protectableObjectContainerHostOsName": "sqlserver-0",
        "protectableObjectParentLogicalContainerName": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/sqlserver-0",
        "containerId": "0000000",
        "policyName": "HourlyLogBackup",
        "policyId": "00000000-0000-0000-0000-000000000000",
        "objectType": "WorkloadCrrAccessToken",
        "accessTokenString": "<access-token-string>",
        "subscriptionId": "00000000-0000-0000-0000-000000000000",
        "resourceGroupName": "SQLServerSelfHost",
        "resourceName": "SQLServer2012",
        "resourceId": "0000000000000000000",
        "protectionContainerId": 0000000,
        "recoveryPointId": "932603497994988273",
        "recoveryPointTime": "7/31/2021 4:33:17 PM",
        "containerName": "Compute;SQLServerPMDemo;sqlserver-0",
        "containerType": "VMAppContainer",
        "backupManagementType": "AzureWorkload",
        "datasourceType": "SQLDataBase",
        "datasourceName": "msdb",
        "datasourceId": "932350676859704517",
        "datasourceContainerName": "Compute;SQLServerPMDemo;sqlserver-0",
        "coordinatorServiceStampId": "00000000-0000-0000-0000-000000000000",
        "coordinatorServiceStampUri": "https://pod01-wbcm1.eus.backup.windowsazure.com",
        "protectionServiceStampId": "00000000-0000-0000-0000-000000000000",
        "protectionServiceStampUri": "https://pod01-prot1j-int.eus.backup.windowsazure.com",
        "rpOriginalSAOption": false,
        "rpIsManagedVirtualMachine": false,
        "bMSActiveRegion": "EastUS"
    },
    "restoreRequest": {
        "objectType": "AzureWorkloadSQLRestoreRequest",
        "shouldUseAlternateTargetLocation": true,
        "isNonRecoverable": false,
        "alternateDirectoryPaths": [],
        "recoveryType": "AlternateLocation",
        "sourceResourceId":"/subscriptions/600000000-0000-0000-0000-000000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/sqlserver-0",
        "targetInfo": {
            "overwriteOption": "FailOnConflict",
          "containerId":"/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RestoreRG/providers/Microsoft.RecoveryServices/vaults/wusRestoreVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;restorerg;wusrestorevm",
          "databaseName": "MSSQLSERVER/msdb_restored_8_1_2021_1758"
        }
      }
  }

Wykonaj przywracanie międzyregionowe w określonym momencie dla instancji SQL chronionej polityką snapshot

Użyj tego przepływu, aby przywrócić bazy danych zawarte w snapshotzie instancji SQL i odtworzyć kopie zapasowe logów do wspólnego punktu w czasie w regionie wtórnym.

Important

Wybrany punkt w czasie musi być objęty zakresem logów każdej bazy danych, którą chcesz odzyskać przy użyciu migawki instancji. Poproś o token dostępu dla chronionego elementu wystąpienia SQL oraz wybranego konkretnego punktu odzyskiwania migawki.

Poznaj migawkę instancji i zakresy logów

  1. Wypisz punkty odzyskiwania dla chronionego elementu wystąpienia SQL.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLInstance%3Bmssqlserver/recoveryPoints?api-version=2023-01-15
    

    Wybierz punkt odzyskania, którego odpowiedź zawiera wszystkie następujące wartości:

    • Parametr properties.type ma wartość SnapshotFull.
    • Parametr properties.crossRegionRestoreState ma wartość Supported.
    • properties.recoveryPointTierDetails zawiera wpis HardenedRP, którego status to Valid.
  2. Pobierz wybrany punkt odzyskiwania, aby pobrać jego rozszerzone autoryzowane informacje.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLInstance%3Bmssqlserver/recoveryPoints/{instanceSnapshotRecoveryPointId}?api-version=2023-01-15
    

    Użyj properties.extendedInfo.includedDatabases do identyfikacji baz danych potomnych zawartych w migawce. Odpowiedź zawiera także ścieżki dysku źródłowe oraz metadane migawkowe potrzebne do przywrócenia.

  3. Pobierz chroniony element instancji SQL i zapisz properties.protectedItemDataSourceId.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLInstance%3Bmssqlserver?api-version=2023-01-15
    
  4. Dla każdej uwzględnionej bazy danych należy podać zakres logów powiązany z wybraną migawką instancji.

    GET "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLDataBase%3Bmssqlserver%3B{databaseName}/recoveryPoints?api-version=2023-01-15&$filter=restorePointQueryType eq 'Log' and recoveryMode eq 'SnapshotAttachAndRecover' and baseSnapshotRPId eq '{instanceSnapshotRecoveryPointId}' and baseRPDatasourceId eq '{instanceProtectedItemDataSourceId}'"
    

    Odpowiedź zawiera element DefaultRangeRecoveryPoint. Wybierz UTC pointInTime, który mieści się w zwróconym properties.timeRanges dla każdej przywracanej bazy danych.

Pobierz token dostępu do snapshotu instancji

Pobierz właściwości Microsoft Entra dla regionu wtórnego.

GET "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{secondaryRegion}/backupAadProperties?api-version=2023-01-15&$filter=backupManagementType eq 'AzureWorkload'"

Przekaż zwrócony obiekt properties w treści żądania, gdy wysyłasz żądanie o token dostępu dla instancji SQL i wybranego punktu odzyskiwania migawki.

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLInstance%3Bmssqlserver/recoveryPoints/{instanceSnapshotRecoveryPointId}/accessToken?api-version=2023-01-15
{
  "properties": {
    "tenantId": "<tenant-id>",
    "audience": "<audience-returned-by-the-service>",
    "servicePrincipalObjectId": "<service-principal-object-id>",
    "identityVersion": 1
  }
}

Wyzwalanie przywracania do punktu w czasie instancji SQL

Użyj AzureWorkloadSQLPointInTimeRestoreRequest z SnapshotAttachAndRecover. Skopiuj pełny properties obiekt z odpowiedzi tokenu dostępu do crossRegionRestoreAccessDetails.

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{secondaryRegion}/backupCrossRegionRestore?api-version=2023-01-15
{
  "crossRegionRestoreAccessDetails": {
    "objectType": "WorkloadCrrAccessToken",
    "accessTokenString": "<access-token-string>",
    "recoveryPointId": "<instance-snapshot-recovery-point-id>",
    "datasourceType": "SQLInstance",
    "datasourceName": "mssqlserver"
  },
  "restoreRequest": {
    "objectType": "AzureWorkloadSQLPointInTimeRestoreRequest",
    "shouldUseAlternateTargetLocation": true,
    "recoveryMode": "SnapshotAttachAndRecover",
    "isNonRecoverable": false,
    "recoveryType": "AlternateLocation",
    "sourceResourceId": "/subscriptions/{subscriptionId}/resourceGroups/{sourceVmResourceGroup}/providers/Microsoft.Compute/virtualMachines/{sourceVmName}",
    "targetVirtualMachineId": "/subscriptions/{subscriptionId}/resourceGroups/{targetVmResourceGroup}/providers/Microsoft.Compute/virtualMachines/{targetVmName}",
    "targetResourceGroupName": "{targetVmResourceGroup}",
    "pointInTime": "2026-08-09T17:18:23.500Z",
    "alternateDirectoryPaths": [
      {
        "mappingType": "DiskDrives",
        "sourcePath": "F:\\",
        "targetPath": "J:\\"
      },
      {
        "mappingType": "DiskDrives",
        "sourcePath": "G:\\",
        "targetPath": "K:\\"
      }
    ],
    "targetInfo": {
      "containerId": "/subscriptions/{subscriptionId}/resourceGroups/{targetVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{targetVaultName}/backupFabrics/Azure/protectionContainers/{targetContainerName}",
      "overwriteOption": "FailOnConflict",
      "databaseName": "MSSQLSERVER/*_{databaseNameSuffix}"
    },
    "userAssignedManagedIdentityDetails": {
      "identityArmId": "/subscriptions/{subscriptionId}/resourceGroups/{identityResourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}",
      "userAssignedIdentityProperties": {
        "clientId": "<managed-identity-client-id>",
        "principalId": "<managed-identity-principal-id>"
      }
    }
  }
}

Skrócony obiekt crossRegionRestoreAccessDetails powyżej pokazuje pola identyfikujące scenariusz instancji. W rzeczywistym żądaniu skopiuj każdą właściwość zwróconą przez interfejs API tokena dostępu, w tym tokenExtendedInformation, gdy jest obecny.

Wykonaj międzyregionalne przywracanie logów dla bazy potomnej chronionej polityką snapshot

Użyj tego przepływu, aby przywrócić jedną podrzędną bazę danych do wybranego punktu w czasie, gdy baza danych jest chroniona w ramach zasad migawki instancji SQL.

Important

W przypadku przywracania dziennika bazy podrzędnej zażądaj tokena dostępu do chronionego elementu podrzędnego SQLDataBase oraz DefaultRangeRecoveryPoint. Nie żądaj tokena w punkcie odzyskiwania nadrzędnej instancji SQL.

Odkryj zakres logów podrzędnej bazy danych

Wymień punkty odzyskiwania dziennika dla chronionego elementu podrzędnej bazy danych.

GET "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLDataBase%3Bmssqlserver%3B{databaseName}/recoveryPoints?api-version=2023-01-15&$filter=restorePointQueryType eq 'Log'"

Odpowiedź zawiera DefaultRangeRecoveryPoint z jednym lub większą liczbą zakresów UTC:

{
  "value": [
    {
      "name": "DefaultRangeRecoveryPoint",
      "properties": {
        "objectType": "AzureWorkloadSQLPointInTimeRecoveryPoint",
        "timeRanges": [
          {
            "startTime": "2026-07-26T19:25:29.9811766Z",
            "endTime": "2026-08-10T18:31:23Z"
          }
        ],
        "type": "Log"
      }
    }
  ]
}

Wybierz UTC pointInTime z jednego ze zwróconych zakresów.

Pobierz token dostępu do zakresu dziennika podrzędnej bazy danych

Pobierz właściwości Microsoft Entra dla regionu wtórnego, używając filtra obciążeń Azure pokazanego w sekcji instancji SQL. Przekaż zwrócony obiekt properties podczas żądania tokena dostępu do podrzędnej bazy danych.

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{sourceVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{sourceVaultName}/backupFabrics/Azure/protectionContainers/{sourceContainerName}/protectedItems/SQLDataBase%3Bmssqlserver%3B{databaseName}/recoveryPoints/DefaultRangeRecoveryPoint/accessToken?api-version=2023-01-15

Zwrócone właściwości tokena dostępu identyfikują wybraną bazę potomną z wartościami takimi jak:

{
  "properties": {
    "protectableObjectUniqueName": "MSSQLSERVER/{databaseName}",
    "protectableObjectFriendlyName": "{databaseName}",
    "objectType": "WorkloadCrrAccessToken",
    "accessTokenString": "<access-token-string>",
    "recoveryPointId": "DefaultRangeRecoveryPoint",
    "datasourceType": "SQLDataBase",
    "datasourceName": "{databaseName}"
  }
}

Wyzwól przywracanie dziennika bazy potomnej

Użyj AzureWorkloadSQLPointInTimeRestoreRequest z SnapshotAttachAndRecover. Docelowa nazwa bazy danych musi używać formatu ścieżki MSSQLSERVER/{targetDatabaseName} logicznej.

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{secondaryRegion}/backupCrossRegionRestore?api-version=2023-01-15
{
  "crossRegionRestoreAccessDetails": {
    "objectType": "WorkloadCrrAccessToken",
    "accessTokenString": "<access-token-string>",
    "recoveryPointId": "DefaultRangeRecoveryPoint",
    "datasourceType": "SQLDataBase",
    "datasourceName": "{databaseName}"
  },
  "restoreRequest": {
    "objectType": "AzureWorkloadSQLPointInTimeRestoreRequest",
    "shouldUseAlternateTargetLocation": true,
    "recoveryMode": "SnapshotAttachAndRecover",
    "isNonRecoverable": false,
    "recoveryType": "AlternateLocation",
    "sourceResourceId": "/subscriptions/{subscriptionId}/resourceGroups/{sourceVmResourceGroup}/providers/Microsoft.Compute/virtualMachines/{sourceVmName}",
    "targetVirtualMachineId": "/subscriptions/{subscriptionId}/resourceGroups/{targetVmResourceGroup}/providers/Microsoft.Compute/virtualMachines/{targetVmName}",
    "targetResourceGroupName": "{targetVmResourceGroup}",
    "pointInTime": "2026-08-03T06:58:26Z",
    "alternateDirectoryPaths": [
      {
        "mappingType": "DiskDrives",
        "sourcePath": "F:\\",
        "targetPath": "J:\\"
      },
      {
        "mappingType": "DiskDrives",
        "sourcePath": "G:\\",
        "targetPath": "K:\\"
      }
    ],
    "targetInfo": {
      "containerId": "/subscriptions/{subscriptionId}/resourceGroups/{targetVaultResourceGroup}/providers/Microsoft.RecoveryServices/vaults/{targetVaultName}/backupFabrics/Azure/protectionContainers/{targetContainerName}",
      "overwriteOption": "FailOnConflict",
      "databaseName": "MSSQLSERVER/{targetDatabaseName}"
    },
    "userAssignedManagedIdentityDetails": {
      "identityArmId": "/subscriptions/{subscriptionId}/resourceGroups/{identityResourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}",
      "userAssignedIdentityProperties": {
        "clientId": "<managed-identity-client-id>",
        "principalId": "<managed-identity-principal-id>"
      }
    }
  }
}

Podobnie jak w przypadku żądania instancji, skopiuj pełny obiekt tokena properties dostępu do crossRegionRestoreAccessDetails. Traktuj accessTokenString i tokenExtendedInformation jak sekrety i nie zapisuj ich w logach ani nie włączaj do wspólnych artefaktów.

W obu scenariuszach odnoszących się do konkretnego momentu w czasie wyzwalacz jest asynchroniczny. Postępuj zgodnie z nagłówkami odpowiedzi Azure-AsyncOperation, Location i Retry-After oraz sprawdź stan końcowy powstałego zadania skarbca Recovery Services przed uznaniem przywracania za pomyślne.

Dalsze kroki

Zarządzanie bazami danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, interfejsu API REST.

Aby uzyskać więcej informacji na temat interfejsów API REST usługi Azure Backup, zobacz następujące dokumenty: