Copia de seguridad y restauración de bases de datos SQL en máquinas virtuales de Azure con PowerShell

En este artículo se describe cómo usar Azure PowerShell para realizar copias de seguridad y recuperar una base de datos SQL dentro de una máquina virtual de Azure mediante el almacén de Recovery Services de Azure Backup.

En este artículo se explica lo siguiente:

  • Configurar PowerShell y registrar el proveedor de Azure Recovery Services.
  • Cree un almacén de Recovery Services.
  • Configurar la copia de seguridad de SQL DB dentro de una máquina virtual de Azure.
  • Ejecutar un trabajo de copia de seguridad.
  • Restaurar una copia de seguridad de base de datos SQL.
  • Supervisar los trabajos de copia de seguridad y restauración.

Antes de comenzar

Jerarquía de objetos de Recovery Services

En el diagrama siguiente, se resume la jerarquía de objetos.

Recovery Services object hierarchy

Revise la referencia de cmdlet de Az.RecoveryServices en la biblioteca de Azure.

Configuración e instalación

Configure PowerShell como sigue:

  1. Descargue la versión más reciente de Azure PowerShell. La versión 1.5.0 es la versión mínima requerida.

  2. Busque los cmdlets de PowerShell de Azure Backup con este comando:

    Get-Command *azrecoveryservices*
    
  3. Revise los alias y cmdlets de Azure Backup y el almacén de Recovery Services. Este es un ejemplo de lo que puede ver. No es la lista completa de los cmdlets.

    List of Recovery Services cmdlets

  4. Inicie sesión en su cuenta de Azure con el cmdlet Connect-AzAccount.

  5. En la página web que aparece, se le pedirá que escriba las credenciales de su cuenta.

    • Como alternativa, puede incluir las credenciales de su cuenta como un parámetro en el cmdlet Connect-AzAccount mediante el parámetro -Credential.
    • Si es un asociado CSP que trabaja en nombre de un inquilino, especifique el cliente como inquilino usando su TenantID o su nombre de dominio principal de inquilino. Un ejemplo es Connect-AzAccount -Tenant fabrikam.com.
  6. Asocie la suscripción que quiere usar con la cuenta, dado que una cuenta puede tener varias suscripciones.

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Si utiliza Azure Backup por primera vez, use el cmdlet Register-AzResourceProvider para registrar el proveedor de Azure Recovery Services con su suscripción.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. Compruebe que los proveedores se han registrado correctamente:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. En la salida del comando, compruebe que RegistrationState cambia a Registered. En caso contrario, vuelva a ejecutar el cmdlet Register-AzResourceProvider.

Creación de un almacén de Recovery Services

Siga estos pasos para crear un almacén de Recovery Services.

El almacén de Recovery Services es un recurso de Resource Manager, por lo que deberá colocarlo dentro de un grupo de recursos. Puede usar un grupo de recursos existente o crear uno con el cmdlet New-AzResourceGroup. Al crear un grupo de recursos, especifique el nombre y la ubicación.

  1. Un almacén se coloca en un grupo de recursos. Si no tiene un grupo de recursos, cree uno con New-AzResourceGroup. En el ejemplo, se crea un grupo de recursos en la región Oeste de EE. UU.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Use el cmdlet New-AzRecoveryServicesVault para crear el almacén. Especifique para el almacén la misma ubicación del grupo de recursos.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Especifique el tipo de redundancia para el almacenamiento.

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperties  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

Visualización de los almacenes de una suscripción

Para ver todos los almacenes de la suscripción, use Get-AzRecoveryServicesVault.

Get-AzRecoveryServicesVault

La salida será similar a la siguiente. Se proporcionan el grupo de recursos y la ubicación asociados.

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

Establecer el contexto de almacén

Almacene el objeto de almacén en una variable y establezca el contexto de almacén.

  • Muchos de los cmdlets de Azure Backup requieren el objeto de almacén de Recovery Services como una entrada, por lo que es conveniente almacenar el objeto de almacén en una variable.
  • El contexto de almacén es el tipo de los datos protegidos en el almacén. Establézcalo con Set-AzRecoveryServicesVaultContext. Una vez que se haya establecido el contexto, se aplica a todos los cmdlets posteriores.

En el ejemplo siguiente se establece el contexto del almacén de testvault.

Get-AzRecoveryServicesVault -Name "testvault" | Set-AzRecoveryServicesVaultContext

Recuperación del identificador del almacén

