Share via


Sauvegarder et restaurer des bases de données SQL dans des machines virtuelles Azure à l’aide de PowerShell

Cet article explique comment utiliser Azure PowerShell pour sauvegarder et restaurer une base de données SQL au sein d’une machine virtuelle Azure à l’aide du coffre Recovery Services Sauvegarde Azure.

Cet article explique comment :

  • Configurer PowerShell et inscrire le fournisseur Azure Recovery Services.
  • Créez un coffre Recovery Services.
  • Configurer la sauvegarde pour la base de données SQL au sein d’une machine virtuelle Azure.
  • Exécuter un travail de sauvegarde.
  • Restaurer une base de données SQL sauvegardée.
  • Suivre des travaux de sauvegarde et de restauration.

Avant de commencer

Hiérarchie des objets dans Recovery Services

La hiérarchie des objets est résumée dans le schéma suivant.

Recovery Services object hierarchy

Passez en revue la référence sur la cmdletAz.RecoveryServices dans la bibliothèque Azure.

Configurer et installer

Configurez PowerShell comme suit :

  1. Téléchargez la dernière version d’Az PowerShell. La version 1.5.0 est la version minimale requise.

  2. Recherchez les cmdlets PowerShell Sauvegarde Azure avec cette commande :

    Get-Command *azrecoveryservices*
    
  3. Passez en revue les alias et cmdlets pour Sauvegarde Azure et le coffre Recovery Services. Voici un exemple de résultat possible. Il ne s’agit pas d’une liste complète des cmdlets.

    List of Recovery Services cmdlets

  4. Connectez-vous à votre compte Azure à l’aide de Connect-AzAccount.

  5. Sur la page web qui s’affiche, vous êtes invité à entrer les informations d’identification de votre compte.

    • Vous pouvez également inclure les informations d’identification de votre compte en tant que paramètres dans la cmdlet Connect-AzAccount avec -Credential.
    • Si vous êtes un partenaire CSP travaillant pour un locataire, spécifiez le client en tant que locataire à l’aide de son ID locataire ou de son nom de domaine principal. Par exemple Connect-AzAccount -Tenant fabrikam.com.
  6. Associez l’abonnement que vous souhaitez utiliser avec le compte, car un compte peut compter plusieurs abonnements.

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Si vous utilisez le service Sauvegarde Azure pour la première fois, utilisez la cmdlet Register-AzResourceProvider pour associer le fournisseur Azure Recovery Service à votre abonnement.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. Vérifiez que les fournisseurs ont été correctement inscrits :

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. Dans la sortie de commande, vérifiez que RegistrationState a maintenant la valeur Inscrit. Si ce n’est pas ce cas, réexécutez la cmdlet Register-AzResourceProvider.

Créer un coffre Recovery Services

Pour créer un coffre Recovery Services, procédez comme suit :

Le coffre Recovery Services étant une ressource Resource Manager, vous devez le placer dans un groupe de ressources. Vous pouvez utiliser un groupe de ressources existant ou en créer un avec la cmdlet New-AzResourceGroup. Quand vous créez un groupe de ressources, spécifiez son nom et son emplacement.

  1. Un coffre est placé dans un groupe de ressources. Si vous n’avez pas de groupe de ressources, créez-en un avec la commande New-AzResourceGroup. Dans l’exemple suivant, nous créons un groupe de ressources dans la région USA Ouest.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Utilisez la cmdlet New-AzRecoveryServicesVault pour créer le coffre. Spécifiez pour le coffre le même emplacement que pour le groupe de ressources.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Spécifiez le type de redondance à utiliser pour le stockage de coffre.

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

Afficher les coffres dans un abonnement

Pour afficher tous les coffres de l’abonnement, utilisez Get-AzRecoveryServicesVault.

Get-AzRecoveryServicesVault

Le résultat ressemble à ce qui suit. Le groupe de ressources et l’emplacement associés sont fournis.

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

Définir le contexte du coffre

Stockez l’objet de coffre dans une variable et définissez le contexte du coffre.

  • Étant donné que de nombreuses cmdlets Sauvegarde Azure exigent l’objet de coffre Recovery Services en tant qu’entrée, il est judicieux de le stocker dans une variable.
  • Le contexte du coffre spécifie le type de données protégées dans le coffre. Définissez-le avec Set-AzRecoveryServicesVaultContext. Une fois le contexte défini, il s’applique à toutes les cmdlets suivantes.

L’exemple suivant définit le contexte de coffre pour testvault

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

Récupérer l’ID de coffre

Conformément aux instructions d’Azure PowerShell, nous prévoyons de déprécier la définition du contexte de coffre. À la place, vous pouvez stocker ou récupérer l’ID du coffre et le transmettre aux commandes appropriées, comme suit :

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

Configurer une stratégie de sauvegarde

Une stratégie de sauvegarde spécifie la planification des sauvegardes et la durée de conservation des points de récupération de sauvegarde :

Par défaut, une heure de début est définie dans l’objet de la stratégie de planification. Utilisez l’exemple suivant pour modifier l’heure de début sur l’heure de début souhaitée. L’heure de début souhaitée doit également être au format UTC. L’exemple suivant suppose que l’heure de début souhaitée est 01:00 UTC pour les sauvegardes quotidiennes.

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

Important

Vous devez fournir l’heure de début en multiples de 30 minutes uniquement. Dans l’exemple ci-dessus, il peut s’agir uniquement de « 01:00:00 » ou de « 02:30:00 ». L’heure de début ne peut pas être « 01:15:00 ».

L’exemple suivant stocke la stratégie de planification et la stratégie de conservation dans des variables. Il utilise ensuite ces variables en tant que paramètres pour une nouvelle stratégie (NewSQLPolicy). NewSQLPolicy effectue une sauvegarde quotidienne « complète », la conserve pendant 180 jours et effectue une sauvegarde de journal toutes les 2 heures

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

Le résultat ressemble à ce qui suit.

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

Activer la sauvegarde

Inscription de la machine virtuelle SQL

Pour les sauvegardes de machines virtuelles Azure et les partages de fichiers Azure, le service Sauvegarde peut se connecter à ces ressources Azure Resource Manager et récupérer les informations pertinentes. Étant donné que SQL est une application au sein d’une machine virtuelle Azure, le service Sauvegarde a besoin d’autorisations pour accéder à l’application et récupérer les informations nécessaires. Pour ce faire, vous devez « inscrire » la machine virtuelle Azure qui contient l’application SQL auprès d’un coffre Recovery Services. Quand vous avez inscrit une machine virtuelle SQL avec un coffre, vous pouvez protéger les bases de données de ce coffre uniquement. Utilisez l’applet de commande PowerShell Register-AzRecoveryServicesBackupContainer pour inscrire la machine virtuelle.

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

La commande renvoie un « conteneur de sauvegarde »de cette ressource et l’état est défini sur « inscrit »

Notes

Si le paramètre Force n’est pas spécifié, vous êtes invité à confirmer avec un texte « Do you want to disable protection for this container » (Voulez-vous désactiver la protection de ce conteneur). Veuillez ignorer ce texte et indiquez « O » pour confirmer. Il s’agit d’un problème connu et nous travaillons à sa résolution en supprimant le texte et la nécessité d’avoir le paramètre Force.

Récupération des bases de données SQL

Une fois l’inscription effectuée, le service Sauvegarde est en mesure de répertorier tous les composants SQL disponibles au sein de la machine virtuelle. Pour afficher tous les composants SQL restant à sauvegarder pour ce coffre, utilisez l’applet de commande PowerShell Get-AzRecoveryServicesBackupProtectableItem

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

La sortie affiche tous les composants SQL non protégés sur toutes les machines virtuelles SQL inscrites dans ce coffre avec les éléments ItemType et ServerName. Vous pouvez filtrer davantage sur une machine virtuelle en particulier en transmettant le paramètre « -Container » ou utilisez la combinaison de « Name » et « ServerName » avec l’indicateur ItemType pour arriver à un élément SQL unique.

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

Configuration de la sauvegarde

Maintenant que nous disposons de la base de données SQL requise et de la stratégie avec laquelle elle doit être sauvegardée, nous pouvons utiliser la cmdlet Enable-AzRecoveryServicesBackupProtection pour configurer la sauvegarde pour cette base de données SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

La commande attend la fin de la configuration de la sauvegarde et renvoie la sortie suivante.

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

Récupération de nouvelles bases de données SQL

Une fois la machine inscrite, le service Sauvegarde récupère les informations des bases de données disponibles. Si des bases de données SQL ou des instances SQL sont ajoutées ultérieurement à la machine inscrite, vous devez déclencher manuellement le service de sauvegarde pour effectuer une nouvelle « recherche » et obtenir de nouveau toutes les bases de données non protégées (y compris celles qui viennent d’être ajoutées). Utilisez l’applet de commande PowerShell Initialize-AzRecoveryServicesBackupItem sur la machine virtuelle SQL pour effectuer une nouvelle recherche. La commande attend la fin de l’opération. Utilisez ultérieurement l’applet de commande PowerShell Get-AzRecoveryServicesBackupProtectableItem pour obtenir la liste des derniers composants SQL non protégés.

$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

Une fois que les éléments protégeables pertinents sont récupérés, activez les sauvegardes comme indiqué dans la section ci-dessus. Si vous ne souhaitez pas détecter manuellement les nouvelles bases de données, vous pouvez choisir l’autoprotection, comme expliqué ci-dessous.

Activer l’autoprotection

Vous pouvez configurer la sauvegarde pour que toutes les bases de données ajoutées à l’avenir soient automatiquement protégées avec une stratégie spécifique. Pour activer l’autoprotection, utilisez l’applet de commande PowerShell Enable-AzRecoveryServicesBackupAutoProtection.

Puisque l’instruction est de sauvegarder toutes les futures bases de données, l’opération est effectuée à un niveau 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

Une fois l’intention d’autoprotection donnée, la demande faite à la machine de récupérer les bases de données nouvellement ajoutées se met en place sous la forme d’une tâche en arrière-plan programmée qui s’exécute toutes les 8 heures.

Restaurer les bases de données SQL

Sauvegarde Azure peut restaurer des bases de données SQL Server s’exécutant sur des machines virtuelles Azure comme suit :

  • Restaurer à une date ou une heure spécifique (à la seconde), en utilisant les sauvegardes de fichiers journaux. Sauvegarde Azure détermine automatiquement la sauvegarde différentielle complète appropriée, et la chaîne des sauvegardes de fichiers journaux nécessaires pour restaurer en fonction de la date/heure sélectionnée.
  • Restaurez une sauvegarde complète ou différentielle spécifique sur un point de récupération spécifique.

Vérifiez les prérequis mentionnés ici avant de restaurer des bases de données SQL.

Avertissement

En raison d’un problème de sécurité lié au contrôle d'accès en fonction du rôle, nous avons dû introduire un changement cassant dans les commandes de restauration des bases de données SQL via PowerShell. Procédez à une mise à niveau vers Az 6.0.0 ou version supérieure pour que les commandes de restauration appropriées puissent être soumises via PowerShell. Les dernières commandes PS sont fournies ci-dessous.

Commencez par récupérer la base de données SQL sauvegardée appropriée à l’aide de l’applet de commande PowerShell Get-AzRecoveryServicesBackupItem.

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

Récupérer l’heure de restauration pertinente

Comme indiqué plus haut, vous pouvez restaurer la base de données SQL sauvegardée vers une copie complète/différentielle OU un point dans le temps de journal.

Récupérer des points de récupération distincts

Utilisez Get-AzRecoveryServicesBackupRecoveryPoint pour récupérer des points de récupération (différentielle/complète) distincts pour une base de données SQL sauvegardée.

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

Le résultat ressemble à l’exemple suivant

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

Pour récupérer le point de récupération approprié, utilisez le filtre « RecoveryPointId » ou un filtre de tableau.

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

Récupérer un point de récupération jusqu’à une date et heure

Si vous souhaitez restaurer la base de données à un certain point dans le temps, utilisez l’applet de commande PowerShell Get-AzRecoveryServicesBackupRecoveryLogChain. La cmdlet renvoie une liste de dates qui représentent les heures de début et de fin d’une séquence de journaux de transactions consécutifs continue pour cet élément de sauvegarde SQL. Le point dans le temps souhaité doit être dans cette plage.

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

