Eseguire il backup e il ripristino di database SQL nelle macchine virtuali di Azure con PowerShell

Questo articolo descrive come usare Azure PowerShell per eseguire il backup e il ripristino di un database SQL all'interno di una macchina virtuale di Azure usando l'insieme di credenziali di Servizi di ripristino di Backup di Azure.

Questo articolo spiega come:

  • Configurare PowerShell e registrare il provider di Servizi di ripristino di Azure.
  • Creare un insieme di credenziali di Servizi di ripristino.
  • Configurare il backup per il database SQL all'interno di una macchina virtuale di Azure.
  • Eseguire un processo di backup.
  • Ripristinare un database SQL sottoposto a backup.
  • Monitorare i processi di backup e ripristino.

Prima di iniziare

Gerarchia di oggetti dei servizi di ripristino

La gerarchia di oggetti è riepilogata nel diagramma seguente.

Recovery Services object hierarchy

Esaminare le informazioni di riferimento sul cmdletAz.RecoveryServices nella libreria di Azure.

Configurare e installare

Configurare PowerShell come segue:

  1. Scaricare la versione più recente di Az PowerShell. La versione 1.5.0 è la versione minima richiesta.

  2. Trovare i cmdlet di PowerShell per Backup di Azure con il comando seguente:

    Get-Command *azrecoveryservices*
    
  3. Esaminare gli alias e i cmdlet per Backup di Azure e l'insieme di credenziali di Servizi di ripristino. Ecco un esempio delle informazioni visualizzate. Non è l'elenco completo dei cmdlet.

    List of Recovery Services cmdlets

  4. Accedere all'account Azure tramite Connect-AzAccount.

  5. Nella pagina Web visualizzata viene richiesto di immettere le credenziali dell'account.

    • In alternativa, è possibile includere le credenziali dell'account come parametro nel cmdlet Connect-AzAccount, mediante il parametro -Credential.
    • Se si è un partner CSP che opera per conto di un tenant, è necessario specificare il cliente come tenant usando l'ID tenant o il nome di dominio primario del tenant. Un esempio è Connect-AzAccount -Tenant fabrikam.com.
  6. Associare la sottoscrizione che si vuole usare all'account perché un account può avere molte sottoscrizioni.

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Se si sta usando Backup di Azure per la prima volta, usare il cmdlet Register-AzResourceProvider per registrare il provider di Servizi di ripristino di Azure con la propria sottoscrizione.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. Verificare che i provider siano stati registrati correttamente:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. Nell'output del comando il parametro RegistrationState è impostato su Registered. In caso contrario, eseguire di nuovo il cmdlet Register-AzResourceProvider.

Creare un insieme di credenziali di Servizi di ripristino

Seguire questa procedura per creare un insieme di credenziali di Servizi di ripristino.

L'insieme di credenziali di Servizi di ripristino è una risorsa di Resource Manager, quindi è necessario inserirlo all'interno di un gruppo di risorse. È possibile usare un gruppo di risorse esistente o crearne uno con il cmdlet New-AzResourceGroup. Quando si crea un nuovo gruppo di risorse, è necessario specificare il nome e il percorso per il gruppo di risorse.

  1. Un insieme di credenziali viene inserito in un gruppo di risorse. Se non è disponibile un gruppo di risorse esistente, crearne uno nuovo gruppo con New-AzResourceGroup. In questo esempio viene creato un nuovo gruppo di risorse nell'area Stati Uniti occidentali.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Per creare l'insieme di credenziali usare il cmdlet New-AzRecoveryServicesVault. Specificare per l'insieme di credenziali lo stesso percorso usato per il gruppo di risorse.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Specificare il tipo di ridondanza da usare per l'archiviazione dell'insieme di credenziali.

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

Visualizzare gli insiemi di credenziali in un abbonamento

Per visualizzare tutti gli insiemi di credenziali disponibili nella sottoscrizione, usare Get-AzRecoveryServicesVault.

Get-AzRecoveryServicesVault

