Fazer backup e restaurar bancos de dados SQL em VMs do Azure com o PowerShell

Este artigo descreve como usar o Azure PowerShell para fazer backup e recuperar um Banco de Dados SQL em uma VM do Azure usando o cofre dos Serviços de Recuperação de Backup do Azure.

Este artigo explica como:

  • Configure o PowerShell e registre o Provedor de Serviços de Recuperação do Azure.
  • Crie um cofre dos Serviços de Recuperação.
  • Configure o backup para o Banco de Dados SQL em uma VM do Azure.
  • Execute um trabalho de backup.
  • Restaure um banco de dados SQL com backup.
  • Monitore os trabalhos de backup e restauração.

Antes de começar

  • Saiba mais sobre os cofres dos Serviços de Recuperação.
  • Leia sobre os recursos para fazer backup de SQL DBs em VMs do Azure.
  • Analise a hierarquia de objetos do PowerShell para Serviços de Recuperação.

Hierarquia de objetos dos Serviços de Recuperação

A hierarquia de objetos é resumida no diagrama a seguir.

Hierarquia de objetos dos Serviços de Recuperação

Analise a referência de referência do cmdlet Az.RecoveryServices na biblioteca do Azure.

Configurar e instalar

Configure o PowerShell da seguinte maneira:

  1. Baixe a versão mais recente do Az PowerShell. A versão mínima necessária é 1.5.0.

  2. Encontre os cmdlets do PowerShell do Backup do Azure com este comando:

    Get-Command *azrecoveryservices*
    
  3. Analise os aliases e cmdlets do Backup do Azure e do cofre dos Serviços de Recuperação. Aqui está um exemplo do que você pode ver. Não é uma lista completa de cmdlets.

    Lista de cmdlets dos Serviços de Recuperação

  4. Entre na sua conta do Azure com Connect-AzAccount.

  5. Na página Web apresentada, ser-lhe-á pedido que introduza as credenciais da sua conta.

    • Como alternativa, você pode incluir suas credenciais de conta como um parâmetro no cmdlet Connect-AzAccount com -Credential.
    • Se você for um parceiro CSP trabalhando para um locatário, especifique o cliente como locatário, usando seu tenantID ou tenant primary domain name. Um exemplo é Connect-AzAccount -Tenant fabrikam.com.
  6. Associe a subscrição que pretende utilizar à conta, porque uma conta pode ter várias subscrições.

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Se você estiver usando o Backup do Azure pela primeira vez, use o cmdlet Register-AzResourceProvider para registrar o provedor de Serviços de Recuperação do Azure com sua assinatura.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. Verifique se os provedores se registraram com êxito:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. Na saída do comando, verifique se RegistrationState muda para Registered. Caso contrário, execute o cmdlet Register-AzResourceProvider novamente.

Criar um cofre dos Serviços de Recuperação

Siga estas etapas para criar um cofre dos Serviços de Recuperação.

O cofre dos Serviços de Recuperação é um recurso do Gerenciador de Recursos, portanto, você deve colocá-lo em um grupo de recursos. Você pode usar um grupo de recursos existente ou criar um grupo de recursos com o cmdlet New-AzResourceGroup . Ao criar um grupo de recursos, especifique o nome e o local para o grupo de recursos.

  1. Um cofre é colocado em um grupo de recursos. Se você não tiver um grupo de recursos existente, crie um novo com o New-AzResourceGroup. Neste exemplo, criamos um novo grupo de recursos na região Oeste dos EUA.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Use o cmdlet New-AzRecoveryServicesVault para criar o cofre. Especifique o mesmo local para o cofre que foi usado para o grupo de recursos.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Especifique o tipo de redundância a ser usado para o armazenamento do vault.

    • Você pode usar armazenamento com redundância local, armazenamento com redundância geográfica ou armazenamento com redundância de zona.
    • O exemplo a seguir define a -BackupStorageRedundancy opção para Set-AzRecoveryServicesBackupProperty cmd for testvault set como GeoRedundant.
    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperties  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

Ver os cofres numa subscrição

Para exibir todos os cofres na assinatura, use Get-AzRecoveryServicesVault.

Get-AzRecoveryServicesVault

A saída é semelhante à seguinte. O grupo de recursos associado e o local são fornecidos.

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

Definir o contexto do cofre