Vous devez obtenir un résultat semblable à l’exemple qui suit.

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

La sortie ci-dessus signifie que vous pouvez effectuer une restauration à n’importe quel point dans le temps entre l’heure de début et l’heure de fin affichées. Les heures sont exprimées en UTC. Créez n’importe quel point dans le temps dans PowerShell qui se trouve dans la plage indiquée ci-dessus.

Notes

Quand un point dans le temps de journal est sélectionné pour la restauration, vous n’avez pas besoin de spécifier le point de départ, c’est-à-dire la sauvegarde complète à partir de laquelle la base de données est restaurée. Le service de sauvegarde Azure s’occupe de la totalité du plan de récupération (la sauvegarde complète à choisir, les sauvegardes de fichier journal à appliquer, etc.).

Déterminer la configuration de récupération

Pour la restauration de bases de données SQL, les scénarios de restauration suivants sont pris en charge.

  • Remplacement de la base de données SQL sauvegardée par des données d’un autre point de récupération - OriginalWorkloadRestore
  • Restauration de la base de données SQL en tant que nouvelle base de données dans la même instance SQL - AlternateWorkloadRestore
  • Restauration de la base de données SQL en tant que nouvelle base de données dans une autre machine virtuelle SQL - AlternateWorkloadRestore
  • Restauration de la base de données SQL en tant que fichiers.bak - RestoreAsFiles

Après la récupération du point de récupération approprié (distinct ou point dans le temps de journal), utilisez l’applet de commande PowerShell Get-AzRecoveryServicesBackupWorkloadRecoveryConfig pour récupérer l’objet de configuration de récupération conformément au plan de récupération souhaité.

Restauration de la charge de travail d’origine

Pour remplacer la base de données sauvegardée par des données du point de récupération, spécifiez simplement l’indicateur approprié et le point de récupération pertinent, comme indiqué dans les exemples suivants.

Restauration d’origine avec un point de récupération distinct
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
Restauration d’origine avec un point dans le temps de journal
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Restauration de charge de travail alternative

Important

Une base de données SQL sauvegardée peut être restaurée en tant que nouvelle base de données d’une autre SQLInstance uniquement, dans une machine virtuelle Azure « inscrite » dans ce coffre.

Comme indiqué ci-dessus, si la SQLInstance cible se trouve dans une autre machine virtuelle Azure, assurez-vous qu’elle est inscrite auprès de ce coffre et que la SQLInstance pertinente apparaît en tant qu’élément pouvant être protégé. Dans ce document, nous supposons que le nom de l'instance SQL cible est MSSQLSERVER dans une autre machine virtuelle « 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

Il suffit donc de transmettre le point de récupération qui convient, l'instance SQL cible avec le bon indicateur, comme indiqué ci-dessous, et le conteneur cible sous lequel l'instance SQL cible se trouve.

Restauration alternative avec un point de récupération distinct
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restauration alternative avec un point dans le temps de journal
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restaurer sous forme de fichiers

Pour restaurer les données de sauvegarde sous forme de fichiers .bak plutôt que sous forme de base de données, choisissez l’option Restaurer sous forme de fichiers. La base de données SQL sauvegardée peut être restaurée sur n’importe quelle machine virtuelle cible qui est inscrite auprès de ce coffre.

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
Restauration sous forme de fichiers avec un point de récupération distinct
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurer sous forme de fichiers avec un point d’enregistrement dans le journal à partir de la dernière sauvegarde complète
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurer sous forme de fichiers avec un point d’enregistrement dans le journal à partir de la sauvegarde complète spécifiée

Si vous souhaitez fournir une sauvegarde complète spécifique qui doit être utilisée pour la restauration, utilisez la commande suivante :

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

L’objet de configuration de point de récupération final obtenu avec l’applet de commande PowerShell Get-AzRecoveryServicesBackupWorkloadRecoveryConfig a toutes les informations pertinentes pour la restauration et est illustré ci-dessous.

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

