Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel erklärt, wie man eine SQL-Server-Datenbank in einer Azure-VM von einem von Azure Backup erstellten Wiederherstellungspunkt mit der RcEST-API wiederherstellen kann.
Am Ende dieses Artikels erfahren Sie, wie Sie die folgenden Vorgänge mit der REST-API ausführen:
- Zeigen Sie die Wiederherstellungspunkte für eine gesicherte Datenbank SQL an.
- Abfrage von Snapshot-Wiederherstellungspunkten und Point-in-Time-Wiederherstellungsbereichen für SQL-Datenbanken und -Instanzen.
- Rufen Sie die Datenbanken und Datenverzeichnispfade ab, die in einem Wiederherstellungspunkt enthalten sind.
- Wiederherstellen einer vollständigen SQL Datenbank.
Informationen zu den derzeit von uns unterstützten Sicherungs- und Wiederherstellungsszenarien finden Sie in der Support-Matrix. Allgemeine Fragen finden Sie in den häufig gestellten Fragen.
Voraussetzungen
Es wird davon ausgegangen, dass Sie über eine gesicherte SQL Datenbank für die Wiederherstellung verfügen. Wenn Sie noch keine haben, siehe Sichern von SQL Server-Datenbanken in Azure-VMs mithilfe der REST-API, um eine zu erstellen.
In diesem Artikel verwenden Sie die folgenden Ressourcen:
- Recovery Services Vault: SQLServer2012
- Ressourcengruppe: SQLServerSelfHost
- SQL Server: sqlserver-0
- SQL-Datenbank: msdb
Wiederherstellen der primären Region
Informationen zum Auslösen eines regulären Wiederherstellungsauftrags im primären Bereich finden Sie in den folgenden Abschnitten. Informationen zur regionübergreifenden Wiederherstellung finden Sie im Abschnitt Regionübergreifende Wiederherstellung.
Abrufen von „ContainerName“ und „ProtectedItemName“
Für die meisten der wiederherzustellende API-Aufrufe müssen Sie Werte für die {containerName} und {protectedItemName} URI-Parameter übergeben. Verwenden Sie das ID-Attribut im Antworttext des GET backupprotectableitems-Vorgangs, um Werte für diese Parameter abzurufen. In unserem Beispiel lautet die ID der Datenbank, die wir schützen wollen:
/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
Die Werte werden wie folgt übersetzt:
-
{containername}: VMAppContainer; Compute; SQLServerPMDemo; sqlserver-0 -
{protectedItemName}: sqldatabase; mssqlserver; msdb
Abrufen von Wiederherstellungspunkten für gesicherte SQL-Datenbank
So stellen Sie eine gesicherte Datenbank wieder auf:
Wählen Sie einen Wiederherstellungspunkt aus, um den Wiederherstellungsvorgang durchzuführen.
Die verfügbaren Wiederherstellungspunkte eines gesicherten Elements können mithilfe des REST-API-Aufrufs Recovery Point-List aufgelistet werden. Es ist ein GET Vorgang mit allen relevanten Werten.
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-01Legen Sie die URI-Werte wie folgt fest:
-
{fabricName}: Azure -
{vaultName}: SQLServer2012 -
{containerName}: VMAppContainer; Compute; SQLServerPMDemo; sqlserver-0 -
{protectedItemName}: sqldatabase; mssqlserver; msdb -
{resourceGroupName}: SQLServerSelfHost
Der GET-URI enthält alle erforderlichen Parameter. Es ist kein zusätzlicher Anforderungstext erforderlich.
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"-
Beispielantwort für das Abrufen von Wiederherstellungspunkten
Wenn der GET URI übermittelt wird, wird die Antwort 200 zurückgegeben.
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"
}
}
]
}
Der Wiederherstellungspunkt wird durch das {name} Feld in der obigen Antwort angegeben.
Snapshots und Streaming-Wiederherstellungspunkte abfragen
Für snapshot-geschützte SQL-Instanzen und Datenbanken verwenden Sie die API-Version 2024-01-31-preview für die folgenden Wiederherstellungspunkt-Abfragen. Ersetzen Sie die URI-Platzhalter durch die Tresor-/Vault-Details sowie die Container- und geschützten Elementnamen, die durch das Auflisten geschützter Elemente zurückgegeben werden. URL-codierter Filterausdruck beim Absenden der Anfrage.
Verwenden restorePointQueryType Sie, um Wiederherstellungspunkttypen auszuwählen:
| Value | Wiederherstellungspunkte zurückgegeben |
|---|---|
FullDifferentialAndSnapshot |
Vollständige, differentielle und snapshot-Wiederherstellungspunkte für eine Datenbank. |
Snapshot |
Snapshot-Wiederherstellungspunkte für eine Datenbank oder Instanz. |
FullAndDifferential |
Streaming von vollständigen und differenziellen Wiederherstellungspunkten für eine Datenbank. |
Log |
Wiederherstellungszeitbereiche für eine Datenbank protokollieren. |
Liste vollständige, differentielle und snapshot-Wiederherstellungspunkte auf
Verwenden Sie den Namen des datenbankgeschützten Elements, wie zum Beispiel 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'
Snapshot-Wiederherstellungspunkte auflisten
Für eine Datenbank verwenden Sie den Namen des geschützten Datenbankelements:
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'
Verwenden Sie für eine Instanz den Namen seines instanzgeschützten Elements, wie zum Beispiel 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'
Streaming-Voll- und differenzielle Wiederherstellungspunkte auflisten
Du kannst auch ein Zeitfenster festlegen und weich gelöschte Wiederherstellungspunkte einfügen:
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'
Ersetzen Sie die Beispieldaten durch Ihr benötigtes Zeitfenster. Das Array value enthält Wiederherstellungspunkte mit Eigenschaften wie recoveryPointTimeInUTC, type, und recoveryPointTierDetails. Aufbewahrungsinformationen können in recoveryPointPropertieserscheinen, einschließlich expiryTime, ruleName, und isSoftDeleted.
Abfrageprotokoll-Wiederherstellungsbereiche für die Zeitpunktwiederherstellung
Um Log-Wiederherstellungsbereiche für eine Datenbank aufzulisten, verwenden Sie folgende Anfrage:
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'
Die Antwort enthält ein DefaultRangeRecoveryPoint Element. Das folgende Beispiel zeigt ausgewählte Antwortfelder:
{
"value": [
{
"name": "DefaultRangeRecoveryPoint",
"properties": {
"objectType": "AzureWorkloadSQLPointInTimeRecoveryPoint",
"timeRanges": [
{
"startTime": "2024-02-07T17:12:13.2853054Z",
"endTime": "2024-02-22T15:30:13Z"
}
],
"type": "Log"
}
}
]
}
Wählen Sie eine Wiederherstellungszeit innerhalb der zurückgegebenen Bereiche.
Abfrage der Datenbank-Logbereiche nach Wiederherstellungsmodus
Für streamingbasierte Wiederherstellung geben Sie an 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'
Für snapshot-basierte Wiederherstellung geben Sie an 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'
Beide Abfragen geben das zuvor gezeigte Log-Recovery-Range-Antwortformat zurück.
Abfrage von Datenbank-Logbereichen für eine Instanzwiederherstellung
Für eine Zeitpunktwiederherstellung wählen Sie zunächst einen Momentaufnahmen-Wiederherstellungspunkt der Instanz aus und zeigen Sie die enthaltenen Datenbanken an. Für jede enthaltene Datenbank fragen Sie ihre Logbereiche mit den ausgewählten Basis-Snapshot-Details ab:
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}: Dernamedes ausgewählten Wiederherstellungspunkts für den Instanz-Snapshot. -
{baseRPDatasourceId}: DerprotectedItemDataSourceIddes instanzgeschützten Elements, nicht der Datenquellen-ID der untergeordneten Datenbank. -
{databaseProtectedItemName}: Der geschützte Elementname der abgefragten Kinderdatenbank.
Erhalten Sie Datenbanken und Festplattenpfade in einem Instanz-Snapshot
Rufen Sie den ausgewählten Instanzwiederherstellungspunkt ab, um die enthaltenen Datenbanken und Festplattenpfade abzurufen. Verwenden Sie dieselben Metadaten bei der Vorbereitung einer Instanz-Snapshot-Wiederherstellung oder einer Punkt-in-Zeit-Wiederherstellung der Instanz:
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} ist der name des Wiederherstellungspunkts. Das folgende Beispiel zeigt ausgewählte Antwortfelder:
{
"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 identifiziert die Datenbanken, die im ausgewählten Snapshot erfasst wurden.
extendedInfo.dataDirectoryPaths identifiziert die verfügbaren Festplattenpfade für die erweiterte Wiederherstellungskonfiguration.
Erhalten Sie Datenbankpfade für die erweiterte Wiederherstellungskonfiguration
Für einen Datenbank-Streaming- oder Snapshot-Wiederherstellungspunkt rufen Sie die Details des Wiederherstellungspunkts ab:
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
Inspizieren Sie properties.extendedInfo.dataDirectoryPaths auf Daten- und Logdateipfade sowie logische Namen. Beispiele:
{
"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": {}
}
Für die Datenbank-Punktzeitwiederherstellung fordern Sie erweiterte Informationen an, wenn Sie die Log-Wiederherstellungsbereiche auflisten. Das folgende Beispiel verwendet snapshot-basierte Wiederherstellung:
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'
Ersetzen Sie die Beispieldaten durch das benötigte Abfragefenster. Die Antwort enthält die Log-Recovery-Bereiche und properties.extendedInfo, einschließlich dataDirectoryTimeInUTC, dataDirectoryPaths, und snapshotRecoveryPointInfo.
Die vorangegangenen Abfragen rufen Wiederherstellungspunkte und Metadaten der Wiederherstellungskonfiguration ab. Der folgende Abschnitt beschreibt die vorhandene Anfrage zur Wiederherstellung der Streaming-Datenbank.
Datenbankwiederherstellung mit REST-API
Das Auslösen der Datenträgerwiederherstellung erfolgt über eine POST-Anforderung. Verwenden Sie zum Ausführen dieses Vorgangs die Triggerwiederherstellungs 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
Die Werte {containerName} und {protectedItemName} werden wie hier angegeben festgelegt, und „recoveryPointID“ ist das {name}-Feld des oben erwähnten Wiederherstellungspunkts.
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'
Erstellen des Anforderungstexts
Beispiel für Anforderungstext zum Wiederherstellen einer Datenbank im selben Datenverzeichnis
Der folgende Anforderungstext definiert Eigenschaften, die erforderlich sind, um SQL Datenbankwiederherstellung in demselben Datenverzeichnis auszulösen.
{
"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"
}
}
Beispiel für Anforderungstext zum Wiederherstellen einer Datenbank in einem alternativen Datenverzeichnis
Der folgende Anforderungstext definiert Eigenschaften, die erforderlich sind, um SQL Datenbankwiederherstellung in demselben Datenverzeichnis auszulösen.
{
"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"
}
}
}
Antwort
Das Auslösen einer Wiederherstellung ist ein asynchroner Vorgang. In diesem Vorgang wird ein anderer Vorgang erstellt, der separat nachverfolgt werden muss.
Zwei Antworten werden zurückgegeben: 202 (Akzeptiert), wenn ein anderer Vorgang erstellt wurde, und 200 (OK), wenn dieser Vorgang abgeschlossen ist.
Antwortbeispiel
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"
}
}
Regionsübergreifende Wiederherstellung
Wenn Sie die regionübergreifende Wiederherstellung aktiviert haben, werden die Wiederherstellungspunkte auch in die sekundäre gekoppelte Region repliziert. Anschließend können Sie diese Wiederherstellungspunkte abrufen und die Wiederherstellung auf einem Computer auslösen, der in diesem gekoppelten Bereich vorhanden ist. Wie bei der normalen Wiederherstellung sollte der Zielcomputer beim Zieltresor in der sekundären Region registriert werden. Die folgenden Schritte beschreiben den kompletten Prozess:
Rufen Sie die Sicherungselemente ab, die in die sekundäre Region repliziert werden.
Für das folgende Beispiel benötigen Sie:
- Ein Container: VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0
- Ein geschütztes Element: sqldatabase;mssqlserver;msdb) für die Datenbank, die wiederhergestellt werden muss, mithilfe der weiter oben in diesem Dokument erwähnten Schritte.
Rufen Sie die Wiederherstellungspunkte (eindeutige und/oder Protokolle) ab, die in die sekundären Regionen repliziert werden.
Wählen Sie einen Zielserver aus, der für einen Tresor innerhalb der sekundären gekoppelten Region registriert ist.
Starten Sie die Wiederherstellung auf diesem Server und verfolgen Sie sie mit der JobId.
Hinweis
Der RPO-Wert für die Verfügbarkeit der Sicherungsdaten in der sekundären Region beträgt 12 Stunden. Wenn Sie CRR aktivieren, beträgt das RPO für die sekundäre Region daher 12 Stunden + Protokollhäufigkeitsdauer (die auf mindestens 15 Minuten festgelegt werden kann).
Abrufen unverwechselbarer Wiederherstellungspunkte aus der sekundären Region
Verwenden Sie die LIST Recovery Points-API, um die Liste der verfügbaren Wiederherstellungspunkte für die Datenbank in der sekundären Region abrufen. Im folgenden Beispiel wird ein optionaler Filter angewendet, um vollständige und differenzielle Wiederherstellungspunkte in einem bestimmten Zeitraum zu erhalten.
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"
Beispielantwort für das Abrufen von Wiederherstellungspunkten
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"
}
},
.....
Der Wiederherstellungspunkt wird durch das {name} Feld in der obigen Antwort angegeben.
Zugriffstoken abrufen
Zum Durchführen der regionübergreifenden Wiederherstellung benötigen Sie ein Zugriffstoken, um die ordnungsgemäße Kommunikation zwischen den Azure-Sicherungsdiensten zu ermöglichen. Führen Sie die folgenden Schritte aus, um ein Zugriffstoken abzurufen:
Verwenden Sie die Microsoft Entra-Eigenschaften-API, um Microsoft Entra-Eigenschaften für die sekundäre Region abzurufen (westus im nachfolgenden Beispiel).
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/westus/backupAadProperties?api-version=2018-12-20Die zurückgegebene Antwort hat das folgende Format:
{ "properties": { "tenantId": "00000000-0000-0000-0000-000000000000", "audience": "https://RecoveryServices/IaasCoord/aadmgmt/wus", "servicePrincipalObjectId": "00000000-0000-0000-0000-000000000000" } }Verwenden Sie die Zugriffstoken-API, um Zugriffstoken abzurufen und die Kommunikation zwischen den Azure-Sicherungsdiensten zu ermöglichen.
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-20Fügen Sie als Anforderungstext den Inhalt der Antwort ein, die von der Microsoft Entra-Eigenschaften-API im vorigen Schritt zurückgegeben wurde.
Das Format der zurückgegebenen Antwort lautet wie folgt:
{ "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" }
Wiederherstellen von Datenträgern in einer sekundären Region
Verwenden Sie die Cross-Region Restore Trigger API, um ein Element in der sekundären Region wiederherzustellen.
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{azureRegion}/backupCrossRegionRestore?api-version=2018-12-20
Der Anforderungstext sollte zwei Teile aufweisen:
crossRegionRestoreAccessDetails: Fügen Sie den Eigenschaften-Block aus der Antwort der im vorherigen Schritt ausgeführten API-Anfrage für das Zugriffstoken abrufen ein, um diesen Teil des Anfragetextes auszufüllen.
restoreRequest: Zum Ausfüllen des RestoreRequest-Segments des Anforderungstexts müssen Sie die Details des Containers (in einem Tresor im sekundären Bereich registriert) übergeben, an den die Datenbank wiederhergestellt werden muss, sowie den Namen, unter dem die wiederhergestellte Datenbank gespeichert werden soll. Wenn Sie eine vollständige Sicherung für den sekundären Bereich wiederherstellen möchten, geben Sie AlternateLocation als Wiederherstellungstyp an.
Es folgt ein Beispiel für einen Anforderungstext zum Wiederherstellen der Datenträger eines VM in der sekundären Region:
{
"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"
}
}
}
Führen Sie eine regionsübergreifende Point-in-Time-Wiederherstellung für eine SQL-Instanz durch, die durch eine Snapshot-Policy geschützt ist
Verwenden Sie diesen Flow, um die Datenbanken in einem SQL-Instanz-Snapshot wiederherzustellen und deren Protokollsicherungen bis zu einem gemeinsamen Zeitpunkt in der sekundären Region wiederzugeben.
Important
Der ausgewählte Zeitpunkt muss vom Logbereich jeder Datenbank abgedeckt werden, die Sie aus dem Instanz-Snapshot wiederherstellen möchten. Fordern Sie das Zugriffstoken für das geschützte SQL-Instanz-Element und den ausgewählten konkreten Snapshot-Wiederherstellungspunkt an.
Zeigen Sie den Instanz-Snapshot und die Protokollbereiche an
Listen Sie die Wiederherstellungspunkte für das geschützte Element der SQL-Instanz auf.
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-15Wählen Sie einen Wiederherstellungspunkt, dessen Antwort alle folgenden Werte enthält:
-
properties.typeistSnapshotFull. -
properties.crossRegionRestoreStateistSupported. -
properties.recoveryPointTierDetailsenthält einenHardenedRPEintrag mit dem StatusValid.
-
Rufen Sie den ausgewählten Wiederherstellungspunkt ab, um seine maßgeblichen erweiterten Informationen abzurufen.
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-15Verwenden Sie,
properties.extendedInfo.includedDatabasesum die im Snapshot enthaltenen Kinderdatenbanken zu identifizieren. Die Antwort enthält außerdem die Pfade der Quellfestplatten und Snapshot-Metadaten, die für die Wiederherstellung erforderlich sind.Rufen Sie das geschützte Element der SQL-Instanz ab und speichern Sie
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-15Für jede enthaltene Datenbank den Logbereich auflisten, der mit dem ausgewählten Instanz-Snapshot verknüpft ist.
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}'"Die Antwort enthält ein
DefaultRangeRecoveryPoint. Wählen Sie ein UTCpointInTime, das für jede wiederhergestellte Datenbank innerhalb des zurückgegebenenproperties.timeRangesliegt.
Den Zugriffstoken für den Instanz-Snapshot abrufen
Holen Sie die Microsoft Entra-Eigenschaften für die sekundäre Region.
GET "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{secondaryRegion}/backupAadProperties?api-version=2023-01-15&$filter=backupManagementType eq 'AzureWorkload'"
Übergeben Sie das zurückgegebene properties Objekt im Request-Body, wenn Sie ein Zugriffstoken für die SQL-Instanz und den ausgewählten Snapshot-Wiederherstellungspunkt anfordern.
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
}
}
Lösen Sie die SQL-Instanz-Point-in-Time-Wiederherstellung aus
Verwenden Sie AzureWorkloadSQLPointInTimeRestoreRequest mit SnapshotAttachAndRecover. Kopiere das vollständige properties Objekt aus der Zugriffs-Token-Antwort in 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>"
}
}
}
}
Das oben gekürzte crossRegionRestoreAccessDetails Objekt zeigt die Felder, die das Instanz-Szenario identifizieren. In der eigentlichen Anfrage kopieren Sie jede Eigenschaft, die von der Zugangstoken-API zurückgegeben wird, einschließlich tokenExtendedInformation, wenn es vorhanden ist.
Führen Sie eine regionsübergreifende Logwiederherstellung für eine Kinddatenbank durch, die durch eine Snapshot-Policy geschützt ist
Verwenden Sie diesen Fluss, um eine Kinddatenbank auf einen ausgewählten Zeitpunkt zurückzusetzen, wenn die Datenbank als Teil einer SQL-Instanz-Snapshot-Policy geschützt ist.
Important
Für die Wiederherstellung des Protokolls einer untergeordneten Datenbank fordern Sie das Zugriffstoken für das untergeordnete SQLDataBase geschützte Element an und DefaultRangeRecoveryPoint. Fordere das Token nicht am Wiederherstellungspunkt der übergeordneten SQL-Instanz an.
Entdecken Sie den Protokollbereich der untergeordneten Datenbank
Listen Sie die Protokoll-Wiederherstellungspunkte für das geschützte Element der untergeordneten Datenbank auf.
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'"
Die Antwort enthält ein DefaultRangeRecoveryPoint mit einem oder mehreren UTC-Bereichen:
{
"value": [
{
"name": "DefaultRangeRecoveryPoint",
"properties": {
"objectType": "AzureWorkloadSQLPointInTimeRecoveryPoint",
"timeRanges": [
{
"startTime": "2026-07-26T19:25:29.9811766Z",
"endTime": "2026-08-10T18:31:23Z"
}
],
"type": "Log"
}
}
]
}
Wählen Sie eine UTC pointInTime innerhalb eines der zurückgegebenen Bereiche.
Erhalten Sie das Zugriffstoken für den Logbereich der Kinddatenbank
Rufen Sie die Microsoft Entra-Eigenschaften für die sekundäre Region ab, indem Sie den im SQL-Instanzbereich gezeigten Azure-Workload-Filter verwenden. Geben Sie das zurückgegebene properties-Objekt beim Anfordern des Zugriffstokens für die untergeordnete Datenbank weiter.
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
Die zurückgegebenen Zugriffstoken-Eigenschaften identifizieren die ausgewählte Kinddatenbank mit Werten wie:
{
"properties": {
"protectableObjectUniqueName": "MSSQLSERVER/{databaseName}",
"protectableObjectFriendlyName": "{databaseName}",
"objectType": "WorkloadCrrAccessToken",
"accessTokenString": "<access-token-string>",
"recoveryPointId": "DefaultRangeRecoveryPoint",
"datasourceType": "SQLDataBase",
"datasourceName": "{databaseName}"
}
}
Starten Sie die Wiederherstellung des Protokolls der untergeordneten Datenbank
Verwenden Sie AzureWorkloadSQLPointInTimeRestoreRequest mit SnapshotAttachAndRecover. Der Name der Zieldatenbank muss das MSSQLSERVER/{targetDatabaseName} logische Pfadformat verwenden.
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>"
}
}
}
}
Wie bei der Instanzanfrage kopieren Sie das vollständige Zugriffstoken-Objekt properties in crossRegionRestoreAccessDetails. Behandeln Sie accessTokenString und tokenExtendedInformation als Geheimnisse und schreiben Sie sie nicht in Protokolle oder schließen Sie sie nicht in gemeinsame Artefakte ein.
Für beide Point-in-Time-Szenarien ist der Auslöser asynchron. Folgen Sie den Azure-AsyncOperation, Location, und Retry-After Response-Headern und überprüfen Sie den Terminalstatus des resultierenden Recovery Services Vault-Jobs, bevor Sie die Wiederherstellung als erfolgreich behandeln.
Nächste Schritte
Verwalten von SQL Server-Datenbanken in Azure-VMs mit Azure-Portal, Azure CLI, REST-API.
Weitere Informationen zu den Azure Backup-REST-APIs finden Sie in den folgenden Dokumenten: