Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
En este artículo se describe cómo hacer copias de seguridad de las bases de datos de SQL Server en máquinas virtuales de Azure con Azure Backup a través de la API de REST.
Para ver los escenarios de copia de seguridad y restauración que se admiten en la actualidad, consulte la matriz de compatibilidad. Para preguntas comunes, consulte las preguntas más frecuentes.
Prerrequisitos
- Un almacén de Recovery Services
- Una directiva para configurar la copia de seguridad de las bases de datos SQL.
Para obtener más información sobre cómo crear nuevos almacenes y directivas, consulte los tutoriales de la API de REST crear almacén y crear directiva.
Use los siguientes recursos:
- Almacén de Recovery Services: SQLServer2012
- Directiva: HourlyLogBackup
- Grupo de recursos: SQLServerSelfHost
Configurar la copia de seguridad para las bases de datos de SQL Server sin protección en VM de Azure
Descubrir bases de datos SQL Server sin protección
El almacén necesita descubrir todas las máquinas virtuales de Azure de la suscripción con bases de datos SQL de las que puede realizar una copia de seguridad en el almacén de Recovery Services. Para capturar los detalles, desencadene la operación de actualización. Se trata de una operación POST asincrónica que garantiza que el almacén recibe la lista más reciente de todas las bases de datos SQL sin protección de la suscripción actual y los almacena en caché. Una vez que la base de datos se almacena en caché, Recovery Services puede acceder a este y protegerlo.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{vaultResourceGroupName}/providers/microsoft.recoveryservices/vaults/{vaultName}/backupFabrics/{fabricName}/refreshContainers?api-version=2016-12-01&$filter={$filter}
El URI de POST tiene los parámetros {subscriptionId}, {vaultName}, {vaultresourceGroupName} y {fabricName}. En el ejemplo siguiente, los valores de los diferentes parámetros son los siguientes:
-
{fabricName}: Azure -
{vaultName}: SQLServer2012 -
{vaultresourceGroupName}: SQLServerSelfHost -
$filter: backupManagementType eq "AzureWorkload"
Como todos los parámetros necesarios se proporcionan en el URI3, no es necesario tener un cuerpo de solicitud independiente.
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'
Respuestas a la operación de actualización
La operación refresh es una operación asincrónica. Significa que esta operación crea otra que tiene que ser seguida por separado.
Devuelve dos respuestas: 202 (Aceptado) cuando se crea otra operación y luego 200 (Correcto) cuando se completa esa operación.
Respuestas de ejemplo para la operación de actualización
Una vez que envíe la solicitud POST, se devuelve una respuesta 202 (Accepted).
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
Realice el seguimiento de la operación resultante con el encabezado Location (ubicación) y un comando 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
Una vez que se detectan todas las bases de datos SQL, el comando GET devuelve una respuesta 200 (Sin contenido). La bóveda ahora puede detectar cualquier máquina virtual con bases de datos SQL que puedan ser respaldadas en la suscripción.
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
Enumerar máquinas virtuales con bases de datos SQL para respaldar con Recovery Services vault
Para confirmar que se ha realizado el almacenamiento en caché, enumere todas las máquinas virtuales de la suscripción con bases de datos SQL de las que se puedan hacer copias de seguridad con el almacén de Recovery Services. A continuación, busque la cuenta de almacenamiento deseada en la respuesta. Esto se hace mediante la operación 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'
Nota
El identificador URI de GET tiene todos los parámetros necesarios. No se necesita ningún cuerpo de solicitud adicional.
Ejemplo de cuerpo de respuesta:
{
"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"
}
}
]
}
Si podemos localizar las máquinas virtuales en el cuerpo de respuesta con sus nombres descriptivos, la operación de actualización realizada anteriormente se realizó correctamente. Ahora, el almacén de Recovery Services puede detectar correctamente las máquinas virtuales con bases de datos SQL sin protección en la misma suscripción.
Registrar máquinas virtuales con el almacén de Recovery Services
Debe registrar las máquinas virtuales con el almacén de Recovery Services para que el servicio Azure Backup pueda interactuar con bases de datos de SQL dentro de la máquina virtual (use el valor del campo Nombre para identificar el contenedor de máquina virtual de Azure). Debe proporcionar los valores de la solicitud JSON para obtener el cuerpo de la solicitud HTTP de la bolsa de propiedades del resultado de los contenedores protegibles de la lista.
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.recoveryservices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}?api-version=2016-12-01
Defina las variables de los URI como se indica a continuación:
-
{resourceGroupName}- SQLServerSelfHost -
{fabricName}- Azure -
{vaultName}- SQLServer2012 -
{containerName}Este es el atributo de nombre en el cuerpo de la respuesta de la operación GET ProtectableContainers. En nuestro ejemplo, el nombre del atributo es VMAppContainer;Compute;SQLServerPMDemo;sqlserver-0.
Nota
Siempre tome el atributo 'nombre' de la respuesta y rellénelo en esta solicitud. No cree ni codifique de forma rígida el formato del nombre de contenedor. Si lo crea o codifica de forma rígida, se producirá un error en la llamada a la API si el formato del nombre del contenedor cambia en el futuro.
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
La creación del cuerpo de la solicitud se lleva a cabo como se indica a continuación:
{
"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"
}
}
Para obtener una lista completa de las definiciones del cuerpo de la solicitud y otros detalles, consulte ProtectionContainers-Register.
Se trata de una operación asincrónica y devuelve dos respuestas: 202 Aceptado cuando se acepta la operación y 200 Aceptar cuando se completa la operación. Para realizar un seguimiento del estado de la operación, use el encabezado de ubicación para obtener el estado más reciente de la operación.
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
Ejemplo de cuerpo de respuesta cuando se completa la operación:
{
"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"
}
}
Puede comprobar si el registro se realizó correctamente a partir del valor del parámetro registrationstatus en el cuerpo de la respuesta. En nuestro caso, muestra el estado registrado para SQLServer2012, por lo que la operación de registro se realizó correctamente.
Interrogar todas las bases de datos SQL sin protección en una máquina virtual
Para consultar los elementos protegibles de una cuenta de almacenamiento, use la operación Protection Containers-Inquire. Es una operación asincrónica y se debe realizar un seguimiento de los resultados mediante el encabezado de ubicación.
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}
Defina las variables de los URI anteriores como se indica a continuación:
-
{resourceGroupName}: SQLServerSelfHost -
{vaultName}: SQLServer2012 -
{fabricName}: Azure -
{containerName}: es el atributo de nombre del cuerpo de la respuesta de la operación GET ProtectableContainers. En nuestro ejemplo, el nombre del atributo es 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'
Una vez que la solicitud se realiza correctamente, devuelve el código de estado Correcto.
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
Seleccionar las bases de datos de las que desea hacer una copia de seguridad
Para enumerar todos los elementos que se pueden proteger en la suscripción y buscar la base datos que se va a incluir en la copia de seguridad, use la operación GET backupprotectableItems.
GET https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupProtectableItems?api-version=2016-12-01&$filter={$filter}
Construya el URI de la forma siguiente:
-
{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'
Respuesta de ejemplo:
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 respuesta contiene la lista de todas las bases de datos sin protección y contiene toda la información que requiere el servicio de Azure Recovery para configurar la copia de seguridad. Guarde los nombres de la base de datos para su uso futuro.
Habilite la copia de seguridad para la base de datos
Después de identificar la base de datos relevante con el nombre descriptivo:
- Seleccione la política a proteger.
- Enumere las directivas existentes en el almacén, consulte la API de directivas de lista.
- Seleccione la directiva pertinente haciendo referencia al nombre de la directiva.
- Tutorial sobre la creación de políticas.
La habilitación de la protección es una operación asincrónica PUT que crea un elemento protegido.
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
Establezca las variables containername y protecteditemname mediante el atributo ID en el cuerpo de respuesta de la operación GET backupprotectableitems.
En nuestro ejemplo, el identificador del recurso compartido de archivos que queremos proteger es el siguiente:
/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
Crear un cuerpo de la solicitud:
El cuerpo de solicitud siguiente define las propiedades necesarias para crear un elemento protegido.
{
"properties": {
"backupManagementType": "AzureWorkload",
"workloadType": "SQLDataBase",
"policyId": "/subscriptions/00000000-0000-0000-0000-0000000000/resourceGroups/SQLServerSelfHost/providers/microsoft.recoveryservices/vaults/SQLServer2012/backupPolicies/HourlyLogBackup"
},
"location": "westcentralus"
}
Una vez enviada la solicitud PUT para la creación o actualización de elementos protegidos, la respuesta inicial es 202 (Aceptado) con un encabezado de ubicación.
Respuesta de muestra
La creación de un elemento protegido es una operación asincrónica que crea otra operación de la que es necesario realizar un seguimiento. Devuelve dos respuestas: 202 (Aceptado) cuando se crea otra operación y luego 200 (Correcto) cuando se completa esa operación.
Una vez enviada la solicitud PUT para la creación o actualización de elementos protegidos, la respuesta inicial es 202 (Aceptado) con un encabezado de ubicación.
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
A continuación, realice un seguimiento de la operación resultante con el encabezado de ubicación o el encabezado Azure-AsyncOperation y un comando 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
Una vez que se complete la operación, devuelve 200 (Correcto) con el contenido del elemento protegido en el cuerpo de respuesta.
Ejemplo de cuerpo de respuesta:
{
"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"
}
}
Así se confirma que la protección está habilitada para la base de datos y la primera copia de seguridad se desencadenará según la programación de la directiva.
Desencadenamiento de una copia de seguridad a petición para base de datos
Una vez que configure una base de datos para realizar una copia de seguridad, las copias de seguridad se ejecutan según la programación de directivas. Puede esperar a la primera copia de seguridad programada o desencadenar una copia de seguridad a petición en cualquier momento.
Desencadenar una copia de seguridad a petición es una operación POST.
Nota
El período de retención de esta copia de seguridad viene determinado por el tipo de copia de seguridad a petición que se haya ejecutado.
- Completa a petición conserva las copias de seguridad durante un mínimo de 45 días y un máximo de 99 años.
- Solo copia a petición completa acepta cualquier valor para la retención.
- La copia diferencial a petición conserva la copia de seguridad según la retención delas copias diferenciales programadas establecidos en la directiva.
- Registro a petición conserva las copias de seguridad según la retención de registros programados establecidos en la directiva.
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} y {protectedItemName} se han creado anteriormente al habilitar la copia de seguridad. En nuestro ejemplo, esto se traduce en:
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
Creación del cuerpo de la solicitud
Use el siguiente cuerpo de solicitud para crear una copia de seguridad completa a petición.
{
"properties": {
"objectType": "AzureWorkloadBackupRequest",
"backupType": "Full"
}
}
Respuestas a la operación de copia de seguridad a petición
Desencadenar una copia de seguridad a petición es una operación asincrónica. Significa que esta operación crea otra que tiene que ser seguida por separado.
Devuelve dos respuestas: 202 (Aceptado) cuando se crea otra operación y luego 200 (Correcto) cuando se completa esa operación.
Respuestas de ejemplo a la operación de copia de seguridad a petición
Una vez enviada la solicitud POST para una copia de seguridad a petición, la respuesta inicial es 202 (Accepted) con un encabezado de ubicación o 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
A continuación, realice un seguimiento de la operación resultante con el encabezado de ubicación o el encabezado Azure-AsyncOperation y un comando 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
Una vez completada la operación, devuelve 200 (Correcto) con el identificador del trabajo de copia de seguridad resultante en el cuerpo de respuesta.
Muestra de cuerpo de respuesta
{
"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"
}
}
Puesto que el trabajo de copia de seguridad es una operación de larga duración, se debe seguir como se explica en el documento sobre la supervisión de trabajos con API de REST.
Configurar una copia de seguridad instantánea para una instancia de SQL Server
Para configurar una copia de seguridad instantánea a nivel de instancia, crea una política con una SnapshotFull subpolítica y activa la protección para la instancia SQL. Los siguientes ejemplos usan 2024-01-31-preview salvo que especifiquen una versión diferente de la API. Completa los pasos de descubrimiento y registro de la VM anteriores en este artículo antes de habilitar la protección.
Reemplace {subscriptionId}, {resourceGroupName} y {vaultName} por los detalles de su almacén. Use los nombres de contenedor y de elemento que devuelve la detección en lugar de construirlos manualmente. Los valores JSON incluidos entre llaves son marcadores de posición que debes reemplazar antes de enviar una solicitud.
Crear una política de copia de seguridad instantánea
Crea la política con una solicitud PUT :
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupPolicies/SQLInstanceSnapPolicy?api-version=2024-01-31-preview
La siguiente política programa instantáneas cada seis horas dentro de una ventana de 12 horas y programa copias de seguridad del registro cada 60 minutos. Conserva puntos de recuperación instantánea durante cuatro días y especifica la retención diaria, semanal, mensual y anual.
{
"properties": {
"backupManagementType": "AzureWorkload",
"workLoadType": "SQLInstance",
"settings": {
"timeZone": "UTC",
"issqlcompression": false
},
"subProtectionPolicy": [
{
"policyType": "SnapshotFull",
"schedulePolicy": {
"schedulePolicyType": "SimpleSchedulePolicy",
"scheduleRunFrequency": "Hourly",
"hourlySchedule": {
"interval": 6,
"scheduleWindowStartTime": "2023-12-19T20:00:00.000Z",
"scheduleWindowDuration": 12
}
},
"retentionPolicy": {
"retentionPolicyType": "LongTermRetentionPolicy",
"dailySchedule": {
"retentionTimes": ["2023-12-19T20:00:00.000Z"],
"retentionDuration": {
"count": 10,
"durationType": "Days"
}
},
"weeklySchedule": {
"daysOfTheWeek": ["Sunday"],
"retentionTimes": ["2023-12-19T20:00:00.000Z"],
"retentionDuration": {
"count": 20,
"durationType": "Weeks"
}
},
"monthlySchedule": {
"retentionScheduleFormatType": "Weekly",
"retentionScheduleWeekly": {
"daysOfTheWeek": ["Sunday"],
"weeksOfTheMonth": ["Second"]
},
"retentionTimes": ["2023-12-15T20:00:00.000Z"],
"retentionDuration": {
"count": 10,
"durationType": "Months"
}
},
"yearlySchedule": {
"retentionScheduleFormatType": "Weekly",
"monthsOfYear": ["January"],
"retentionScheduleWeekly": {
"daysOfTheWeek": ["Sunday"],
"weeksOfTheMonth": ["Last"]
},
"retentionTimes": ["2023-12-19T20:00:00.000Z"],
"retentionDuration": {
"count": 12,
"durationType": "Years"
}
}
},
"snapshotBackupAdditionalDetails": {
"instantRpRetentionRangeInDays": 4,
"instantRPDetails": "{snapshotResourceGroupName}",
"userAssignedManagedIdentityDetails": {
"identityArmId": "/subscriptions/{subscriptionId}/resourceGroups/{identityResourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}",
"identityName": "{identityName}",
"userAssignedIdentityProperties": {
"clientId": "{clientId}",
"principalId": "{principalId}"
}
}
},
"timeZone": "UTC"
},
{
"policyType": "Log",
"schedulePolicy": {
"schedulePolicyType": "LogSchedulePolicy",
"scheduleFrequencyInMins": 60
},
"retentionPolicy": {
"retentionPolicyType": "SimpleRetentionPolicy",
"retentionDuration": {
"count": 10,
"durationType": "Days"
}
}
}
]
}
}
Sustituye los marcadores de posición del grupo de recursos de la instantánea y de la identidad administrada asignada por el usuario por los valores de tu entorno. Guarda el ID. de recurso de la directiva para la solicitud de protección.
Listar bases de datos disponibles para la protección de instancias
Utilice la siguiente solicitud para listar bases de datos no protegidas con el nombre de instancia padre especificado:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupProtectableItems?api-version=2024-01-31-preview&$filter=backupManagementType eq 'AzureWorkload' and workloadType eq 'SQLInstance' and status eq 'NotProtected' and parentName eq 'MSSQLSERVER'
La respuesta contiene una matriz value de elementos que se pueden proteger. Para cada base de datos, inspeccione properties.parentName, properties.serverName, properties.friendlyName y properties.protectionState para seleccionar las bases de datos del servidor previsto. Por ejemplo, las propiedades de la base de datos devueltas pueden incluir:
{
"parentName": "MSSQLSERVER",
"serverName": "sqlserver-0",
"IsProtectable": true,
"backupManagementType": "AzureWorkload",
"workloadType": "SQL",
"protectableItemType": "SQLDataBase",
"friendlyName": "model",
"protectionState": "NotProtected"
}
Habilitar la protección para una instancia independiente
Envía una solicitud PUT para el elemento protegido de la instancia SQL:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/sqlinstance;mssqlserver?api-version=2024-01-31-preview
Utiliza el ID de política de instantánea y los nombres de la base de datos seleccionados en el cuerpo de la solicitud:
{
"properties": {
"backupManagementType": "AzureWorkload",
"workloadType": "SQLInstance",
"protectedItemType": "AzureVmWorkloadSQLInstance",
"friendlyName": "MSSQLSERVER",
"policyId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupPolicies/SQLInstanceSnapPolicy",
"childDatabaseNameList": ["model"]
}
}
Habilitar la protección de un grupo de disponibilidad
Para un grupo de disponibilidad, use su nombre sqlagworkloadcontainer detectado y el nombre del elemento protegido de la instancia. El siguiente ejemplo utiliza el grupo chgag1 de disponibilidad y la versión 2021-02-01-previewde la API:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/sqlagworkloadcontainer;{availabilityGroupContainerId}/protectedItems/SQLInstance;chgag1?api-version=2021-02-01-preview
{
"properties": {
"backupManagementType": "AzureWorkload",
"workloadType": "SQLInstance",
"protectedItemType": "AzureVmWorkloadSQLInstance",
"friendlyName": "chgag1",
"policyId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupPolicies/SQLInstanceSnapPolicy",
"childDatabaseNameList": ["testdb3", "testdb4", "testdb5"]
}
}
Para inspeccionar la instancia protegida y sus bases de datos, consulte Ver las instancias y bases de datos SQL protegidas.
Activa una copia de seguridad de instantánea bajo demanda para una instancia
Usa el nombre del elemento protegido por instancia para activar una copia de seguridad instantánea. La siguiente solicitud utiliza la versión 2017-07-01de la API:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/{containerName}/protectedItems/SQLInstance;mssqlserver/backup?api-version=2017-07-01
{
"properties": {
"backupType": "snapshotfull",
"enableCompression": false,
"recoveryPointExpiryTimeInUTC": "{recoveryPointExpiryTimeInUTC}",
"objectType": "AzureWorkloadBackupRequest"
}
}
Sustituye {recoveryPointExpiryTimeInUTC} por el tiempo de caducidad requerido en UTC, como 2026-12-08T11:34:36.000Z. Rastrea la operación asíncrona y el trabajo resultante tal y como se describe en Supervisar trabajos.
Pasos siguientes
- Restaure las bases de datos SQL mediante la API REST.
- Administre las bases de datos de SQL Server en máquinas virtuales de Azure con Azure Portal, la CLI de Azure y la API REST.