L'output è simile al seguente. Vengono forniti il gruppo di risorse e la posizione associati.

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

Impostare il contesto dell'insieme di credenziali

Archiviare l'oggetto insieme di credenziali in una variabile e impostare il contesto dell'insieme di credenziali.

  • Molti cmdlet di Backup di Azure richiedono l'oggetto insieme di credenziali di Servizi di ripristino come input. Per tale motivo, è utile archiviare l'oggetto insieme di credenziali in una variabile.
  • Il contesto dell'insieme di credenziali definisce il tipo di dati protetti nell'insieme di credenziali. Impostarlo con Set-AzRecoveryServicesVaultContext. Il contesto impostato viene applicato a tutti i cmdlet successivi.

L'esempio seguente imposta il contesto dell'insieme di credenziali per testvault.

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

Recuperare l'ID dell'insieme di credenziali

È previsto che l'impostazione del contesto dell'insieme di credenziali venga deprecata, in base alle linee guida di Azure PowerShell. È invece possibile archiviare o recuperare l'ID dell'insieme di credenziali e passarlo ai comandi pertinenti, come indicato di seguito:

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

Configurare un criterio di backup

I criteri di backup specificano la pianificazione e il periodo di conservazione dei punti di ripristino dei backup:

Per impostazione predefinita, nell'oggetto criteri di pianificazione viene definita un'ora di inizio. Usare l'esempio seguente per modificare l'ora di inizio in base all'ora di inizio desiderata. Anche l'ora di inizio desiderata deve essere in formato UTC. Nell'esempio seguente si presuppone che l'ora di inizio desiderata sia 01:00 UTC per i backup giornalieri.

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

Importante

È necessario specificare l'ora di inizio solo in base a multipli di 30 minuti. Nell'esempio precedente può essere solo "01:00:00" o "02:30:00". L'ora di inizio non può essere "01:15:00".

Nell'esempio seguente i criteri di pianificazione e i criteri di conservazione vengono archiviati nelle variabili. Si usano quindi tali variabili come parametri per un nuovo criterio (NewSQLPolicy). NewSQLPolicy esegue un backup "completo" giornaliero, lo conserva per 180 giorni ed esegue un backup del log ogni 2 ore

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

L'output è simile al seguente.

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

Abilita backup

Registrazione della macchina virtuale SQL

Per i backup delle macchine virtuali di Azure e le condivisioni file di Azure, il servizio Backup può connettersi alle risorse di Azure Resource Manager e recuperare i dettagli pertinenti. Poiché SQL è un'applicazione all'interno di una macchina virtuale di Azure, il servizio Backup deve disporre dell'autorizzazione per accedere all'applicazione e recuperare i dettagli necessari. A tale scopo, è necessario "registrare" la macchina virtuale di Azure che contiene l'applicazione SQL con un insieme di credenziali di Servizi di ripristino. Dopo aver registrato una macchina virtuale SQL con un insieme di credenziali, è possibile proteggere i database SQL solo in tale insieme di credenziali. Usare il cmdlet di PowerShell Register-AzRecoveryServicesBackupContainer per registrare la macchina virtuale.

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

Il comando restituirà un "contenitore di backup" di questa risorsa e lo stato sarà "registrato".

Nota

Se il parametro force non è specificato, viene richiesto di confermare se si desidera disabilitare la protezione per il contenitore in uso. Ignorare questo messaggio e scegliere "S" per confermare. Si tratta di un problema noto e attualmente Microsoft sta lavorando per rimuovere il messaggio e il requisito associato al parametro force.

Recupero di database SQL

Al termine della registrazione, il servizio Backup sarà in grado di elencare tutti i componenti SQL disponibili all'interno della macchina virtuale. Per visualizzare tutti i componenti SQL ancora da sottoporre a backup in questo insieme di credenziali, usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupProtectableItem.

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