Armazene o objeto do vault em uma variável e defina o contexto do vault.

  • Muitos cmdlets do Backup do Azure exigem o objeto vault dos Serviços de Recuperação como entrada, por isso é conveniente armazenar o objeto vault em uma variável.
  • O contexto do cofre é o tipo de dados protegidos no cofre. Defina-o com Set-AzRecoveryServicesVaultContext. Depois que o contexto é definido, ele se aplica a todos os cmdlets subsequentes.

O exemplo a seguir define o contexto do vault para testvault

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

Buscar o ID do cofre

Planejamos substituir a configuração de contexto do cofre de acordo com as diretrizes do Azure PowerShell. Em vez disso, você pode armazenar ou buscar o ID do vault e passá-lo para comandos relevantes, da seguinte maneira:

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

Configurar uma política de backup

Uma política de backup especifica o agendamento para backups e por quanto tempo os pontos de recuperação de backup devem ser mantidos:

Por padrão, uma hora de início é definida no Schedule Policy Object. Use o exemplo a seguir para alterar a hora de início para a hora de início desejada. A hora de início desejada também deve estar em UTC. O exemplo a seguir pressupõe que a hora de início desejada é 01:00 AM UTC para backups diários.

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

Importante

Você precisa fornecer a hora de início em múltiplos de 30 minutos apenas. No exemplo acima, pode ser apenas "01:00:00" ou "02:30:00". A hora de início não pode ser "01:15:00".

O exemplo a seguir armazena a política de agendamento e a política de retenção em variáveis. Em seguida, ele usa essas variáveis como parâmetros para uma nova política (NewSQLPolicy). NewSQLPolicy faz um backup diário "Completo", retém-no por 180 dias e faz um backup de log a cada 2 horas

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

A saída é semelhante à seguinte.

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

Habilitar o backup

Registrando a VM SQL

Para backups de VM do Azure e compartilhamentos de arquivos do Azure, o serviço de Backup pode se conectar a esses recursos do Azure Resource Manager e buscar os detalhes relevantes. Como o SQL é um aplicativo dentro de uma VM do Azure, o serviço de Backup precisa de permissão para acessar o aplicativo e buscar os detalhes necessários. Para fazer isso, você precisa 'registrar ' a VM do Azure que contém o aplicativo SQL com um cofre dos Serviços de Recuperação. Depois de registrar uma VM SQL em um cofre, você pode proteger os DBs SQL somente para esse cofre. Use o cmdlet Register-AzRecoveryServicesBackupContainer PowerShell para registrar a VM.

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

O comando retornará um 'contêiner de backup' deste recurso e o status será 'registrado'

Nota

Se o parâmetro force não for fornecido, você será solicitado a confirmar com um texto "Deseja desativar a proteção para este contêiner?". Por favor, ignore este texto e diga "Y" para confirmar. Este é um problema conhecido e estamos trabalhando para remover o texto e o requisito para o parâmetro force.

Obtendo DBs SQL

Quando o registro estiver concluído, o serviço de backup poderá listar todos os componentes SQL disponíveis na VM. Para exibir todos os componentes SQL cujo backup ainda será feito neste cofre, use o cmdlet Get-AzRecoveryServicesBackupProtectableItem PowerShell

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

A saída mostrará todos os componentes SQL desprotegidos em todas as VMs SQL registradas neste cofre com Tipo de Item e ServerName. Você pode filtrar ainda mais para uma VM SQL específica passando o parâmetro '-Container' ou usando a combinação de 'Name' e 'ServerName' junto com o sinalizador ItemType para chegar a um item SQL exclusivo.

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

Configurar a cópia de segurança

Agora que temos o banco de dados SQL necessário e a política com a qual é necessário fazer backup, podemos usar o cmdlet Enable-AzRecoveryServicesBackupProtection para configurar o backup para esse banco de dados SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

O comando aguarda até que a configuração de backup seja concluída e retorna a saída a seguir.

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

Buscando novos DBs SQL

