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
- Altre informazioni sull'insieme di credenziali di Servizi di ripristino.
- Informazioni sulle funzionalità per il backup di database SQL nelle macchine virtuali di Azure.
- Esaminare la gerarchia degli oggetti di PowerShell per Servizi di ripristino.
Gerarchia di oggetti dei servizi di ripristino
La gerarchia di oggetti è riepilogata nel diagramma seguente.
Esaminare le informazioni di riferimento sul cmdlet Az.RecoveryServices nella libreria di Azure.
Configurare e installare
Configurare PowerShell come segue:
Scaricare la versione più recente di Az PowerShell. La versione 1.5.0 è la versione minima richiesta.
Trovare i cmdlet di PowerShell per Backup di Azure con il comando seguente:
Get-Command *azrecoveryservices*
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.
Accedere all'account Azure tramite Connect-AzAccount.
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.
Associare la sottoscrizione che si vuole usare all'account perché un account può avere molte sottoscrizioni.
Select-AzSubscription -SubscriptionName $SubscriptionName
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"
Verificare che i provider siano stati registrati correttamente:
Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
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.
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"
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"
Specificare il tipo di ridondanza da usare per l'archiviazione dell'insieme di credenziali.
- È possibile usare l'archiviazione con ridondanza locale, l'archiviazione con ridondanza geografica o l'archiviazione con ridondanza della zona.
- Nell'esempio seguente viene impostata l'opzione
-BackupStorageRedundancy
per il comando Set-AzRecoveryServicesBackupProperty pertestvault
impostato suGeoRedundant
.
$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:
- I criteri di backup sono associati ai criteri di conservazione. Un criterio di conservazione definisce per quanto tempo un punto di recupero viene mantenuto prima dell'eliminazione.
- Visualizzare la conservazione predefinita dei criteri di backup usando Get-AzRecoveryServicesBackupRetentionPolicyObject.
- Visualizzare la pianificazione dei criteri di backup predefinita usando Get-AzRecoveryServicesBackupSchedulePolicyObject.
- Usare il cmdlet New-AzRecoveryServicesBackupProtectionPolicy per creare un nuovo criterio di backup. Vengono specificati la pianificazione e gli oggetti criteri di conservazione.
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.