Vous pouvez modifier le nom de la base de données restaurée, ainsi que les champs OverwriteWLIfpresent, NoRecoveryMode, et targetPhysicalPath. Obtenez plus de détails sur les chemins d’accès de fichier cible comme indiqué ci-dessous.

$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

Définissez les propriétés PowerShell pertinentes en tant que valeurs de chaîne, comme indiqué ci-dessous.

$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

Important

Assurez-vous que l’objet de configuration de récupération final a toutes les valeurs nécessaires et appropriées, puisque l’opération de restauration repose sur l’objet de configuration.

Notes

Si vous ne souhaitez pas restaurer la chaîne entière, mais uniquement un sous-ensemble de fichiers, suivez les étapes décrites ici.

Restauration d'une autre charge de travail dans un coffre situé dans une région secondaire

Important

La prise en charge des restaurations de SQL dans une région secondaire à partir de PowerShell est disponible à partir d'Az 6.0.0

Si vous avez activé la restauration inter-régions, les points de récupération sont également répliqués dans la région secondaire associée. Vous pouvez ensuite récupérer ces points de récupération et déclencher une restauration sur une machine présente dans cette région associée. Comme pour la restauration normale, la machine cible doit être inscrite dans le coffre cible de la région secondaire. Les étapes suivantes clarifieront le processus de bout en bout.

  • Récupérez les éléments de sauvegarde répliqués dans la région secondaire.
  • Pour ces éléments, récupérez les points de récupération (distincts et/ou de journaux) répliqués dans la région secondaire.
  • Choisissez ensuite un serveur cible inscrit dans un coffre de la région secondaire associée.
  • Déclenchez la restauration sur ce serveur et suivez-la à l'aide de la propriété JobId.

Récupérer des éléments de sauvegarde à partir de la région secondaire

Récupérez tous les éléments de sauvegarde SQL de la région secondaire à l'aide de la commande habituelle, mais avec un paramètre supplémentaire pour indiquer que ces éléments doivent être récupérés à partir de la région secondaire.

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
Récupérer les points de récupération distincts à partir de la région secondaire

Utilisez l'instruction Get-AzRecoveryServicesBackupRecoveryPoint pour récupérer les points de récupération distincts (complets/différentiels) d'une base de données SQL sauvegardée, et ajoutez un paramètre pour indiquer qu'il s’agit de points de récupération récupérés à partir de la région secondaire.

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

Le résultat ressemble à l’exemple suivant

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

Pour récupérer le point de récupération approprié, utilisez le filtre « RecoveryPointId » ou un filtre de tableau.

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
Récupérer des points de récupération de journaux à partir de la région secondaire

Utilisez la cmdlet PowerShell Get-AzRecoveryServicesBackupRecoveryLogChain avec le paramètre « -UseSecondaryRegion », qui renverra les heures de début et de fin d'une chaîne de journaux continue et ininterrompue pour cet élément de sauvegarde SQL à partir de la région secondaire. Le point dans le temps souhaité doit être dans cette plage.

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

Vous devez obtenir un résultat semblable à l’exemple qui suit.

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

La sortie ci-dessus signifie que vous pouvez effectuer une restauration à n’importe quel point dans le temps entre l’heure de début et l’heure de fin affichées. Les heures sont exprimées en UTC. Créez n’importe quel point dans le temps dans PowerShell qui se trouve dans la plage indiquée ci-dessus.

Récupérer le serveur cible à partir de la région secondaire

Dans la région secondaire, il nous faut un coffre et un serveur cible inscrit auprès de ce coffre. Une fois que nous avons le conteneur cible de la région secondaire et l'instance SQL, nous pouvons réutiliser les cmdlets existantes pour générer une configuration de charge de travail de restauration. Dans ce document, nous supposons que le nom de la machine virtuelle est « secondaryVM » et que le nom de l'instance située dans cette machine virtuelle est « MSSQLInstance ».

Tout d'abord, nous devons récupérer le coffre approprié dans la région secondaire, puis nous procurer les conteneurs inscrits dans ce coffre.

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

Une fois le conteneur inscrit choisi, nous devons récupérer les instances SQL à partir du conteneur dans lequel la base de données doit être restaurée. Nous supposons ici que la machine virtuelle « secondaryVM » contient une instance SQL et que nous devons la récupérer.

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

