Condividi tramite


Ripristina i database PostgreSQL utilizzando Azure PowerShell

Questo articolo descrive come usare Azure PowerShell per ripristinare i database PostgreSQL in un server di Database di Azure per PostgreSQL di cui è stato eseguito il backup tramite Backup di Azure. È anche possibile ripristinare un database PostgreSQL usando il portale di Azure, l'interfaccia della riga di comando di Azure e l'API REST.

Poiché un database PostgreSQL è un database PaaS (Platform as a Service), l'opzione OLR (Original-Location Recovery) da ripristinare sostituendo il database esistente (da cui sono stati eseguiti i backup) non è supportato. È possibile eseguire il ripristino da un punto di ripristino per creare un nuovo database nello stesso server di Database di Azure per PostgreSQL o in qualsiasi altro server PostgreSQL. Questa opzione è denominata Alternate-Location Recovery (ALR). ALR consente di mantenere sia il database di origine che il database ripristinato (nuovo).

Gli esempi in questo articolo fanno riferimento a una cassaforte di backup esistente denominata TestBkpVault nel gruppo di risorse testBkpVaultRG:

$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault -ResourceGroupName "testBkpVaultRG"

Eseguire il ripristino per creare un nuovo database PostgreSQL

Impostare le autorizzazioni

Un vault di backup usa un'identità gestita per accedere ad altre risorse di Azure. Per eseguire il ripristino da un backup, la Managed Identity del vault di Backup richiede un set di autorizzazioni sul server Azure Database per PostgreSQL su cui deve essere ripristinato il database.

Per assegnare le autorizzazioni pertinenti all'identità gestita assegnata dal sistema per il vault sul server PostgreSQL di destinazione, vedere il elenco delle autorizzazioni necessarie per eseguire il backup di un database PostgreSQL.

Per ripristinare il punto di ripristino come file in un account di archiviazione, l'identità gestita assegnata dal sistema dell'insieme di credenziali di Backup richiede l'accesso nell'account di archiviazione di destinazione.

Recupero del punto di ripristino pertinente

Recuperare tutte le istanze usando il Get-AzDataProtectionBackupInstance comando e identificare l'istanza pertinente:

$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name

È anche possibile usare Az.Resourcegraph e Search-AzDataProtectionBackupInstanceInAzGraph il comando per cercare i punti di ripristino tra istanze in molti vault e sottoscrizioni.

$AllInstances = Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured

Per filtrare i criteri di ricerca, usare le funzionalità di ricerca client di PowerShell:

Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured | Where-Object { $_.BackupInstanceName -match "empdb11"}

Dopo aver identificato l'istanza, ottenere il punto di ripristino pertinente.

$rp = Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName

Se è necessario recuperare il punto di ripristino dal livello archivio, aggiungere un filtro client:

Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName | Where-Object {$_.Property.RecoveryPointDataStoresDetail[0].Type -match "Archive" }

Preparare la richiesta di ripristino

Esistono varie opzioni di ripristino per un database PostgreSQL. È possibile ripristinare il punto di ripristino come un altro database o come file. Il punto di ripristino può anche trovarsi nel livello archivio.

Ripristina come database

Costruire l'ID di Azure Resource Manager del nuovo database PostgreSQL da creare (con il server PostgreSQL di destinazione a cui sono state assegnate le autorizzazioni, come descritto in precedenza). Includere il nome del database PostgreSQL richiesto. Ad esempio, un database PostgreSQL può essere denominato emprestored21 in un server PostgreSQL di destinazione denominato targetossserver nel gruppo targetrg di risorse con una sottoscrizione diversa:

$targetOssId = /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21

Usare il Initialize-AzDataProtectionRestoreRequest comando per preparare la richiesta di ripristino con tutti i dettagli pertinenti:

$OssRestoreReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault

Per un punto di ripristino basato su archivio, è necessario:

  1. Reidratare dal datastore di archivio al datastore di vault.
  2. Modificare l'archivio dati di origine.
  3. Aggiungere altri parametri per specificare la priorità di riattivazione.
  4. Specificare la durata per cui il punto di ripristino riattivato deve essere conservato nell'archivio dati dell'insieme di credenziali.
  5. Eseguire il ripristino come database da questo punto di ripristino.

Usare il comando seguente per preparare la richiesta per tutte le operazioni indicate in precedenza contemporaneamente:

$OssRestoreFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault -RehydrationDuration 12 -RehydrationPriority Standard

Ripristinare come file

Recuperare l'URI del contenitore all'interno dell'account di archiviazione a cui sono state assegnate le autorizzazioni, come descritto in precedenza. L'esempio seguente usa un contenitore denominato testcontainerrestore in un account di archiviazione denominato testossstorageaccount con una sottoscrizione diversa:

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

Usare il Initialize-AzDataProtectionRestoreRequest comando per preparare la richiesta di ripristino con tutti i dettagli pertinenti:

$OssRestoreAsFilesReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" 

Per il punto di ripristino basato sull'archivio, modificare l'archivio dati di origine. Aggiungere la priorità di reidratazione e il periodo di conservazione, in giorni, del punto di ripristino reidratato:

$OssRestoreAsFilesFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" -RehydrationDuration "14" -RehydrationPriority Standard

Attivare il processo di ripristino

Usare il Start-AzDataProtectionBackupInstanceRestore comando per attivare il ripristino con la richiesta preparata in precedenza:

Start-AzDataProtectionBackupInstanceRestore -BackupInstanceName $AllInstances[2].BackupInstanceName -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Parameter $OssRestoreReq

Tenere traccia dei lavori

Tenere traccia dei processi usando il Get-AzDataProtectionJob comando . È possibile elencare tutti i processi e recuperare un dettaglio particolare di un processo.

È anche possibile usare Az.ResourceGraph per tenere traccia dei processi in tutti gli insiemi di credenziali di backup. Usare il Search-AzDataProtectionJobInAzGraph comando per ottenere il processo pertinente in tutti gli insiemi di credenziali di backup:

$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -Operation OnDemandBackup