Compartilhar via


Restaurar bancos de dados PostgreSQL usando o Azure PowerShell

Este artigo descreve como usar o Azure PowerShell para restaurar bancos de dados PostgreSQL em um servidor do Banco de Dados do Azure para PostgreSQL que você fez backup por meio do Backup do Azure. Você também pode restaurar um banco de dados PostgreSQL usando o portal do Azure, a CLI do Azure e a API REST.

Como um banco de dados PostgreSQL é um banco de dados PaaS (plataforma como serviço), não é suportada a opção de recuperação Original-Location (OLR) para restaurar substituindo o banco de dados existente (de onde os backups foram feitos). Você pode restaurar a partir de um ponto de recuperação para criar um novo banco de dados no mesmo servidor do Banco de Dados PostgreSQL do Azure ou em qualquer outro servidor PostgreSQL. Esta opção é chamada de Alternate-Location Recovery (ALR). O ALR ajuda a manter o banco de dados de origem e o banco de dados restaurado (novo).

Os exemplos neste artigo referem-se a um cofre de Backup existente nomeado TestBkpVault no grupo de recursos testBkpVaultRG:

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

Restaurar para criar um novo banco de dados PostgreSQL

Configurar permissões

Um cofre de Backup usa uma identidade gerenciada para acessar outros recursos do Azure. Para restaurar do backup, a identidade gerenciada do cofre de backup requer um conjunto de permissões no servidor do Banco de Dados do Azure para PostgreSQL para o qual o banco de dados deve ser restaurado.

Para atribuir as permissões relevantes para a identidade gerenciada atribuída pelo sistema do cofre no servidor PostgreSQL de destino, confira o conjunto de permissões necessárias para fazer backup do banco de dados do Azure para PostgreSQL.

Para restaurar o ponto de recuperação como arquivos para uma conta de armazenamento, a identidade gerenciada atribuída pelo sistema do cofre de Backup precisa de acesso na conta de armazenamento de destino.

Busca do ponto de recuperação relevante

Busque todas as instâncias usando o Get-AzDataProtectionBackupInstance comando e identifique a instância relevante:

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

Você também pode usar o Az.Resourcegraph e o comandoSearch-AzDataProtectionBackupInstanceInAzGraph para pesquisar pontos de recuperação entre instâncias em vários cofres e assinaturas:

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

Para filtrar os critérios de pesquisa, use os recursos de pesquisa de cliente do PowerShell:

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

Depois de identificar a instância, busque o ponto de recuperação relevante:

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

Se você precisar buscar o ponto de recuperação da camada de arquivos, adicione um filtro de cliente:

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

Preparar a solicitação de restauração

Há várias opções de restauração para um banco de dados PostgreSQL. É possível restaurar o ponto de recuperação como outro banco de dados ou restaurar como arquivos. O ponto de recuperação também pode estar na camada de arquivo morto.

Restaurar como um banco de dados

Construa a ID do Azure Resource Manager do novo banco de dados PostgreSQL a ser criado (com o servidor PostgreSQL de destino ao qual as permissões foram atribuídas, conforme detalhado anteriormente). Inclua o nome do banco de dados PostgreSQL necessário. Por exemplo, um banco de dados PostgreSQL pode ser nomeado emprestored21 em um servidor PostgreSQL de destino nomeado targetossserver no grupo targetrg de recursos com uma assinatura diferente:

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

Use o Initialize-AzDataProtectionRestoreRequest comando para preparar a solicitação de restauração com todos os detalhes relevantes:

$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

Para um ponto de recuperação baseado em arquivo, você precisa:

  1. Reidratar do armazenamento de dados de arquivos para o repositório de cofres.
  2. Modifique o armazenamento de dados de origem.
  3. Adicionar outros parâmetros para especificar a prioridade de reidratação.
  4. Especificar a duração de retenção do ponto de recuperação reidratado no armazenamento de dados do cofre.
  5. Restaurar como um banco de dados desse ponto de recuperação.

Use o seguinte comando para preparar a solicitação para todas as operações mencionadas anteriormente ao mesmo tempo:

$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

Restaurar como arquivos

Busque o URI do contêiner dentro da conta de armazenamento à qual as permissões foram atribuídas, conforme detalhado anteriormente. O exemplo a seguir usa um contêiner nomeado testcontainerrestore em uma conta de armazenamento nomeada testossstorageaccount com uma assinatura diferente:

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

Use o Initialize-AzDataProtectionRestoreRequest comando para preparar a solicitação de restauração com todos os detalhes relevantes:

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

Para o ponto de recuperação baseado em ponto de recuperação, modifique o armazenamento de dados de origem. Adicione a prioridade de reidratação e a duração de retenção, em dias, do ponto de recuperação reidratado:

$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

Disparar a restauração

Use o Start-AzDataProtectionBackupInstanceRestore comando para disparar a restauração com a solicitação que você preparou anteriormente:

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

Acompanhar trabalhos

Acompanhe trabalhos usando o Get-AzDataProtectionJob comando. Você pode listar todos os trabalhos e buscar um detalhe de trabalho específico.

Você também pode usar Az.ResourceGraph para acompanhar os trabalhos em todos os cofres de Backup. Use o comando Search-AzDataProtectionJobInAzGraph para obter o trabalho relevante que está em todos os cofres de Backup:

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