Depois que a máquina for registrada, o serviço de Backup buscará os detalhes dos DBs disponíveis em seguida. Se DBs SQL ou instâncias SQL forem adicionados à máquina registrada posteriormente, você precisará acionar manualmente o serviço de backup para executar uma nova 'consulta' para obter todos os DBs desprotegidos (incluindo os recém-adicionados) novamente. Use o cmdlet Initialize-AzRecoveryServicesBackupItem PowerShell na VM SQL para executar uma nova consulta. O comando aguarda até que a operação seja concluída. Mais tarde, use o cmdlet Get-AzRecoveryServicesBackupProtectableItem PowerShell para obter a lista dos componentes SQL desprotegidos mais recentes.

$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

Uma vez que os itens protegíveis relevantes são buscados, habilite os backups conforme instruído na seção acima. Se não quisermos detetar manualmente novos DBs, eles podem optar pela proteção automática, conforme explicado abaixo.

Ativar a proteção automática

É possível configurar o backup para que todos os DBs adicionados no futuro sejam automaticamente protegidos com uma determinada política. Para habilitar a proteção automática, use o cmdlet Enable-AzRecoveryServicesBackupAutoProtection PowerShell.

Como a instrução é fazer backup de todos os DBs futuros, a operação é feita em um nível SQLInstance .

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -Policy $NewSQLPolicy -VaultId $testVault.ID

Uma vez que a intenção de proteção automática é dada, a consulta na máquina para buscar DBs recém-adicionados ocorre como uma tarefa em segundo plano agendada a cada 8 horas.

Restaurar DBs SQL

O Backup do Azure pode restaurar bancos de dados do SQL Server que estão sendo executados em VMs do Azure da seguinte maneira:

  • Restaure para uma data ou hora específica (para a segunda) usando backups de log de transações. O Backup do Azure determina automaticamente o backup diferencial completo apropriado e a cadeia de backups de log que são necessários para restaurar com base no tempo selecionado.
  • Restaure um backup completo ou diferencial específico para restaurar para um ponto de recuperação específico.

Verifique os pré-requisitos mencionados aqui antes de restaurar os DBs SQL.

Aviso

Devido a um problema de segurança relacionado ao RBAC, tivemos que introduzir uma alteração de quebra nos comandos de restauração para o Banco de Dados SQL via PowerShell. Atualize para a versão Az 6.0.0 ou superior para que os comandos de restauração adequados sejam enviados via PowerShell. Os comandos PS mais recentes são fornecidos abaixo.

Primeiro, busque o banco de dados SQL de backup relevante usando o cmdlet Get-AzRecoveryServicesBackupItem PowerShell.

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

Obter o tempo de restauração relevante

Conforme descrito acima, você pode restaurar o banco de dados SQL de backup para uma cópia completa/diferencial OU para um log point-in-time.

Buscar pontos de recuperação distintos

Use Get-AzRecoveryServicesBackupRecoveryPoint para buscar pontos de recuperação distintos (completos/diferenciais) para um banco de dados SQL de backup.

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

A saída é semelhante ao exemplo a seguir

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

Use o filtro 'RecoveryPointId' ou um filtro de matriz para buscar o ponto de recuperação relevante.

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

Buscar ponto de recuperação point-in-time

Se você quiser restaurar o banco de dados para um determinado point-in-time, use o cmdlet Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell. O cmdlet retorna uma lista de datas que representam as horas de início e término de uma cadeia de logs contínua e ininterrupta para esse item de backup SQL. O point-in-time desejado deve estar dentro deste intervalo.

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

A saída será semelhante ao exemplo a seguir.

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

A saída acima significa que você pode restaurar para qualquer point-in-time entre a hora de início exibida e a hora de término. Os horários estão em UTC. Construa qualquer point-in-time no PowerShell que esteja dentro do intervalo mostrado acima.

Nota

Quando um log point-in-time é selecionado para restauração, você não precisa especificar o ponto inicial, ou seja, o backup completo a partir do qual o banco de dados é restaurado. O serviço de Backup do Azure cuidará de todo o plano de recuperação, ou seja, qual backup completo escolher, quais backups de log aplicar e assim por diante.

Determinar a configuração de recuperação

Para uma restauração do Banco de Dados SQL, há suporte para os seguintes cenários de restauração.

  • Substituindo o banco de dados SQL de backup por dados de outro ponto de recuperação - OriginalWorkloadRestore
  • Restaurando o Banco de Dados SQL como um novo banco de dados na mesma instância SQL - AlternateWorkloadRestore
  • Restaurando o Banco de Dados SQL como um novo banco de dados em outra instância SQL em outra VM SQL - AlternateWorkloadRestore
  • Restaurando o Banco de Dados SQL como arquivos .bak -RestoreAsFiles

