Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Nota
Consulte la matriz de compatibilidad de copia de seguridad de SQL para más información sobre las configuraciones y los escenarios admitidos.
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 para 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). El almacén ahora puede detectar cualquier máquina virtual con bases de datos SQL de las que se puedan hacer copias de seguridad 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 las bases de datos SQL para hacer una copia de seguridad con el almacén de Recovery Services
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}
- Celeste -
{vaultName}
- SQLServer2012 -
{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.
Nota
Tome siempre el atributo de 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 API si el formato contenedor-nombre 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.
Consultar todas las bases de datos SQL sin protección de una máquina virtual
Para consultar los elementos que se pueden proteger 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 directiva que desea 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.
- Crear tutorial de directivas.
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 a 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.
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.