Tenemos previsto dejar de usar la configuración del contexto de almacén según las directrices de Azure PowerShell. En su lugar, puede almacenar o recuperar el identificador del almacén y pasarlo a los comandos pertinentes, como sigue:

$testVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$testVault.ID

Configuración de una directiva de copia de seguridad

Una directiva de copia de seguridad especifica la programación para las copias de seguridad y cuánto tiempo se deben mantener los puntos de recuperación de copia de seguridad:

De forma predeterminada, se define una hora de inicio en el objeto de directiva de programación. Use el siguiente ejemplo para cambiar la hora de inicio a la hora de inicio deseada. La hora de inicio deseada debe estar también en formato UTC. En el ejemplo siguiente se supone que la hora de inicio deseada es la 1:00 UTC para las copias de seguridad diarias.

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$UtcTime = (Get-Date -Date "2019-03-20 01:30:00Z").ToUniversalTime()
$schPol.FullBackupSchedulePolicy.ScheduleRunTimes[0] = $UtcTime

Importante

Solo tiene que proporcionar la hora de inicio en múltiplos de 30 minutos. En el ejemplo anterior, solo puede ser "01:00:00" o "02:30:00". La hora de inicio no puede ser "01:15:00".

En el ejemplo siguiente se almacenan la directiva de programación y la directiva de retención en variables. A continuación, usa estas variables como parámetros para una nueva directiva (NewSQLPolicy). NewSQLPolicy toma una copia de seguridad diario "completa" diaria, la conserva durante 180 días y toma una copia de seguridad del registro cada 2 horas

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "MSSQL"
$NewSQLPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "NewSQLPolicy" -WorkloadType "MSSQL" -RetentionPolicy $retPol -SchedulePolicy $schPol

La salida será similar a la siguiente.

Name                 WorkloadType       BackupManagementType BackupTime                Frequency                                IsDifferentialBackup IsLogBackupEnabled
                                                                                                                                Enabled
----                 ------------       -------------------- ----------                ---------                                -------------------- ------------------
NewSQLPolicy         MSSQL              AzureWorkload        3/15/2019 01:30:00 AM      Daily                                    False                True

Habilitación de la copia de seguridad

Registro de la máquina virtual SQL

Para las copias de seguridad de máquinas virtuales de Azure y los recursos compartidos de Azure File, el servicio Backup puede conectarse a estos recursos de Azure Resource Manager y capturar los detalles pertinentes. Puesto que SQL es una aplicación dentro de una máquina virtual de Azure, el servicio Backup necesita permiso para acceder a la aplicación y capturar los detalles necesarios. Para ello, debe "registrar" la máquina virtual de Azure que contiene la aplicación de SQL con un almacén de Recovery Services. Una vez que registra una máquina virtual de SQL con un almacén, puede proteger las bases de datos SQL solo en dicho almacén. Use el cmdlet Register-AzRecoveryServicesBackupContainer de PowerShell para registrar la máquina virtual.

 $myVM = Get-AzVM -ResourceGroupName <VMRG Name> -Name <VMName>
Register-AzRecoveryServicesBackupContainer -ResourceId $myVM.ID -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID -Force

El comando devolverá un contenedor de copia de seguridad de este recurso y el estado se registrará.

Nota

Si no se especifica el parámetro force, se pide al usuario que lo confirme con el mensaje "¿Desea deshabilitar la protección de este contenedor?". Por favor, ignore este texto e indique "Y" para confirmar. Se trata de un problema conocido y estamos trabajando para quitar el mensaje y los requisitos para el parámetro force.

Obtención de bases de datos SQL

Una vez que se realiza el registro, el servicio Backup podrá mostrar todos los componentes SQL disponibles en la máquina virtual. Para ver todos los componentes SQL que aún tienen que incluirse en la copia de seguridad para este almacén, use el cmdlet Get-AzRecoveryServicesBackupProtectableItem de PowerShell.

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID

La salida mostrará todos los componentes SQL no protegidos en todas las máquinas virtuales SQL registradas en este almacén con Item Type (Tipo de elemento) y ServerName (Nombre de servidor). Puede filtrar aún más una máquina virtual SQL determinada si pasa el parámetro "-Container" o usa la combinación de "Name" y "ServerName" junto con la marca ItemType para llegar a un único elemento de SQL.

$SQLDB = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID -Name "<Item Name>" -ServerName "<Server Name>"

Configuración de la copia de seguridad