Préparer la configuration de récupération

Comme indiqué ci-dessus pour la restauration SQL normale, la même commande peut être réutilisée pour générer la configuration de récupération appropriée.

Pour les restaurations complètes à partir de la région secondaire
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
Pour les récupérations de journaux jusqu'à une date et heure à partir de la région secondaire
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Une fois la configuration appropriée obtenue pour la restauration de la région primaire ou secondaire, vous pouvez utiliser la même commande pour déclencher les restaurations et effectuer un suivi ultérieur à l'aide des propriétés jobID.

Restaurer avec la configuration appropriée

Une fois que l’objet de configuration de récupération pertinent a été obtenu et vérifié, utilisez l’applet de commande PowerShell Restore-AzRecoveryServicesBackupItem pour démarrer le processus de restauration.

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

L’opération de restauration renvoie un travail à suivre.

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

Gérer des sauvegardes SQL

Sauvegarde à la demande

Une fois la sauvegarde activée pour une base de données, vous pouvez également déclencher une sauvegarde à la demande pour la base de données à l’aide de l’applet de commande PowerShell Backup-AzRecoveryServicesBackupItem. L’exemple suivant déclenche une sauvegarde complète en copie seule sur une base de données SQL avec la compression activée ; la sauvegarde complète en copie seule doit être conservée pendant 60 jours.

Notes

Les sauvegardes en copie unique complètes sont idéales pour une rétention à long terme, car elles ne sont pas dépendantes d’autres types de sauvegarde, comme les journaux. Une sauvegarde « complète » est considérée comme parent des sauvegardes de journaux suivantes, et sa rétention est donc liée à la rétention des journaux dans la stratégie. Par conséquent, l’heure d’expiration fournie par le client est honorée pour les sauvegardes complètes en copie seule et non pour les sauvegardes « complètes ». Une durée de rétention de sauvegarde complète est définie automatiquement sur 45 jours à partir de l’heure actuelle. Cela est également documenté ici.

$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

La commande de sauvegarde à la demande renvoie un travail à suivre.

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

Si la sortie est perdue ou si vous souhaitez obtenir l’ID de travail pertinent, obtenez la liste des travaux à partir du service Sauvegarde Azure, puis suivez-le, ainsi que ses informations.

Modifier la stratégie pour les éléments de sauvegarde

Vous pouvez modifier la stratégie de l’élément sauvegardé de Policy1 pour Policy2. Pour changer de stratégie pour un élément sauvegardé, récupérez la stratégie et l’élément de sauvegarde appropriés, puis utilisez la commande Enable-AzRecoveryServices avec l’élément de sauvegarde comme paramètre.

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

La commande attend la fin de la configuration de la sauvegarde et renvoie la sortie suivante.

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

Modifier une stratégie de sauvegarde existante

Pour modifier une stratégie existante, utilisez la commande Set-AzRecoveryServicesBackupProtectionPolicy.

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

Vérifiez les travaux de sauvegarde au bout d’un certain temps pour suivre l’existence d’échecs éventuels. S’il y en a, vous devez résoudre les problèmes. Réexécutez ensuite la commande de modification de stratégie avec le paramètre FixForInconsistentItems pour réessayer de modifier la stratégie sur tous les éléments de sauvegarde pour lesquels l’opération a échoué précédemment.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Inscrire de nouveau des machines virtuelles SQL

Avertissement

Prenez le temps de lire ce document pour comprendre les symptômes et les causes d’échec avant de tenter la réinscription

Pour déclencher la réinscription de la machine virtuelle SQL, récupérez le conteneur de sauvegarde pertinent et transmettez-le à la cmdlet d’inscription.

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

Arrêter la protection

Conserver les données

Si vous souhaitez arrêter la protection, vous pouvez utiliser l’applet de commande PowerShell Disable-AzRecoveryServicesBackupProtection. Les sauvegardes planifiées seront arrêtées, mais les données sauvegardées jusqu’à présent seront conservées indéfiniment.

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

Supprimer les données de sauvegarde

Pour supprimer complètement les données de sauvegarde stockées dans le coffre, il suffit d’ajouter l’indicateur/l’instruction switch « -RemoveRecoveryPoints » à la commande de protection « disable ».

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