Depois de buscar o ponto de recuperação relevante (distinto ou point-in-time de log), use o cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell para buscar o objeto de configuração de recuperação de acordo com o plano de recuperação desejado.

Restauração da carga de trabalho original

Para substituir o banco de dados de backup por dados do ponto de recuperação, basta especificar o sinalizador correto e o ponto de recuperação relevante, conforme mostrado no(s) exemplo(s) a seguir.

Restauração original com ponto de recuperação distinto
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
Restauração original com log point-in-time
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Restauração alternativa da carga de trabalho

Importante

Um banco de dados SQL de backup pode ser restaurado como um novo banco de dados somente para outro SQLInstance em uma VM do Azure 'registrada' neste cofre.

Conforme descrito acima, se o SQLInstance de destino estiver dentro de outra VM do Azure, verifique se ele está registrado nesse cofre e se o SQLInstance relevante aparece como um item protegível. Neste documento, vamos supor que o nome SQLInstance de destino seja MSSQLSERVER dentro de outra VM "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

Em seguida, basta passar o ponto de recuperação relevante, a instância SQL de destino com o sinalizador certo, conforme mostrado abaixo, e o contêiner de destino sob o qual a instância SQL de destino existe.

Restauração alternativa com ponto de recuperação distinto
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restauração alternativa com log point-in-time
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Restaurar como arquivos

Para restaurar os dados de backup como arquivos .bak em vez de um banco de dados, escolha a opção Restaurar como arquivos . O banco de dados SQL de backup pode ser restaurado para qualquer VM de destino registrada neste cofre.

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
Restaurar como arquivos com ponto de recuperação distinto
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaure como arquivos com o log point-in-time a partir da última versão completa
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurar como arquivos com log point-in-time a partir de um completo especificado

Se você quiser fornecer um completo específico que deve ser usado para restauração, use o seguinte comando:

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

O objeto de configuração do ponto de recuperação final obtido do cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell tem todas as informações relevantes para restauração e é conforme mostrado abaixo.

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

Você pode editar os campos Nome do banco de dados restaurado, OverwriteWLIfpresent, NoRecoveryMode e targetPhysicalPath. Obtenha mais detalhes para os caminhos de arquivo de destino, conforme mostrado abaixo.

$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

Defina as propriedades relevantes do PowerShell como valores de cadeia de caracteres, conforme mostrado abaixo.

$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

Certifique-se de que o objeto de configuração de recuperação final tenha todos os valores necessários e adequados, pois a operação de restauração será baseada no objeto config.

Nota

Se você não quiser restaurar toda a cadeia, mas apenas um subconjunto de arquivos, siga as etapas conforme documentado aqui.

Restauração de carga de trabalho alternativa para um cofre na região secundária

Importante

O suporte para restaurações de região secundária para SQL do PowerShell está disponível no Az 6.0.0

Se você tiver habilitado a restauração entre regiões, os pontos de recuperação também serão replicados para a região secundária emparelhada. Em seguida, você pode buscar esses pontos de recuperação e acionar uma restauração para uma máquina, presente nessa região emparelhada. Assim como na restauração normal, a máquina de destino deve ser registrada no cofre de destino na região secundária. A sequência de etapas a seguir deve esclarecer o processo de ponta a ponta.

  • Buscar os itens de backup que são replicados para a região secundária
  • Para esse item, busque os pontos de recuperação (distintos e/ou logs) que são replicados para a região secundária
  • Em seguida, escolha um servidor de destino, registrado em um cofre dentro da região emparelhada secundária
  • Acione a restauração para esse servidor e rastreie-a usando o JobId.

Buscar itens de backup da região secundária

Buscar todos os itens de backup SQL da região secundária com o comando usual, mas com um parâmetro extra para indicar que esses itens devem ser buscados na região secundária.

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
Buscar pontos de recuperação distintos da região secundária

Use Get-AzRecoveryServicesBackupRecoveryPoint para buscar pontos de recuperação distintos (completos/diferenciais) para um banco de dados SQL de backup e adicionar um parâmetro para indicar que esses são pontos de recuperação buscados na região secundária

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