L'output mostrerà tutti i componenti SQL non protetti in tutte le macchine virtuali SQL registrate in questo insieme di credenziali con il tipo di elemento e il nome del server. È possibile filtrare ulteriormente per individuare una determinata macchina virtuale SQL passando il parametro '-Container' o usando la combinazione di 'Name' e 'ServerName' insieme al flag ItemType per individuare un elemento SQL specifico.

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

Configurazione del backup

Dopo aver recuperato il database SQL necessario e i criteri necessari per eseguire il backup, è possibile usare il cmdlet Enable-AzRecoveryServicesBackupProtection per configurare il backup per questo database SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

Il comando attende il completamento della configurazione di backup e restituisce l'output seguente.

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

Recupero di nuovi database SQL

Dopo la registrazione del computer, il servizio Backup recupererà i dettagli dei database disponibili. Se i database SQL o le istanze SQL vengono aggiunti al computer registrato in un secondo momento, è necessario attivare manualmente il servizio di backup per eseguire una nuova "richiesta" per recuperare di nuovo tutti i database non protetti (inclusi quelli appena aggiunti). Usare il cmdlet di PowerShell Initialize-AzRecoveryServicesBackupItem nella macchina virtuale SQL per eseguire una nuova richiesta. Il comando attende il completamento dell'operazione. Successivamente, usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupProtectableItem per recuperare l'elenco dei componenti SQL non protetti più recenti.

$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

Dopo aver recuperato gli elementi protetti pertinenti, abilitare i backup come indicato nella sezione precedente. Se non si vuole rilevare manualmente i nuovi database, è possibile optare per la protezione automatica, come illustrato di seguito.

Abilitare la protezione automatica

È possibile configurare il backup in modo che tutti i database aggiunti in un secondo momento vengano protetti automaticamente in base a un determinato criterio. Per abilitare la protezione automatica, usare il cmdlet di PowerShell Enable-AzRecoveryServicesBackupAutoProtection.

Poiché l'istruzione prevede l'esecuzione del backup di tutti i database futuri, l'operazione viene eseguita a livello di istanza SQL.

$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

Dopo aver impostato la protezione automatica, la richiesta di recuperare i nuovi database aggiunti viene eseguita come attività in background pianificata ogni 8 ore.

Ripristinare i database SQL

Backup di Azure può ripristinare database SQL Server in esecuzione nelle macchine virtuali di Azure seguendo questa procedura:

  • Ripristinare una data specifica o un'ora (al secondo), usando i backup del log delle transazioni. In base ai tempi di ripristino specificati, Backup di Azure determina automaticamente i backup completi, differenziali e la catena di backup del log necessari per ripristinare in base all'ora selezionata.
  • Ripristinare un backup completo o differenziale specifico per il ripristino a un punto di ripristino specifico.

Controllare i prerequisiti indicati qui prima di ripristinare i database SQL.

Avviso

A causa di un problema di sicurezza correlato al controllo degli accessi in base al ruolo, è stato necessario introdurre una modifica di rilievo nei comandi di ripristino per il database SQL tramite PowerShell. Eseguire l'aggiornamento alla versione az 6.0.0 o successiva per inviare i comandi di ripristino appropriati tramite PowerShell. Di seguito sono riportati i comandi PS più recenti.

Recuperare prima di tutto il database SQL sottoposto a backup usando il cmdlet di PowerShell Get-AzRecoveryServicesBackupItem.

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

Recuperare il tempo di ripristino pertinente

Come descritto in precedenza, è possibile ripristinare il database SQL sottoposto a backup in una copia completa/differenziale OPPURE in un punto di ripristino temporizzato del log.

Recuperare punti di ripristino distinti

Usare Get-AzRecoveryServicesBackupRecoveryPoint per recuperare punti di ripristino distinti (completi/differenziali) per un database SQL sottoposto a backup.

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

L'output è simile all'esempio seguente:

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

Usare il filtro 'RecoveryPointId' o un filtro di matrice per recuperare il punto di ripristino pertinente.

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

Recuperare il punto di ripristino temporizzato