Ahora que tenemos la base de datos SQL y la directiva necesarias con la que necesita incluirse en la copia de seguridad, podemos utilizar el cmdlet Enable-AzRecoveryServicesBackupProtection para configurar la copia de seguridad para esta base de datos de SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

El comando espera hasta que se complete la configuración de copia de seguridad y devuelve la siguiente salida.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 6:00:21 PM      3/18/2019 6:01:35 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Obtención de nuevas bases de datos SQL

Una vez registrada la máquina, el servicio Backup capturará los detalles de las bases de datos disponibles entonces. Si se agregan instancias de SQL o bases de datos SQL a la máquina registrada más adelante, es necesario desencadenar manualmente el servicio Backup para llevar a cabo una nueva consulta y obtener todas las bases de datos no protegidas (incluidas las recién agregadas). Use el cmdlet Initialize-AzRecoveryServicesBackupItem de PowerShell en la máquina virtual de SQL para realizar una consulta nueva. El comando espera hasta que se completa la operación. Use más adelante el cmdlet Get AzRecoveryServicesBackupProtectableItem de PowerShell para obtener la lista de componentes SQL más recientes sin protección.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Initialize-AzRecoveryServicesBackupProtectableItem -Container $SQLContainer -WorkloadType MSSQL -VaultId $testVault.ID
Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID

Una vez que se capturan los elementos relevantes que se pueden proteger, habilite las copias de seguridad como se indica en la sección anterior. Si no se desea detectar manualmente las bases de datos nuevas, puede optar por la protección automática, como se explica a continuación.

Habilitar la protección automática

Puede configurar la copia de seguridad de modo que todas las bases de datos que se agreguen en el futuro se protejan automáticamente con una directiva determinada. Para habilitar la protección automática, use el cmdlet Enable AzRecoveryServicesBackupAutoProtection de PowerShell.

Puesto que la indicación es realizar la copia de seguridad de todas las bases de datos posteriores, la operación se realiza en un nivel de SQLInstance.

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -Policy $NewSQLPolicy -VaultId $testVault.ID

Una vez que se intenta la protección automática, la consulta en la máquina para capturar las bases de datos recién agregadas se lleva a cabo como una tarea programada en segundo plano cada 8 horas.

Restauración de las bases de datos SQL

Azure Backup puede restaurar las bases de datos SQL Server que se ejecutan en las máquinas virtuales de Azure como se indica a continuación:

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

Compruebe los requisitos previos mencionados aquí antes de restaurar las bases de datos SQL.

Advertencia

Debido a un problema de seguridad relacionado con RBAC, hemos tenido que introducir un cambio importante en los comandos de restauración para SQL DB mediante PowerShell. Actualice a la versión 6.0.0 o posterior de Az para que se envíen los comandos de restauración adecuados mediante PowerShell. A continuación, se proporcionan los comandos de PS más recientes.

Capture primero la copia de seguridad correspondiente de la base de datos SQL mediante el cmdlet Get AzRecoveryServicesBackupItem de PowerShell.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID

Captura de la hora de restauración pertinente

Tal como se describió anteriormente, puede restaurar la base de datos SQL de la copia de seguridad a una copia completa o diferencial O a un registro a un momento dado.

Captura de los diferentes puntos de recuperación

Use Get AzRecoveryServicesBackupRecoveryPoint para capturar distintos puntos de recuperación (completa o diferencial) de una base de datos de SQL de copia de seguridad.

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate

La salida es similar a la del ejemplo siguiente.

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

Use el filtro "RecoveryPointId" o un filtro de matriz para capturar el punto de recuperación correspondiente.

$FullRP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -RecoveryPointId "6660368097802"

Recuperación a un momento dado

Si quiere restaurar la base de datos a un momento dado, use el cmdlet Get AzRecoveryServicesBackupRecoveryLogChain de PowerShell. El cmdlet devuelve una lista de fechas que representan las horas de inicio y finalización de una cadena continua, ininterrumpida de registro para ese elemento de copia de seguridad de SQL. El momento deseado debería estar dentro de este intervalo.

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $bkpItem -VaultId $testVault.ID

El resultado será similar al ejemplo siguiente.

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

La salida anterior significa que puede restaurar a cualquier momento entre la hora de inicio y la hora de finalización mostradas. Todas las horas se muestran en UTC. Cree un momento en PowerShell que esté dentro del intervalo que se muestra arriba.

Nota