A saída é semelhante ao exemplo a seguir

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

Use o filtro 'RecoveryPointId' ou um filtro de matriz para buscar o ponto de recuperação relevante.

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
Buscar pontos de recuperação de log da região secundária

Use o cmdlet Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell com o parâmetro '-UseSecondaryRegion' que retornará as horas de início e término de uma cadeia de log contínua e ininterrupta para esse item de backup SQL da região secundária. O point-in-time desejado deve estar dentro deste intervalo.

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

A saída será semelhante ao exemplo a seguir.

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

A saída acima significa que você pode restaurar para qualquer point-in-time entre a hora de início exibida e a hora de término. Os horários estão em UTC. Construa qualquer point-in-time no PowerShell que esteja dentro do intervalo mostrado acima.

Buscar o servidor de destino da região secundária

A partir da região secundária, precisamos de um cofre e um servidor de destino registrado nesse cofre. Depois de termos o contêiner de destino da região secundária e a instância SQL, podemos reutilizar os cmdlets existentes para gerar uma configuração de carga de trabalho de restauração. Neste documento, vamos supor que o nome da VM seja "secondaryVM" e o nome da instância dentro dessa VM seja "MSSQLInstance"

Primeiro, buscamos o cofre relevante presente na região secundária e, em seguida, obtemos os contêineres registrados dentro desse cofre.

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

Depois que o contêiner registrado for escolhido, buscaremos as instâncias SQL dentro do contêiner para o qual o banco de dados deve ser restaurado. Aqui assumimos que há 1 instância SQL dentro da "secondaryVM" e buscamos essa instância.

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

Preparar a configuração de recuperação

Conforme documentado acima para a restauração SQL normal, o mesmo comando pode ser reutilizado para gerar a configuração de recuperação relevante.

Para restaurações completas da região secundária
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
Para restaurações point-in-time de log da região secundária
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Uma vez que a configuração relevante é obtida para restauração de região primária ou restauração de região secundária, o mesmo comando restore pode ser usado para disparar restaurações e posteriormente rastreado usando os jobIDs.

Restaurar com configuração relevante

Depois que o objeto Config de recuperação relevante for obtido e verificado, use o cmdlet Restore-AzRecoveryServicesBackupItem PowerShell para iniciar o processo de restauração.

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

A operação de restauração retorna um trabalho a ser rastreado.

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

Gerenciar backups SQL

Backup sob demanda

Depois que o backup tiver sido habilitado para um banco de dados, você também poderá disparar um backup sob demanda para o banco de dados usando o cmdlet Backup-AzRecoveryServicesBackupItem PowerShell. O exemplo a seguir aciona um backup completo somente cópia em um banco de dados SQL com compactação habilitada e o backup completo somente cópia deve ser mantido por 60 dias.

Nota

Os backups completos somente cópia são ideais para retenção de longo prazo, uma vez que não têm dependências de outros tipos de backup, como logs. Um backup "completo" é tratado como um pai de backups de log subsequentes e, portanto, sua retenção está vinculada à retenção de logs na política. Portanto, o tempo de expiração fornecido pelo cliente é honrado para backups completos somente cópia e não para backups "completos". Um tempo de retenção de backup completo é definido automaticamente por 45 dias a partir da hora atual. Também está documentado aqui.

$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

O comando on-demand backup retorna um trabalho a ser rastreado.

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

Se a saída for perdida ou se você quiser obter a ID de Trabalho relevante, obtenha a lista de trabalhos do serviço de Backup do Azure e acompanhe-a e seus detalhes.

Alterar a política para itens de backup

Você pode alterar a política do item de backup de Policy1 para Policy2. Para alternar políticas para um item de backup, busque a política relevante e faça backup do item e use o comando Enable-AzRecoveryServices com o item de backup como parâmetro.

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

O comando aguarda até que a configuração de backup seja concluída e retorna a saída a seguir.

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

Editar uma política de backup existente

Para editar uma política existente, use o comando Set-AzRecoveryServicesBackupProtectionPolicy .

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

Verifique os trabalhos de backup depois de algum tempo para rastrear quaisquer falhas. Se houver, você precisa corrigir os problemas. Em seguida, execute novamente o comando edit policy com o parâmetro FixForInconsistentItems para tentar editar novamente a política em todos os itens de backup para os quais a operação falhou anteriormente.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Registrar novamente VMs SQL

