Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Cet article explique comment sauvegarder des bases de données SQL Server sur des machines virtuelles Azure en utilisant le service Sauvegarde Azure via l’API REST.
Notes
Consultez la matrice de prise en charge des sauvegardes SQL pour en savoir plus sur les configurations et les scénarios pris en charge.
Prérequis
- Un coffre Recovery Services
- Une stratégie pour configurer la sauvegarde de vos bases données SQL
Pour plus d’informations sur la création de coffres et de stratégies, consultez les tutoriels relatifs à l’API REST pour créer un coffre et créer une stratégie.
Utilisez les ressources suivantes :
- Coffre Recovery Services : SQLServer2012
- Stratégie : HourlyLogBackup
- Groupe de ressources : SQLServerSelfHost
Configurer la sauvegarde pour des bases de données SQL Server non protégées dans Azure VM
Découvrir les bases de données SQL Server non protégées
Le coffre doit découvrir toutes les machines virtuelles Azure dans l’abonnement qui ont des bases de données SQL que vous pouvez sauvegarder dans le coffre Recovery Services. Pour récupérer ces informations, déclenchez l’opération d’actualisation. Cette opération POST asynchrone garantit que le coffre reçoit la liste la plus récente de toutes les bases de données SQL non protégés dans l’abonnement actuel et les met en cache. Une fois que la base de données est mise en cache, Recovery Services peut accéder à la base de données et la protéger.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{vaultResourceGroupName}/providers/microsoft.recoveryservices/vaults/{vaultName}/backupFabrics/{fabricName}/refreshContainers?api-version=2016-12-01&$filter={$filter}
L’URI POST contient les paramètres {subscriptionId}, {vaultName}, {vaultresourceGroupName} et {fabricName}. Dans l’exemple qui suit, les valeurs des différents paramètres sont :
-
{fabricName}: Azure -
{vaultName}: SQLServer2012 -
{vaultresourceGroupName}: SQLServerSelfHost -
$filter: backupManagementType eq 'AzureWorkload'
Étant donné que tous les paramètres obligatoires sont fournis dans l’URI3, un corps de demande distinct est inutile.
POST https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/refreshContainers?api-version=2016-12-01&$filter=backupManagementType eq 'AzureWorkload'
Réponses à l’opération d’actualisation
L’opération d’actualisation est une opération asynchrone, ce qui signifie qu’elle crée une autre opération qui doit faire l’objet d’un suivi distinct.
Elle retourne deux réponses : 202 (Accepté) lors de la création d’une autre opération, et 200 (OK) quand cette opération est terminée.
Exemples de réponses à l’opération d’actualisation
Une fois que vous avez envoyé la demande POST, une réponse 202 (Accepté) est retournée.
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 60
X-Content-Type-Options: nosniff
x-ms-request-id: a85ee4a2-56d7-4477-b29c-d140a8bb90fe
x-ms-client-request-id: 4653a4ed-ffbe-4492-ae7d-3e1ab03722af; 4653a4ed-ffbe-4492-ae7d-3e1ab03722af
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: a85ee4a2-56d7-4477-b29c-d140a8bb90fe
x-ms-routing-request-id: SOUTHINDIA:20180528T075517Z:a85ee4a2-56d7-4477-b29c-d140a8bb90fe
Cache-Control: no-cache
Date: Mon, 28 May 2018 07:55:16 GMT
Location: https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/operationResults/a60bfc5e-e237-4ead-be5c-b845e9566ea8?api-version=2016-12-01
X-Powered-By: ASP.NET
Effectuez le suivi de l’opération qui en résulte en utilisant l’en-tête Location avec une commande GET simple.
GET https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/operationResults/a60bfc5e-e237-4ead-be5c-b845e9566ea8?api-version=2016-12-01
Une fois toutes les bases de données SQL découvertes, la commande GET retourne une réponse 200 (Pas de contenu). Le coffre peut maintenant découvrir toutes les bases de données SQL qui peuvent être sauvegardées dans l’abonnement.
HTTP/1.1 204 NoContent
Pragma: no-cache
X-Content-Type-Options: nosniff
x-ms-request-id: 55ae46bb-0d61-4284-a408-bcfaa36af643
x-ms-client-request-id: b5ffa56f-a521-48a4-91b2-e3bc1e3f1110; b5ffa56f-a521-48a4-91b2-e3bc1e3f1110
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-reads: 14968
x-ms-correlation-request-id: 55ae46bb-0d61-4284-a408-bcfaa36af643
x-ms-routing-request-id: SOUTHINDIA:20180528T075607Z:55ae46bb-0d61-4284-a408-bcfaa36af643
Cache-Control: no-cache
Date: Mon, 28 May 2018 07:56:06 GMT
X-Powered-By: ASP.NET
Lister les machines virtuelles ayant des bases de données SQL à sauvegarder avec le coffre Recovery Services
Pour vérifier que la mise en cache a été effectuée, listez toutes les machines virtuelles dans l’abonnement qui ont des bases de données SQL pouvant être sauvegardées dans le coffre Recovery Services. Recherchez ensuite le compte de stockage souhaité dans la réponse. Pour ce faire, utilisez l’opération GET ProtectableContainers.
GET https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectableContainers?api-version=2016-12-01&$filter=backupManagementType eq 'AzureWorkload'
Notes
L’URI GET contient tous les paramètres obligatoires. Aucun corps de demande supplémentaire n’est nécessaire.
Exemple de corps de réponse :
{
"value": [
{
"id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectableContainers/VMAppContainer;Compute;SQLServerPMDemo;ad-primary-dc",
"name": "VMAppContainer;Compute;SQLServerPMDemo;ad-primary-dc",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectableContainers",
"properties": {
"friendlyName": "ad-primary-dc",
"backupManagementType": "AzureWorkload",
"protectableContainerType": "VMAppContainer",
"healthStatus": "Healthy",
"containerId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/ad-primary-dc"
}
},
{
"id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectableContainers/VMAppContainer;Compute;SQLServerPMDemo;ad-secondry-dc",
"name": "VMAppContainer;Compute;SQLServerPMDemo;ad-secondry-dc",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectableContainers",
"properties": {
"friendlyName": "ad-secondry-dc",
"backupManagementType": "AzureWorkload",
"protectableContainerType": "VMAppContainer",
"healthStatus": "Healthy",
"containerId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/ad-secondry-dc"
}
},
{
"id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectableContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"name": "VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectableContainers",
"properties": {
"friendlyName": "sqlserver-0",
"backupManagementType": "AzureWorkload",
"protectableContainerType": "VMAppContainer",
"healthStatus": "Healthy",
"containerId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/sqlserver-0"
}
}
]
}
Comme nous pouvons localiser les machines virtuelles dans le corps de réponse par leur nom convivial respectif, nous savons que l’opération d’actualisation effectuée ci-dessus a réussi. Le coffre Recovery Services peut désormais découvrir correctement toutes les machines virtuelles contenant des bases de données SQL non protégées dans le même abonnement.
Inscrire des machines virtuelles auprès du coffre Recovery Services
Vous devez inscrire les machines virtuelles auprès du coffre Recovery Services afin que le service Sauvegarde Azure puisse interagir avec les bases de données SQL sur les machines virtuelles (utilisez la valeur du champ Name pour identifier le conteneur de machines virtuelles). Vous devez fournir les valeurs dans la demande JSON pour obtenir le corps de la demande HTTP du conteneur de propriétés du résultat listant les conteneurs protégeables.
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.recoveryservices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}?api-version=2016-12-01
Définissez les variables pour l’URI comme suit :
-
{resourceGroupName}- SQLServerSelfHost -
{fabricName}- Azur -
{vaultName}- SQLServer2012 -
{containerName}: il s’agit de l’attribut de nom (Name) dans le corps de la réponse retournée par l’opération GET ProtectableContainers. Dans notre exemple, le nom d’attribut est VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0.
Notes
Prenez toujours l’attribut de nom dans la réponse et renseignez-le dans cette requête. Ne codez pas en dur ni ne créez le format container-name. Si vous le créez ou le codez en dur, l’appel d’API échoue si le format container-name change à l’avenir.
PUT 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?api-version=2016-12-01
Le corps de demande de création est le suivant :
{
"properties": {
"backupManagementType": "AzureWorkload",
"friendlyName": "sqlserver-0",
"containerType": "VMAppContainer",
"sourceResourceId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectableContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"workloadType": "SQLDataBase"
}
}
Pour obtenir la liste complète des définitions du corps de demande et d’autres détails, consultez ProtectionContainers-Register.
Cette opération asynchrone retourne deux réponses : 202 Accepté quand l’opération est acceptée et 200 OK quand l’opération est terminée. Pour suivre l’état de l’opération, utilisez l’en-tête d’emplacement pour récupérer l’état le plus récent de l’opération.
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/operationResults/2a72d206-b4d8-4c59-89ef-ef3283132237?api-version=2016-12-01
Exemple de corps de réponse lorsque l’opération est terminée :
{
"id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"name": "VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers",
"properties": {
"sourceResourceId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerPMDemo/providers/Microsoft.Compute/virtualMachines/sqlserver-0",
"lastUpdatedTime": "2018-05-28T08:33:14.7304852Z",
"extendedInfo": {
"hostServerName": "sqlserver-0.shopkart.com",
"inquiryInfo": {
"status": "Success",
"errorDetail": {
"code": "Success",
"message": "",
"recommendations": [
""
]
},
"inquiryDetails": [
{
"type": "SQL",
"itemCount": 5,
"inquiryValidation": {
"status": "Success",
"errorDetail": {
"code": "Success",
"message": "",
"recommendations": [
""
]
}
}
}
]
}
},
"friendlyName": "sqlserver-0",
"backupManagementType": "AzureWorkload",
"registrationStatus": "Registered",
"healthStatus": "Healthy",
"containerType": "VMAppContainer",
"protectableObjectType": "VMAppContainer"
}
}
Vous pouvez vérifier si l’inscription a réussi à partir de la valeur du paramètre registrationstatus dans le corps de la réponse. Dans notre cas, elle indique l’état enregistré pour SQLServer2012, ce qui signifie que l’opération d’inscription a réussi.
Rechercher toutes les bases de données SQL non protégées sur une machine virtuelle
Pour rechercher les éléments protégeables dans un compte de stockage, utilisez l’opération Protection Containers-Inquire. Il s’agit d’une opération asynchrone et les résultats doivent être suivis à l’aide de l’en-tête d’emplacement.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/inquire?api-version=2016-12-01$filter={$filter}
Définissez les variables pour l’URI ci-dessus comme suit :
-
{resourceGroupName}: SQLServerSelfHost -
{vaultName}: SQLServer2012 -
{fabricName}: Azure -
{containerName}: fait référence à l’attribut de nom (Name) dans le corps de la réponse retournée par l’opération GET ProtectableContainers. Dans notre exemple, le nom d’attribut est VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0.
POST https://management.azure.com/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0/inquire?api-version=2016-12-01$filter=workloadType EQ 'SQLDatabase'
Une fois la demande réussie, elle retourne le code d’état OK.
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 60
X-Content-Type-Options: nosniff
x-ms-request-id: 50295ae9-3d5b-48d1-8a6d-a0acb6d06b98
x-ms-client-request-id: 4174f98a-80b9-4747-9500-6f702ed83930; 4174f98a-80b9-4747-9500-6f702ed83930
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1197
x-ms-correlation-request-id: 50295ae9-3d5b-48d1-8a6d-a0acb6d06b98
x-ms-routing-request-id: SOUTHINDIA:20180528T084628Z:50295ae9-3d5b-48d1-8a6d-a0acb6d06b98
Cache-Control: no-cache
Date: Mon, 28 May 2018 08:46:28 GMT
Location: 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/operationResults/f0751ec2-445a-4d0e-a6a5-a19957459655?api-version=2016-12-01
X-Powered-By: ASP.NET
Sélectionner les bases de données à sauvegarder
Pour lister tous les éléments protégeables dans l’abonnement et rechercher la base de données à sauvegarder, utilisez l’opération GET backupprotectableItems.
GET https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupProtectableItems?api-version=2016-12-01&$filter={$filter}
Construisez l’URI comme suit :
-
{resourceGroupName}: SQLServerSelfHost -
{vaultName}: SQLServer2012 -
{$filter}: backupManagementType eq 'AzureWorkload'
GET https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupProtectableItems?api-version=2016-12-01&$filter=backupManagementType eq 'AzureWorkload'
Exemple de réponse :
Status Code:200
{
"value": [
{
"id": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLServerSelfHost;SQLServersql2012/protectableItems/sqldatabase;mssqlserver;msdb",
"name": "sqldatabase;mssqlserver;msdb",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectableItems",
"properties": {
"parentName": "MSSQLSERVER",
"serverName": "SQLServersql2012",
"isAutoProtectable": false,
"subinquireditemcount": 0,
"subprotectableitemcount": 0,
"backupManagementType": "AzureWorkload",
"workloadType": "SQL",
"protectableItemType": "SQLDataBase",
"friendlyName": "msdb",
"protectionState": "NotProtected"
}
}
]
}
La réponse contient la liste de toutes les bases de données non protégées ainsi que toutes les informations requises par Azure Recovery Services pour configurer la sauvegarde. Enregistrez les noms des bases de données pour référence ultérieure.
Activer la sauvegarde pour la base de données
Une fois que la base de données en question a été identifiée par son nom convivial :
- Sélectionnez la stratégie à protéger.
- Listez les stratégies contenues dans le coffre (avec l’API de liste des stratégies).
- Sélectionnez la stratégie appropriée en faisant référence au nom de la stratégie.
- Tutoriel pour créer une stratégie.
L’activation de la protection est une opération PUT asynchrone qui crée un élément protégé.
PUT https://management.azure.com/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupFabrics/Azure/protectionContainers/{containerName};sqlserver-0/protectedItems/{protectedItemName}?api-version=2016-12-01
Définissez les variables containerName et protectedItemName en indiquant l’attribut ID dans le corps de la réponse de l’opération GET backupprotectableitems.
Dans notre exemple, l’ID du partage de fichiers que vous souhaitez protéger est le suivant :
/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
-
{containerName}: VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0 -
{protectedItemName}: sqldatabase;mssqlserver;msdb
Créez un corps de demande :
Le corps de la demande suivant définit les propriétés requises pour créer un élément protégé.
{
"properties": {
"backupManagementType": "AzureWorkload",
"workloadType": "SQLDataBase",
"policyId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupPolicies/HourlyLogBackup"
},
"location": "westcentralus"
}
Une fois que vous envoyez la requête PUT de création ou de mise à jour d’un élément protégé, la réponse initiale est 202 (Accepté) avec un en-tête d’emplacement.
Exemple de réponse
La création d’un élément protégé est une opération asynchrone qui crée une autre opération devant faire l’objet d’un suivi. Elle retourne deux réponses : 202 (Accepté) lors de la création d’une autre opération, et 200 (OK) quand cette opération est terminée.
Une fois que vous envoyez la requête PUT de création ou de mise à jour d’un élément protégé, la réponse initiale est 202 (Accepté) avec un en-tête d’emplacement.
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 60
Azure-AsyncOperation: 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/operationsStatus/b686a165-387f-461d-8579-c55338566338?api-version=2016-12-01
X-Content-Type-Options: nosniff
x-ms-request-id: ab6a8c6c-ab90-433a-8dc2-5194901d428d
x-ms-client-request-id: 7d03bcef-562a-4ddc-8086-a3f4981be915; 7d03bcef-562a-4ddc-8086-a3f4981be915
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: ab6a8c6c-ab90-433a-8dc2-5194901d428d
x-ms-routing-request-id: SOUTHINDIA:20180528T102112Z:ab6a8c6c-ab90-433a-8dc2-5194901d428d
Cache-Control: no-cache
Date: Mon, 28 May 2018 10:21:12 GMT
Location: 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/operationResults/b686a165-387f-461d-8579-c55338566338?api-version=2016-12-01
X-Powered-By: ASP.NET
Effectuez ensuite le suivi de l’opération qui en résulte en utilisant l’en-tête Location ou l’en-tête Azure-AsyncOperation avec une commande GET.
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/operationResults/b686a165-387f-461d-8579-c55338566338?api-version=2016-12-01
Une fois terminée, l’opération retourne 200 (OK) avec le contenu de l’élément protégé dans le corps de la réponse.
Exemple de corps de réponse :
{
"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",
"name": "SQLDataBase;mssqlserver;msdb",
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
"properties": {
"friendlyName": "msdb",
"serverName": "sqlserver-0.shopkart.com",
"parentName": "MSSQLSERVER",
"parentType": "AzureVmWorkloadSQLInstance",
"protectionStatus": "Healthy",
"protectionState": "IRPending",
"lastBackupStatus": "IRPending",
"lastBackupErrorDetail": {
"code": "Success",
"message": ""
},
"protectedItemDataSourceId": "17592741727863",
"protectedItemHealthStatus": "IRPending",
"extendedInfo": {
"recoveryPointCount": 0,
"policyState": "Consistent"
},
"protectedItemType": "AzureVmWorkloadSQLDatabase",
"backupManagementType": "AzureWorkload",
"workloadType": "SQLDataBase",
"containerName": "VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0",
"sourceResourceId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerPMDemo/providers/VMAppContainer/sqlserver-0",
"policyId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupPolicies/HourlyLogBackup"
}
}
Cela confirme que la protection est activée pour la base de données et que la première sauvegarde est déclenchée conformément à la planification de la stratégie.
Déclencher une sauvegarde à la demande de la base de données
Une fois que vous avez configuré une base de données pour la sauvegarde, les sauvegardes s’exécutent selon la planification de la stratégie. Vous pouvez attendre la première sauvegarde planifiée ou déclencher une sauvegarde à la demande à tout moment.
Le déclenchement d’une sauvegarde à la demande est une opération POST.
Notes
La période de conservation de cette sauvegarde est déterminée par le type de sauvegarde à la demande que vous avez exécuté.
- La sauvegarde complète à la demande est conservée pendant au minimum 45 jours et au maximum 99 ans.
- La sauvegarde par copie complète uniquement à la demande accepte toutes les valeurs de conservation.
- La sauvegarde différentielle à la demande est conservée conformément à la planification des sauvegardes différentielles définie dans la stratégie.
- La sauvegarde de fichier journal à la demande est conservée conformément à la planification des sauvegardes de journaux définie dans la stratégie.
POST https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/protectedItems/{protectedItemName}/backup?api-version=2016-12-01
{containerName} et {protectedItemName} sont construits comme indiqué ci-dessus lors de l’activation de la sauvegarde. Dans notre exemple, cela se traduit par :
POST 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/backup?api-version=2016-12-01
Créer un corps de demande
Utilisez le corps de demande suivant pour créer une sauvegarde complète à la demande.
{
"properties": {
"objectType": "AzureWorkloadBackupRequest",
"backupType": "Full"
}
}
Réponses à l’opération de sauvegarde à la demande
Le déclenchement d’une sauvegarde à la demande est une opération asynchrone. ce qui signifie qu’elle crée une autre opération qui doit faire l’objet d’un suivi distinct.
Elle retourne deux réponses : 202 (Accepté) lors de la création d’une autre opération, et 200 (OK) quand cette opération est terminée.
Exemples de réponses à l’opération de sauvegarde à la demande
Une fois que vous envoyez la demande POST pour une sauvegarde à la demande, la réponse initiale est 202 (Accepté) avec un en-tête d’emplacement ou Azure-async-header.
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 60
Azure-AsyncOperation: 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/operationsStatus/cd2a3b13-d392-4e81-86ac-02ea91cc70b9?api-version=2016-12-01
X-Content-Type-Options: nosniff
x-ms-request-id: a691e2a9-8203-462d-a4da-d1badde22f83
x-ms-client-request-id: 6b033cf6-f875-4c03-8985-9add07ec2845; 6b033cf6-f875-4c03-8985-9add07ec2845
Strict-Transport-Security: max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: a691e2a9-8203-462d-a4da-d1badde22f83
x-ms-routing-request-id: SOUTHINDIA:20180528T114321Z:a691e2a9-8203-462d-a4da-d1badde22f83
Cache-Control: no-cache
Date: Mon, 28 May 2018 11:43:21 GMT
Location: 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/operationResults/cd2a3b13-d392-4e81-86ac-02ea91cc70b9?api-version=2016-12-01
X-Powered-By: ASP.NET
Effectuez ensuite le suivi de l’opération qui en résulte en utilisant l’en-tête Location ou l’en-tête Azure-AsyncOperation avec une commande GET.
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/operationsStatus/cd2a3b13-d392-4e81-86ac-02ea91cc70b9?api-version=2016-12-01
Une fois terminée, l’opération retourne 200 (OK) avec l’ID du travail de sauvegarde obtenu dans le corps de la réponse.
Exemple de corps de la réponse
{
"id": "cd2a3b13-d392-4e81-86ac-02ea91cc70b9",
"name": "cd2a3b13-d392-4e81-86ac-02ea91cc70b9",
"status": "Succeeded",
"startTime": "2018-05-28T11:43:21.6516182Z",
"endTime": "2018-05-28T11:43:21.6516182Z",
"properties": {
"objectType": "OperationStatusJobExtendedInfo",
"jobId": "c22eca5d-0c1c-48a0-a40d-69bef708d92a"
}
}
Comme le travail de sauvegarde est une opération durable, il doit faire l’objet d’un suivi, comme cela est expliqué dans le document sur la supervision des travaux avec l’API REST.
Étapes suivantes
- Restaurez des bases de données SQL à l’aide de l’API REST.
- Gérez les bases de données SQL Server dans des machines virtuelles Azure avec le portail Azure, Azure CLI, l’API REST.