Cuando se selecciona un registro a un momento dado para restaurar, no tiene que especificar el punto de partida, es decir, la copia de seguridad completa a partir de la que se restaura la base de datos. El servicio Azure Backup se encargará del plan de recuperación completa, es decir, qué copia de seguridad completa elegir, qué copias de seguridad del registro aplicar, etc.

Determinación de la configuración ante desastres

En el caso de la restauración de una base de datos SQL, se admiten los siguientes escenarios de restauración.

  • Invalidación de la base de datos SQL de copia de seguridad con los datos de otro punto de recuperación: OriginalWorkloadRestore
  • Restauración de la base de datos SQL como una base de datos nueva en la misma instancia SQL: AlternateWorkloadRestore
  • Restauración de la base de datos SQL como una base de datos nueva en la otra instancia SQL de otra máquina virtual SQL: AlternateWorkloadRestore
  • Restaurar la base de datos de SQL como archivos bak.: RestoreAsFiles

Después de capturar el punto de recuperación correspondiente (distinto o registro punto en el tiempo), use el cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig de PowerShell para capturar el objeto de configuración de recuperación según el plan de recuperación deseado.

Restauración de carga de trabajo original

Para reemplazar la base de datos de copia de seguridad con los datos a partir del punto de recuperación, simplemente especifique la marca adecuada y el punto de recuperación correspondiente como se muestra en los ejemplos siguientes.

Restauración original con un punto de recuperación distinto
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
Restauración original con el registro a un momento dado
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Restauración de carga de trabajo alternativa

Importante

Una copia de seguridad de una base de datos SQL se puede restaurar como una base de datos solo a otra instancia SQLInstance, en una máquina virtual de Azure registrada en este almacén.

Como se describió anteriormente, si la instancia SQLInstance de destino se encuentra dentro de otra máquina virtual de Azure, asegúrese de que se registra en este almacén y de que la instancia SQLInstance correspondiente aparece como un elemento que se pueda proteger. En este documento, se supone que el nombre de la instancia de SQL de destino es MSSQLSERVER dentro de otra máquina virtual llamada "Contoso2".

$TargetContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $testVault.ID -FriendlyName "Contoso2"
$TargetInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -Name "MSSQLSERVER" -ServerName "Contoso2" -VaultId $testVault.ID

A continuación, pase el punto de recuperación correspondiente, seleccione la instancia de SQL de destino con la marca correcta como se muestra a continuación y el contenedor de destino en el que existe la instancia de SQL de destino.

Restauración alternativa con un punto de recuperación distinto
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restauración alternativa con el registro a un momento dado
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restaurar como Archivos

Para restaurar los datos de copia de seguridad como archivos .bak en lugar de una base de datos, seleccione la opción Restaurar como archivos. La base de datos SQL de la que se ha realizado una copia de seguridad se puede restaurar en cualquier máquina virtual de destino registrada en este almacén.

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
Restaurar como archivos con un punto de recuperación distinto
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurar como archivos con el punto de registro en el tiempo desde la última versión completa
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurar como archivos con el punto de registro en el tiempo desde un completo especificado

Si desea proporcionar un completo específico que se debe usar para la restauración, use el siguiente comando:

$FileRestoreWithLogAndSpecificFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -FromFull $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID

El objeto de configuración del punto de recuperación final obtenido con el cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig de PowerShell tiene toda la información pertinente para la restauración y es como se muestra a continuación.

TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : No
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

Puede editar los campos del nombre de la base de datos restaurada, OverwriteWLIfpresent, NoRecoveryMode y targetPhysicalPath. Obtenga más detalles sobre las rutas de acceso del archivo de destino tal y como se muestra a continuación.

$AnotherInstanceWithFullConfig.targetPhysicalPath
MappingType SourceLogicalName SourcePath                  TargetPath
----------- ----------------- ----------                  ----------
Data        azurebackup1      F:\Data\azurebackup1.mdf    F:\Data\azurebackup1_1553001753.mdf
Log         azurebackup1_log  F:\Log\azurebackup1_log.ldf F:\Log\azurebackup1_log_1553001753.ldf

Establezca las propiedades correspondientes de PowerShell como valores de cadena, como se muestra a continuación.

$AnotherInstanceWithFullConfig.OverwriteWLIfpresent = "Yes"
$AnotherInstanceWithFullConfig | fl
TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : Yes
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

Importante