Aviso

Certifique-se de ler este documento para entender os sintomas e as causas da falha antes de tentar um novo registro

Para acionar o novo registro da VM SQL, busque o contêiner de backup relevante e passe-o para o cmdlet register.

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

Proteção contra parar

Reter dados

Se desejar interromper a proteção, você pode usar o cmdlet Disable-AzRecoveryServicesBackupProtection PowerShell. Isso interromperá os backups agendados, mas os dados de backup até agora serão retidos para sempre.

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

Eliminar dados de cópia de segurança

Para remover completamente os dados de backup armazenados no cofre, basta adicionar o sinalizador/switch '-RemoveRecoveryPoints' ao comando de proteção 'desabilitar'.

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

Desativar a proteção automática

Se a proteção automática tiver sido configurada em um SQLInstance, você poderá desabilitá-la usando o cmdlet Disable-AzRecoveryServicesBackupAutoProtection PowerShell.

Localize as instâncias em que a proteção automática está habilitada usando o seguinte comando do PowerShell.

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

Em seguida, escolha o nome do item protegível relevante e o nome do servidor na saída e desative a proteção automática para essas instâncias.

$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

Cancelar o registro de VM SQL

Se todos os DBs de um servidor SQL não estiverem mais protegidos e não existirem dados de backup, você poderá cancelar o registro da VM SQL desse cofre. Só então você pode proteger DBs para outro cofre. Use o cmdlet Unregister-AzRecoveryServicesBackupContainer PowerShell para cancelar o registro da VM SQL.

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

Rastrear trabalhos do Backup do Azure

É importante observar que o Backup do Azure rastreia apenas trabalhos acionados pelo usuário no backup SQL. Os backups agendados (incluindo backups de log) não são visíveis no portal ou no PowerShell. No entanto, se algum trabalho agendado falhar, um alerta de backup será gerado e mostrado no portal. Use o Azure Monitor para controlar todos os trabalhos agendados e outras informações relevantes.

Os usuários podem rastrear operações acionadas sob demanda/usuário com o JobID retornado na saída de trabalhos assíncronos, como backup. Use o cmdlet Get-AzRecoveryServicesBackupJobDetail PowerShell para controlar o trabalho e seus detalhes.

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

Para obter a lista de trabalhos sob demanda e seus status do serviço de Backup do Azure, use o cmdlet Get-AzRecoveryServicesBackupJob PowerShell. O exemplo a seguir retorna todos os trabalhos SQL em andamento.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

Para cancelar um trabalho em andamento, use o cmdlet Stop-AzRecoveryServicesBackupJob PowerShell.

Gerenciando grupos de disponibilidade Always On do SQL

Para Grupos de Disponibilidade Always On do SQL, certifique-se de registrar todos os nós do grupo de Disponibilidade (AG). Depois que o registro é feito para todos os nós, um objeto de grupo de disponibilidade SQL é criado logicamente em itens protegíveis. Os bancos de dados sob o SQL AG serão listados como 'SQLDatabase'. Os nós aparecerão como instâncias autônomas e os bancos de dados SQL padrão sob eles também serão listados como bancos de dados SQL.

Por exemplo, vamos supor que um SQL AG tenha dois nós: sql-server-0 e sql-server-1 e 1 SQL AG DB. Uma vez que ambos os nós são registrados, se você listar os itens que podem ser protegidos, ele listará os seguintes componentes

  • Um objeto SQL AG - tipo de item protegível como SQLAvailabilityGroup
  • A SQL AG DB - tipo de item protegível como SQLDatabase
  • sql-server-0 - tipo de item protegível como SQLInstance
  • sql-server-1 - tipo de item protegível como SQLInstance
  • Qualquer DBs SQL padrão (master, model, msdb) em sql-server-0 - tipo de item protegível como SQLDatabase
  • Qualquer DBs SQL padrão (master, model, msdb) em sql-server-1 - tipo de item protegível como SQLDatabase

sql-server-0, sql-server-1 também será listado como "AzureVMAppContainer" quando os contêineres de backup forem listados.

Basta buscar o banco de dados relevante para habilitar o backup e os cmdlets do PowerShell de backup e restauração sob demanda são idênticos.