Compartir a través de


Restauración de las bases de datos de SQL en una máquina virtual de Azure con la CLI de Azure

La CLI de Azure se usa para crear y administrar los recursos de Azure desde la línea de comandos o mediante scripts. En este artículo se describe cómo restaurar una base de datos SQL con copia de seguridad en una máquina virtual de Azure mediante la CLI de Azure. También puede llevar a cabo estas acciones con Azure Portal.

Use Azure Cloud Shell para ejecutar comandos de la CLI.

En este artículo se presupone que tiene una base de datos que se ejecuta en una máquina virtual de Azure con copia de seguridad realizada mediante Azure Backup. Si ha usado Realización de una copia de seguridad de una base de datos de SQL en Azure mediante la CLI para la copia de seguridad de la base de datos de SQL, estará usando los siguientes recursos:

  • Grupo de recursos con el nombre SQLResourceGroup.
  • Almacén denominado SQLVault.
  • Contenedor protegido denominadoVMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • El elemento o la base de datos con copia de seguridad denominado sqldatabase;mssqlserver;master.
  • Recursos de la región de westus.

Nota

Consulte la matriz de compatibilidad de copia de seguridad de SQL para más información sobre las configuraciones y los escenarios admitidos.

Ver los puntos de restauración de una base de datos con copia de seguridad

Para ver la lista de todos los puntos de recuperación de una base de datos, use el cmdlet az backup recoverpoint list como se indica a continuación:

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

La lista de puntos de recuperación aparece como:

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

La lista anterior contiene tres puntos de recuperación: para las copias de seguridad completas, las diferenciales y las de registro.

Nota

También puede ver los puntos inicial y final de cada cadena de copia de seguridad de registro íntegra mediante el comando az backup recoverypoin show-log-chain.

Requisitos previos para restaurar una base de datos

Antes de restaurar una base de datos, asegúrese de que se cumplen los requisitos previos siguientes:

  • Solo puede restaurar la base de datos en una instancia de SQL que se encuentre en la misma región.
  • La instancia de destino debe estar registrada en el mismo almacén que la de origen.

Restaurar una base de datos

Azure Backup puede restaurar bases de datos de SQL que se ejecuten en máquinas virtuales de Azure, como:

  • Restaurar a una fecha u hora específicas (con precisión de segundos) mediante copias de seguridad de registros. Azure Backup determina automáticamente la copia de seguridad diferencial o completa apropiada, y la cadena de copias de seguridad de registros necesarias para restaurar los datos en función del tiempo seleccionado.
  • Restaurar una copia de seguridad completa o diferencial específica para restaurar a un punto de recuperación específico.

Para restaurar una base de datos, use el comando az restore-azurewl, que requiere un objeto de configuración de recuperación como una de las entradas. Puede generar este objeto mediante el comando az backup recoveryconfig show. El objeto de configuración de recuperación contiene todos los detalles para realizar la restauración. Uno de ellos es el modo de restauración: OriginalWorkloadRestore o AlternateWorkloadRestore.

Nota

OriginalWorkloadRestore: restaura los datos en la misma instancia de SQL de origen. Esta opción sobrescribe la base de datos original. AlternateWorkloadRestore: restaura la base de datos en una ubicación alternativa y mantiene la base de datos de origen intacta.

Restauración a una ubicación alternativa

Para restaurar una base de datos en una ubicación alternativa, use AlternateWorkloadRestore como modo de restauración. A continuación debe elegir el punto de restauración, que puede ser un momento anterior o cualquiera de los puntos de restauración anteriores.

Vamos a continuar con la restauración a un punto de restauración anterior. Consulte la lista de puntos de restauración de la base de datos y elija el momento al que desea realizar la restauración. Aquí se usará el punto de restauración con el nombre 7660777527047692711.

Con el nombre de punto de restauración anterior y el modo de restauración, vamos a crear el objeto de configuración de recuperación mediante el comando az backup recoveryconfig show. Compruebe los parámetros restantes en este comando:

  • --target-item-name: nombre que va a usar la base de datos restaurada. En este escenario, usamos el nombre restored_database.
  • --target-server-name: nombre de un servidor SQL Server que se ha registrado correctamente en un almacén de Recovery Services y que permanece en la misma región que la base de datos que se va a restaurar. Aquí, vamos a restaurar la base de datos en el mismo servidor SQL Server que ha protegido, el que se llama testSQLVM.
  • --target-server-type: para la restauración de bases de datos SQL, debe usar SQLInstance.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

La respuesta a la consulta anterior será un objeto de configuración de recuperación con el aspecto siguiente:

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

Ahora, para restaurar la base de datos, ejecute el comando az restore restore-azurewl. Para usar este comando, se especificará la salida JSON anterior, guardada en un archivo denominado recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

La salida tiene el siguiente aspecto:

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

La respuesta le proporcionará el nombre del trabajo. Puede usar este nombre de trabajo para realizar un seguimiento del estado del trabajo mediante el comando az backup job show.

Restauración y sobrescritura

Para la restauración en la ubicación original, usaremos OrignialWorkloadRestore como modo de restauración. A continuación debe elegir el punto de restauración, que puede ser un momento anterior o cualquiera de los puntos de restauración anteriores.