Se si vuole eseguire un ripristino del database a un determinato punto temporizzato, usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupRecoveryLogChain. Il cmdlet restituisce un elenco di date che rappresentano l'ora di inizio e l'ora di fine di una catena di log continua e ininterrotta per l'elemento di backup di SQL specifico. Il punto di ripristino temporizzato desiderato deve essere compreso in questo intervallo.

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

L'output sarà simile all'esempio seguente:

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

L'output precedente indica che è possibile eseguire il ripristino temporizzato tra l'ora di inizio e l'ora di fine visualizzate. Tutte le ore sono in formato UTC. In PowerShell creare qualsiasi punto di ripristino temporizzato compreso nell'intervallo illustrato in precedenza.

Nota

In caso di punto di ripristino temporizzato del log selezionato per il ripristino, non è necessario specificare il punto iniziale, ovvero il backup completo da cui viene ripristinato il database. Il servizio Backup di Azure si occuperà dell'intero piano di ripristino, ovvero quale backup completo scegliere, quali backup del log applicare e così via.

Determinare la configurazione del ripristino

Per un ripristino del database SQL, sono supportati gli scenari di ripristino seguenti.

  • Override del database SQL sottoposto a backup con i dati di un altro punto di ripristino: OriginalWorkloadRestore
  • Ripristino del database SQL come nuovo database nella stessa istanza di SQL: AlternateWorkloadRestore
  • Ripristino del database SQL come nuovo database in un'altra istanza di SQL in un'altra macchina virtuale SQL: AlternateWorkloadRestore
  • Ripristino del database SQL come file .bak: RestoreAsFiles

Dopo aver recuperato il punto di ripristino pertinente (punto di ripristino temporizzato distinto o di log), usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupWorkloadRecoveryConfig per recuperare l'oggetto Config del ripristino in base al piano di ripristino desiderato.

Ripristino del carico di lavoro originale

Per eseguire l'override del database sottoposto a backup con i dati dal punto di ripristino, è sufficiente specificare il flag corretto e il punto di ripristino pertinente, come illustrato negli esempi seguenti.

Ripristino originale con punto di ripristino distinto
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
Ripristino originale con punto di ripristino temporizzato del log
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Ripristino del carico di lavoro alternativo

Importante

Un database SQL sottoposto a backup può essere ripristinato come nuovo database solo in un'altra istanza di SQL, in una macchina virtuale di Azure "registrata" con questo insieme di credenziali.

Come descritto in precedenza, se l'istanza di SQL di destinazione si trova all'interno di un'altra macchina virtuale di Azure, assicurarsi che sia registrata con questo insieme di credenziali e che l'istanza di SQL pertinente venga visualizzata come elemento proteggibile. In questo documento si presuppone che il nome dell'istanza di SQL di destinazione sia MSSQLSERVER in un'altra macchina virtuale "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

Passare quindi il punto di ripristino pertinente, impostare come destinazione l'istanza SQL con il flag corretto, come illustrato di seguito, e il contenitore di destinazione in cui è presente l'istanza di SQL di destinazione.

Ripristino alternativo con punto di ripristino distinto
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Ripristino alternativo con punto di ripristino temporizzato del log
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Ripristinare come file

Per ripristinare i dati di backup come file .bak anziché come database, scegliere l'opzione Ripristina come file. Il database SQL sottoposto a backup può essere ripristinato in qualsiasi macchina virtuale di destinazione registrata con questo insieme di credenziali.

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
Ripristinare come file con un punto di ripristino distinto
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Eseguire il ripristino come file con un punto di ripristino temporizzato del log rispetto all'ultimo ripristino completo
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Eseguire il ripristino come file con un punto di ripristino temporizzato del log rispetto all'ultimo ripristino completo specificato

Se si vuole assegnare un backup completo specifico da usare per il ripristino, usare il comando seguente:

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

L'oggetto di configurazione del punto di ripristino finale recuperato mediante il cmdlet di PowerShell Get-AzRecoveryServicesBackupWorkloadRecoveryConfig include tutte le informazioni pertinenti per il ripristino ed è illustrato di seguito.

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