Asegúrese de que el objeto de configuración de recuperación final tiene todos los valores adecuados y necesarios puesto que la operación de restauración se basará en el objeto de configuración.

Nota

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

Restauración de cargas de trabajo alternativas en un almacén de la región secundaria

Importante

La compatibilidad con restauraciones en regiones secundarias para SQL desde PowerShell está disponible a partir de la versión 6.0.0 de Az.

Si ha habilitado la restauración entre regiones, los puntos de recuperación se replicarán también en la región secundaria emparejada. A continuación, puede capturar esos puntos de recuperación y desencadenar una restauración en una máquina presente en esa región emparejada. Al igual que con la restauración normal, se debe registrar la máquina de destino en el almacén de destino de la región secundaria. La siguiente secuencia de pasos debe aclarar el proceso completo.

  • Capture los elementos de copia de seguridad que se replican en la región secundaria.
  • Para este tipo de elemento, recupere los puntos de recuperación (distintos y los registros) que se replican en la región secundaria.
  • A continuación, elija un servidor de destino registrado en un almacén dentro de la región emparejada secundaria.
  • Desencadene la restauración en ese servidor y realice el seguimiento mediante su JobId.

Captura de los elementos de copia de seguridad de la región secundaria

Capture todos los elementos de copia de seguridad de SQL de la región secundaria con el comando habitual, pero con un parámetro adicional para indicar que estos elementos se deben capturar desde la región secundaria.

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
Captura de puntos de recuperación distintos desde la región secundaria

Use Get-AzRecoveryServicesBackupRecoveryPoint para capturar los distintos puntos de recuperación (completos o diferenciales) de una base de datos de SQL de copia de seguridad y agregue un parámetro para indicar que se trata de puntos de recuperación recuperados desde la región secundaria.

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate -UseSecondaryRegion

La salida es similar a la del ejemplo siguiente.

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

Use el filtro "RecoveryPointId" o un filtro de matriz para capturar el punto de recuperación correspondiente.

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
Captura de puntos de recuperación de registro desde la región secundaria

Use el cmdlet de PowerShell Get-AzRecoveryServicesBackupRecoveryLogChain con el parámetro " -UseSecondaryRegion", que devolverá las horas de inicio y finalización de una cadena de registro continua e ininterrumpida para ese elemento de copia de seguridad de SQL desde la región secundaria. El momento deseado debería estar dentro de este intervalo.

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $secondaryBkpItems[0] -VaultId $testVault.ID -UseSecondaryRegion

El resultado será similar al ejemplo siguiente.

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

La salida anterior significa que puede restaurar a cualquier momento entre la hora de inicio y la hora de finalización mostradas. Todas las horas se muestran en UTC. Cree un momento en PowerShell que esté dentro del intervalo que se muestra arriba.

Captura del servidor de destino desde la región secundaria

En la región secundaria, necesitamos un almacén y un servidor de destino registrado en ese almacén. Una vez que tenemos el contenedor de destino de la región secundaria y la instancia de SQL, podemos volver a usar los cmdlets existentes para generar una configuración de carga de trabajo de restauración. En este documento, se supone que el nombre de la máquina virtual es "secondaryVM" y que el nombre de la instancia dentro de esa máquina virtual es "MSSQLInstance".

En primer lugar, se captura el almacén correspondiente presente en la región secundaria y, a continuación, se obtienen los contenedores registrados dentro de ese almacén.

$PairedRegionVault = Get-AzRecoveryServicesVault -ResourceGroupName SecondaryRG -Name PairedVault
$secContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $PairedRegionVault.ID -FriendlyName "secondaryVM"

Una vez elegido el contenedor registrado, se capturan las instancias de SQL del contenedor en el que se debe restaurar la base de datos. Aquí se supone que hay una instancia de SQL en la máquina virtual "secondaryVM" y se captura esa instancia.

$secSQLInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -VaultId $PairedRegionVault.ID -Container $secContainer

Preparación de la configuración de recuperación

Como se documentó anteriormente para la restauración normal de SQL, se puede volver a usar el mismo comando para generar la configuración de recuperación pertinente.

Para restauraciones completas desde la región secundaria
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
Para restauraciones a un momento dado del registro desde la región secundaria
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Una vez que se obtiene la configuración pertinente para la restauración de la región primaria o la restauración de la región secundaria, se puede usar el mismo comando de restauración para desencadenar restauraciones y, posteriormente, realizar un seguimiento mediante los JobID.