Désactiver l’autoprotection

Si l’autoprotection a été configurée sur une SQLInstance, vous pouvez la désactiver à l’aide de l’applet de commande PowerShell Disable-AzRecoveryServicesBackupAutoProtection.

Recherchez les instances où la protection automatique est activée à l’aide de la commande PowerShell suivante.

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

Sélectionnez ensuite le nom d’élément protégé et le nom de serveur appropriés à partir de la sortie et désactivez la protection automatique pour ces instances.

$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

Désinscrire la machine virtuelle SQL

Si toutes les bases de données d’un serveur SQL ne sont plus protégées et qu’aucune donnée de sauvegarde n’existe, vous pouvez désinscrire la machine virtuelle SQL de ce coffre. C’est seulement à partir de ce moment-là que vous pouvez protéger des bases de données dans un autre coffre. Utilisez l’applet de commande PowerShell Unregister-AzRecoveryServicesBackupContainer pour désinscrire la machine virtuelle SQL.

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

Suivre les travaux Sauvegarde Azure

Il est important de noter que la sauvegarde Azure suit uniquement les travaux déclenchés par l’utilisateur dans la sauvegarde SQL. Les sauvegardes planifiées (dont les sauvegardes de fichier journal) ne sont pas visibles dans le portail ni dans PowerShell. Toutefois, si un travail planifié échoue, une alerte de sauvegarde est générée et affichée dans le portail. Utilisez Azure Monitor pour suivre tous les travaux planifiés et autres informations pertinentes.

Les utilisateurs peuvent suivre des opérations à la demande/déclenchées avec le JobID renvoyé dans la sortie des travaux asynchrones comme une sauvegarde. Utilisez l’applet de commande PowerShell Get-AzRecoveryServicesBackupJobDetail pour suivre le travail et ses informations.

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

Pour obtenir la liste des travaux à la demande et des états associés auprès du service de sauvegarde Azure, utilisez l’applet de commande PowerShell Get-AzRecoveryServicesBackupJob. L’exemple suivant renvoie tous les travaux SQL en cours d’exécution.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

Pour annuler un travail en cours d’exécution, utilisez l’applet de commande PowerShell Stop-AzRecoveryServicesBackupJob.

Gestion des groupes de disponibilité SQL AlwaysOn

Pour les groupes de disponibilité SQL AlwaysOnS, veillez à inscrire tous les nœuds du groupe de disponibilité. Une fois tous les nœuds inscrits, un objet de groupe de disponibilité SQL est logiquement créé dans les éléments protégeables. Les bases de données sous le groupe de disponibilité SQL seront répertoriées sous la forme « SQLDatabase ». Les nœuds apparaîtront en tant qu’instances autonomes et les bases de données SQL par défaut sous ces derniers seront également répertoriées sous la forme de bases de données SQL.

Supposons par exemple qu’un groupe de disponibilité SQL a deux nœuds, sql-server-0 et sql-server-1, ainsi qu’une base de données de groupe de disponibilité SQL. Une fois que ces deux nœuds sont inscrits, si vous listez les éléments pouvant être protégés, les composants suivants sont répertoriés

  • Un objet de groupe de disponibilité SQL : type d’élément protégeable intitulé SQLAvailabilityGroup
  • Une base de données de groupe de disponibilité SQL : type d’élément protégeable intitulé SQLDatabase
  • sql-server-0 : type d’élément protégeable intitulé SQLInstance
  • sql-server-1 : type d’élément protégeable intitulé SQLInstance
  • Les bases de données SQL par défaut (master, modèle, msdb) sous sql-server-0 : type d’élément protégeable intitulé SQLDatabase
  • Les bases de données SQL par défaut (master, modèle, msdb) sous sql-server-1 : type d’élément protégeable intitulé SQLDatabase

sql-server-0 et sql-server-1 seront également répertoriés sous la forme « AzureVMAppContainer » dans la liste des conteneurs de sauvegarde.

Récupérez simplement la base de données appropriée pour activer la sauvegarde et les applets de commande PowerShell de sauvegarde à la demande et de restauration restent identiques.