È possibile modificare il nome del database ripristinato e i campi OverwriteWLIfpresent, NoRecoveryMode e targetPhysicalPath. Recuperare altri dettagli relativi ai percorsi dei file di destinazione, come illustrato di seguito.

$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

Impostare le proprietà di PowerShell pertinenti come valori stringa, come illustrato di seguito.

$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

Assicurarsi che l'oggetto Config del ripristino finale abbia tutti i valori necessari e appropriati perché l'operazione di ripristino sarà basata su tale oggetto.

Nota

Se non si vuole ripristinare l'intera catena, ma solo un sottoinsieme di file, seguire la procedura descritta qui.

Ripristino alternativo del carico di lavoro in un insieme di credenziali nell'area secondaria

Importante

Il supporto dei ripristini dell'area secondaria per SQL da PowerShell è disponibile da Az 6.0.0

Se è stato abilitato il ripristino tra aree, i punti di ripristino verranno replicati anche nell'area secondaria abbinata. È quindi possibile recuperare i punti di ripristino e attivare un ripristino in un computer presente in tale area abbinata. Come per il normale ripristino, il computer di destinazione deve essere registrato nell'insieme di credenziali di destinazione nell'area secondaria. La sequenza di passaggi seguente descrive in dettaglio il processo end-to-end.

  • Recuperare gli elementi di backup replicati nell'area secondaria
  • Per un elemento di questo tipo, recuperare i punti di ripristino (distinti e/o log) replicati nell'area secondaria
  • Scegliere quindi un server di destinazione registrato in un insieme di credenziali all'interno dell'area associata secondaria.
  • Attivare il ripristino in tale server e tenerne traccia usando JobId.

Recuperare gli elementi di backup dall'area secondaria

Recuperare tutti gli elementi di backup di SQL dall'area secondaria con il comando standard, ma specificando un parametro aggiuntivo per indicare che questi elementi devono essere recuperati dall'area secondaria.

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
Recuperare punti di ripristino distinti dall'area secondaria

Usare Get-AzRecoveryServicesBackupRecoveryPoint per recuperare punti di ripristino distinti (completi/differenziali) per un database SQL sottoposto a backup e aggiungere un parametro per indicare che si tratta di punti di ripristino recuperati dall'area secondaria.

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

L'output è simile all'esempio seguente:

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

Usare il filtro 'RecoveryPointId' o un filtro di matrice per recuperare il punto di ripristino pertinente.

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
Recuperare i punti di ripristino del log dall'area secondaria

Usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupRecoveryLogChain con il parametro '-UseSecondaryRegion' che restituirà l'ora di inizio e di fine di una catena di log continua e ininterrotta per l'elemento di backup di SQL dall'area secondaria. Il punto di ripristino temporizzato desiderato deve essere compreso in questo intervallo.

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

L'output sarà simile all'esempio seguente:

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

L'output precedente indica che è possibile eseguire il ripristino temporizzato tra l'ora di inizio e l'ora di fine visualizzate. Tutte le ore sono in formato UTC. In PowerShell creare qualsiasi punto di ripristino temporizzato compreso nell'intervallo illustrato in precedenza.

Recuperare il server di destinazione dall'area secondaria

Nell'area secondaria sono necessari un insieme di credenziali e un server di destinazione registrati in tale insieme. Dopo aver recuperato il contenitore di destinazione dell'area secondaria e l'istanza di SQL, è possibile riutilizzare i cmdlet esistenti per generare una configurazione del carico di lavoro di ripristino. In questo documento si presuppone che il nome della macchina virtuale sia "secondaryVM" e che il nome dell'istanza all'interno della macchina virtuale sia "MSSQLInstance"

Prima di tutto, si recupera l'insieme di credenziali pertinente presente nell'area secondaria e quindi si ottengono i contenitori registrati all'interno di tale insieme.

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