Restauración con la configuración pertinente

Una vez se obtenga y se compruebe el objeto de configuración de recuperación correspondiente, utilice el cmdlet restauración AzRecoveryServicesBackupItem de PowerShell para iniciar el proceso de restauración.

Restore-AzRecoveryServicesBackupItem -WLRecoveryConfig $AnotherInstanceWithLogConfig -VaultId $testVault.ID -RestoreToSecondaryRegion

La operación de restauración devuelve un trabajo para realizar el seguimiento.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Restore              InProgress           3/17/2019 10:02:45 AM                                3274xg2b-e4fg-5952-89b4-8cb566gc1748

Administración de las copias de seguridad SQL

Copia de seguridad a petición

Una vez que se ha habilitado la copia de seguridad para una base de datos, también puede desencadenar una copia de seguridad a petición para la base de datos con el cmdlet Backup-AzRecoveryServicesBackupItem de PowerShell. El siguiente ejemplo desencadena una copia de seguridad completa en una base de datos SQL con la compresión habilitada; y la copia de seguridad completa debería conservarse durante 60 días.

Nota

Las copias de seguridad completas de solo copia son idóneas para la retención a largo plazo, ya que no tienen dependencias en otros tipos de copia de seguridad, como los registros. Una copia de seguridad "Completa" se trata como un elemento principal de las copias de seguridad de registro posteriores. Como consecuencia, su retención está vinculada a la retención de registros en la directiva. Por lo tanto, el tiempo de expiración especificado por el cliente se sigue para las copias de seguridad completas de "solo copia", pero no para las copias de seguridad "completas". El periodo de retención de copia de seguridad completa se establece automáticamente durante 45 días a partir de la hora actual. El procedimiento también se documenta aquí.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
$endDate = (Get-Date).AddDays(45).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $bkpItem -BackupType CopyOnlyFull -EnableCompression -VaultId $testVault.ID -ExpiryDateTimeUTC $endDate

El comando de copia de seguridad a petición devuelve un trabajo para realizar un seguimiento.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Backup               InProgress           3/18/2019 8:41:27 PM                                2516bb1a-d3ef-4841-97a3-9ba455fb0637

Si el resultado se pierde o si desea obtener el identificador de trabajo correspondiente, obtenga la lista de trabajos del servicio Azure Backup y, a continuación, realice un seguimiento del mismo y de sus detalles.

Cambio de la directiva para los elementos de copia de seguridad

Puede cambiar la directiva del elemento de copia de seguridad de Policy1 a Policy2. Para cambiar las directivas para un elemento de copia de seguridad, capture la directiva correspondiente y haga una copia de seguridad del elemento, y use el comando Enable-AzRecoveryServices con el elemento de copia de seguridad como parámetro.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName>
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType MSSQL -BackupManagementType AzureWorkload -Name "<BackupItemName>"
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1

El comando espera hasta que se complete la configuración de copia de seguridad y devuelve la siguiente salida.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Edición de una directiva de copia de seguridad existente

Para editar una directiva existente, use el comando Set-AzRecoveryServicesBackupProtectionPolicy.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -SchedulePolicy $SchPol -RetentionPolicy $RetPol

Compruebe los trabajos de copia de seguridad después de que haya transcurrido algún tiempo para realizar un seguimiento de posibles errores. Si hubiera errores, debe corregirlos. Después, vuelva a ejecutar el comando de edición de la directiva con el parámetro FixForInconsistentItems para volver a intentar editar la directiva en todos los elementos de copia de seguridad para los que se produjo un error en la operación anteriormente.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Volver a registrar las máquinas virtuales SQL

Advertencia

Asegúrese de leer este documento para comprender los síntomas de error y las causas antes de volver a intentar el registro.

Para desencadenar el nuevo registro de la máquina virtual SQL, capture el contenedor de copia de seguridad pertinente y páselo al cmdlet de registro.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Register-AzRecoveryServicesBackupContainer -Container $SQLContainer -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

Detener protección

Conservación de los datos

Si quiere detener la protección, puede usar el cmdlet Disable-AzRecoveryServicesBackupProtection de PowerShell. De esta forma, se detendrán las copias de seguridad programadas, pero los datos que se hayan incluido en ellas hasta el momento se conservarán.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID

Eliminación de datos de copia de seguridad

Para quitar completamente los datos de copia de seguridad almacenados en el almacén, solo tiene que agregar el marcador "-RemoveRecoveryPoints" al comando de protección "disable".

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID -RemoveRecoveryPoints