Por ejemplo, para esta restauración, vamos a elegir el momento dado anterior "28-11-2019-09:53:00". Puede proporcionar este punto de restauración en los siguientes formatos: dd-mm-aaaa, dd-mm-aaaa-hh:mm:ss. Para elegir un momento dado para la restauración, use el comando az backup recoverypoint show-log-chain, que muestra los intervalos de copias de seguridad de la cadena de registro íntegras.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

La respuesta a la consulta anterior será un objeto de configuración de recuperación con el aspecto siguiente:

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

Ahora, para restaurar la base de datos, ejecute el comando az restore restore-azurewl. Para usar este comando, se especificará la salida JSON anterior, guardada en un archivo denominado recoveryconfig.json.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

La salida tiene el siguiente aspecto:

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

La respuesta le proporcionará el nombre del trabajo. Puede usar este nombre de trabajo para realizar un seguimiento del estado del trabajo mediante el comando az backup job show.

Restauración en una región secundaria

Para restaurar una base de datos en la región secundaria, especifique un almacén de destino y un servidor ubicados en la región secundaria, en la configuración de restauración.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

La respuesta es un objeto de configuración de recuperación que aparece como:

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

Use esta configuración de recuperación en el comando az restore restore-azurewl. Seleccione la marca --use-secondary-region para restaurar la base de datos a la región secundaria.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

La salida tiene el siguiente aspecto:

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Nota

El RPO para que los datos de copia de seguridad estén disponibles en la región secundaria es de 12 horas. Por lo tanto, cuando se activa el CRR, el RPO para la región secundaria es de 12 horas + la duración de la frecuencia de registro (que puede establecerse en un mínimo de 15 minutos).

Restaurar como archivos

Para restaurar los datos de la copia de seguridad como archivos en lugar de una base de datos, utilizaremos RestoreAsFiles como modo de restauración. A continuación debe elegir el punto de restauración, que puede ser un momento anterior o cualquiera de los puntos de restauración anteriores. Cuando los archivos se vuelcan a una ruta de acceso especificada, puede llevar estos archivos a cualquier máquina SQL en la que quiera restaurarlos como base de datos. Dado que puede mover estos archivos a cualquier máquina, ahora puede restaurar los datos entre suscripciones y regiones.

Aquí elegiremos el momento anterior 28-11-2019-09:53:00 para la restauración y la ubicación /home/sql/restoreasfiles para el volcado de la copia de seguridad en el mismo servidor SQL Server. Puede proporcionar este punto de restauración en uno de los siguientes formatos: dd-mm-aaaa o dd-mm-aaaa-hh:mm:ss. Para elegir un momento dado para la restauración, use el comando az backup recoverypoint show-log-chain, que muestra los intervalos de copias de seguridad de la cadena de registro íntegras.

Con el nombre de punto de restauración anterior y el modo de restauración, vamos a crear el objeto de configuración de recuperación mediante el comando az backup recoveryconfig show. Compruebe cada uno de los parámetros restantes en este comando:

  • --target-container-name: nombre de un servidor SQL Server que se ha registrado correctamente en un almacén de Recovery Services y se encuentra en la misma región que la base de datos que se va a restaurar. Vamos a restaurar la base de datos como archivos en el mismo servidor SQL Server que se ha protegido, llamado hxehost.
  • --rp-name: para una restauración a un momento dado, el nombre del punto de restauración será DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

La respuesta a la consulta anterior será un objeto de configuración de recuperación con el aspecto siguiente:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

Ahora, para restaurar la base de datos como archivos, ejecute el comando az restore restore-azurewl. Para usar este comando, se especificará la salida JSON anterior, guardada en un archivo denominado recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

La salida tiene el siguiente aspecto:

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

La respuesta le proporcionará el nombre del trabajo. Puede usar este nombre de trabajo para realizar un seguimiento del estado del trabajo mediante el comando az backup job show.

Nota

Si no desea restaurar toda la cadena, sino solo un subconjunto de archivos, siga los pasos que se documentan aquí.

Restauración entre suscripciones

Con la restauración entre suscripciones (CSR), tiene la flexibilidad de restaurar a cualquier suscripción y a cualquier almacén del inquilino si los permisos de restauración están disponibles. De manera predeterminada, CSR está habilitado en todos los almacenes de Recovery Services (almacenes existentes y recién creados).

Nota:

  • Puede desencadenar la restauración entre suscripciones desde el almacén de Recovery Services.
  • CSR solo se admite para la copia de seguridad basada en streaming y no se admite para la copia de seguridad basada en instantáneas.
  • No se admite la restauración entre regiones (CRR) con CSR.
az backup vault create

Agregue el parámetro cross-subscription-restore-state que le permite establecer el estado de CSR del almacén durante la creación y actualización del almacén.

az backup recoveryconfig show

Agregue el parámetro --target-subscription-id que le permite proporcionar la suscripción de destino como entrada al desencadenar la restauración entre suscripciones para orígenes de datos de SQL o HANA.

Ejemplo:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

Paso siguiente