Dopo aver scelto il contenitore registrato, si recuperano le istanze di SQL all'interno del contenitore in cui deve essere ripristinato il database. In questo caso si presuppone che sia presente un'istanza di SQL all'interno di "secondaryVM" e che l'istanza sia recuperata.

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

Preparare la configurazione di ripristino

Come documentato in precedenza per il normale ripristino SQL, lo stesso comando può essere riutilizzato per generare la configurazione di ripristino pertinente.

Per ripristini completi dall'area secondaria
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
Per ripristini temporizzati del log dall'area secondaria
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Dopo aver ottenuto la configurazione pertinente per il ripristino dell'area primaria o secondaria, lo stesso comando di ripristino può essere usato per attivare i ripristini e successivamente monitorarli mediante jobID.

Eseguire il ripristino con la configurazione pertinente

Dopo aver ottenuto e verificato l'oggetto Config del ripristino pertinente, usare il cmdlet di PowerShell Restore-AzRecoveryServicesBackupItem per avviare il processo di ripristino.

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

L'operazione di ripristino restituisce un processo di cui tenere traccia.

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

Gestire i backup di SQL

Backup su richiesta

Dopo aver abilitato il backup per un database, è anche possibile attivare un backup su richiesta per il database usando il cmdlet di PowerShell Backup-AzRecoveryServicesBackupItem. L'esempio seguente attiva un backup completo di sola copia in un database SQL con compressione abilitata; il backup completo di sola copia deve essere conservato per 60 giorni.

Nota

I backup di sola copia sono ideali per la conservazione a lungo termine, perché non hanno dipendenze da altri tipi di backup, ad esempio i log. Un backup "completo" viene considerato un elemento padre dei backup dei log successivi e pertanto la conservazione è associata ai criteri di conservazione dei log. Di conseguenza, l'ora di scadenza specificata dal cliente viene rispettata per i backup di sola copia e non per i backup "completi". Viene automaticamente impostato un periodo di conservazione del backup completo pari a 45 giorni a partire dall'ora corrente. La procedura è documentata anche qui.

$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

Il comando di backup su richiesta restituisce un processo di cui tenere traccia.

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

Se l'output viene perso o se si vuole recuperare l'ID processo pertinente, recuperare l'elenco dei processi dal servizio Backup di Azure e quindi tenerne traccia assieme ai relativi dettagli.

Modificare i criteri per gli elementi di backup

È possibile modificare i criteri dell'elemento sottoposto a backup da Policy1 in Policy2. Per cambiare i criteri per un elemento sottoposto a backup, recuperare i criteri pertinenti, eseguire il backup dell'elemento e usare il comando Enable-AzRecoveryServices con l'elemento di backup come parametro.

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

Il comando attende il completamento della configurazione di backup e restituisce l'output seguente.

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

Modificare un criterio di backup esistente

Per modificare un criterio esistente, usare il comando Set-AzRecoveryServicesBackupProtectionPolicy.

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

Controllare i processi di backup dopo un certo periodo di tempo per tenere traccia di eventuali errori. In caso affermativo, è necessario risolvere i problemi. Eseguire di nuovo il comando per la modifica dei criteri con il parametro FixForInconsistentItems per riprovare a modificare il criterio in tutti gli elementi di backup per i quali l'operazione non è precedentemente riuscita.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Registrare nuovamente macchine virtuali SQL

Avviso

Assicurarsi di leggere questo documento per comprendere i sintomi e le cause degli errori prima di tentare di ripetere la registrazione

Per attivare la nuova registrazione della macchina virtuale SQL, recuperare il contenitore di backup pertinente e passarlo al cmdlet register.

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

Arresta protezione

Conservare i dati

Per interrompere la protezione, è possibile usare il cmdlet di PowerShell Disable-AzRecoveryServicesBackupProtection. In questo modo i backup pianificati verranno arrestati, ma i dati sottoposti a backup fino a questo momento vengono conservati per sempre.

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

Elimina dati di backup