Deshabilitación de la protección automática

Si la protección automática se configuró en una instancia SQLInstance, el usuario puede deshabilitarla con el cmdlet Disable-AzRecoveryServicesBackupAutoProtection de PowerShell.

Busque las instancias en las que la protección automática está habilitada mediante el siguiente comando de PowerShell.

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID | Where-Object {$_.IsAutoProtected -eq $true}

A continuación, elija el nombre del elemento protegible pertinente y el nombre del servidor de la salida y deshabilite la protección automática para esas instancias.

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Disable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

Anulación del registro de la máquina virtual SQL

Si todas las bases de datos de SQL Server ya no están protegidas y no hay ninguna copia de seguridad, puede anular el registro de la máquina virtual SQL desde este almacén. Solo entonces, podrá proteger las bases de datos en otro almacén. Use el cmdlet Unregister-AzRecoveryServicesBackupContainer de PowerShell para registrar la máquina virtual SQL.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
 Unregister-AzRecoveryServicesBackupContainer -Container $SQLContainer -VaultId $testVault.ID

Seguimiento de los trabajos de Azure Backup

Es importante tener en cuenta que Azure Backup solo realiza el seguimiento de los trabajos de usuario que se desencadenan en la copia de seguridad SQL. Las copias de seguridad programadas (incluidas las del registro) no están visibles en el portal ni en Powershell. Sin embargo, si alguno de los trabajos programados produce un error, se genera una alerta de copia de seguridad y se muestra en el portal. Use Azure Monitor para realizar un seguimiento de todos los trabajos programados y otra información pertinente.

Los usuarios pueden seguir las operaciones desencadenadas a petición o por el usuario con el identificador JobID devuelto en la salida de los trabajos asincrónicos, como la copia de seguridad. Use el cmdlet Get-AzRecoveryServicesBackupJobDetail de PowerShell para realizar un seguimiento del trabajo y sus detalles.

 Get-AzRecoveryServicesBackupJobDetails -JobId 2516bb1a-d3ef-4841-97a3-9ba455fb0637 -VaultId $testVault.ID

Para obtener la lista de los trabajos a petición y sus estados del servicio Azure Backup, use el cmdlet Get- AzRecoveryServicesBackupJob de PowerShell. El ejemplo siguiente devuelve todos los trabajos SQL en curso.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

Para cancelar un trabajo en curso, utilice el cmdlet Stop-AzRecoveryServicesBackupJob de PowerShell.

Administración de los grupos de disponibilidad AlwaysOn de SQL

Con los grupos de disponibilidad AlwaysOn de SQL, no olvide registrar todos los nodos del grupo de disponibilidad (AG). Una vez que el registro se realiza para todos los nodos, se crea lógicamente un objeto de grupo de disponibilidad SQL en los elementos que se pueden proteger. Las bases de datos del grupo de disponibilidad de SQL se mostrarán como "SQLDatabase". Los nodos se mostrarán como instancias independientes y las bases de datos SQL predeterminadas en ellos se mostrarán también como las bases de datos SQL.

Por ejemplo, supongamos que un grupo de disponibilidad SQL tiene dos nodos: sql-server-0 y sql-server-1, y una base de datos SQL AG. Una vez que ambos nodos se registran, si enumera los elementos que se pueden proteger, se muestran los siguientes componentes.

  • Un objeto de grupo de disponibilidad SQL: tipo de elemento que se puede proteger como SQLAvailabilityGroup
  • Una base de datos de grupo de disponibilidad de SQL: tipo de elemento que se puede proteger como SQLDatabase
  • SQL-server-0: tipo de elemento que se puede proteger como SQLInstance
  • SQL-server-1: tipo de elemento que se puede proteger como SQLInstance
  • Cualquier valor predeterminado de base de datos SQL (master, model, msdb) en sql-server-0: tipo de elemento que se puede proteger como SQLDatabase
  • Cualquier valor predeterminado de base de datos SQL (master, model, msdb) en sql-server-0: tipo de elemento que se puede proteger como SQLDatabase

sql-server-0, sql-server-1 también se mostrará como "AzureVMAppContainer" cuando se enumeren los contenedores de copia de seguridad.

Obtenga tan solo la base de datos pertinente para habilitar la copia de seguridad y la copia de seguridad a petición y los cmdlets de PowerShell de restauración son idénticos.