Per rimuovere completamente i dati di backup archiviati nell'insieme di credenziali, è sufficiente aggiungere il flag/parametro '-RemoveRecoveryPoints'' al comando di 'disabilitazione' della protezione.

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

Abilitare la protezione automatica

Se la protezione automatica è stata configurata in un'istanza SQL, è possibile disabilitarla usando il cmdlet di PowerShell Disable-AzRecoveryServicesBackupAutoProtection.

Trovare le istanze in cui è abilitata la protezione automatica usando il comando di PowerShell seguente.

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

Selezionare quindi il nome dell'elemento e il nome del server pertinenti dall'output e disabilitare la protezione automatica per tali istanze.

$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

Annullare la registrazione della macchina virtuale SQL

Se tutti i database SQL Server non sono più protetti e non sono disponibili dati di backup, è possibile annullare la registrazione della macchina virtuale SQL da questo insieme di credenziali. Solo allora è possibile proteggere i database in un altro insieme di credenziali. Usare il cmdlet di PowerShell Unregister-AzRecoveryServicesBackupContainer per annullare la registrazione della macchina virtuale SQL.

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

Tenere traccia dei processi di Backup di Azure

È importante notare che Backup di Azure tiene traccia solo dei processi attivati dall'utente nel backup di SQL. I backup pianificati (inclusi i backup del log) non sono visibili nel portale o in PowerShell. Tuttavia, se i processi pianificati hanno esito negativo, viene generato un avviso di backup, che viene visualizzato nel portale. Usare Monitoraggio di Azure per tenere traccia di tutti i processi pianificati e altre informazioni pertinenti.

Gli utenti possono tenere traccia delle operazioni attivate su richiesta/dall'utente con l'ID processo restituito nell'output di processi asincroni, ad esempio il backup. Usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupJobDetail per tenere traccia del processo e dei relativi dettagli.

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

Per ottenere l'elenco dei processi su richiesta e dei relativi stati dal servizio Backup di Azure, usare il cmdlet di PowerShell Get-AzRecoveryServicesBackupJob. Nell'esempio seguente vengono restituiti tutti i processi SQL in corso.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

Per annullare un processo in corso, usare il cmdlet di PowerShell Stop-AzRecoveryServicesBackupJob.

Gestione dei gruppi di disponibilità AlwaysOn di SQL

Per i gruppi di disponibilità AlwaysOn di SQL, assicurarsi di registrare tutti i nodi del gruppo di disponibilità. Una volta completata la registrazione per tutti i nodi, un oggetto gruppo di disponibilità SQL viene creato logicamente negli elementi idonei per la protezione. I database nel gruppo di disponibilità SQL verranno elencati come "SQLDatabase". I nodi verranno visualizzati come istanze autonome e anche i database SQL predefiniti in essi contenuti verranno elencati come database SQL.

Si supponga, ad esempio, che un gruppo di disponibilità SQL abbia due nodi: sql-server-0 e sql-server-1 e 1 database del gruppo di disponibilità SQL. Dopo aver registrato entrambi questi nodi, se si elencano gli elementi idonei per la protezione, vengono elencati i componenti seguenti:

  • Oggetto gruppo di disponibilità SQL: tipo di elemento proteggibile come SQLAvailabilityGroup
  • Database del gruppo di disponibilità SQL: tipo di elemento proteggibile come SQLDatabase
  • sql-server-0: tipo di elemento proteggibile come SQLInstance
  • sql-server-1: tipo di elemento proteggibile come SQLInstance
  • Tutti i database SQL predefiniti (master, model, msdb) in sql-server-0: tipo di elemento proteggibile come SQLDatabase
  • Tutti i database SQL predefiniti (master, model, msdb) in sql-server-1: tipo di elemento proteggibile come SQLDatabase

Anche sql-server-0, sql-server-1 verranno elencati come "AzureVMAppContainer" quando sono elencati i container di backup.

Recuperare il database pertinente per abilitare il backup; il backup su richiesta e i cmdlet di PowerShell di ripristino sono identici.