Compartilhar via


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:

  • Configurar o PowerShell e registrar o Provedor de Serviços de Recuperação do Azure.
  • Crie um cofre dos Serviços de Recuperação.
  • Configurar o backup para o banco de dados SQL em uma VM do Azure.
  • Executar um trabalho de backup.
  • Restaurar o backup de um banco de dados SQL.
  • Monitorar os trabalhos de backup e restauração.

Antes de começar

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

A hierarquia de objetos está resumida no diagrama a seguir.

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

Examine a referência do cmdletAz.RecoveryServices na biblioteca do Azure.

Configurar e instalar

Configure o PowerShell conforme a seguir:

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

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

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

    Listar cmdlets dos Serviços de Recuperação

  4. Entre em sua conta do Azure usando Connect-AzAccount.

  5. Na página da Web exibida, você será solicitado a inserir suas credenciais de conta.

    • Como alternativa, é possível incluir as credenciais de conta como um parâmetro no cmdlet Connect-AzAccount, usando -Credential.
    • Se você é um parceiro CSP trabalhando para um locatário, especifique o cliente como um locatário usando sua tenantID ou o nome de domínio primário do locatário. Um exemplo é Connect-AzAccount -Tenant fabrikam.com.
  6. Associe a assinatura que deseja usar com a conta porque uma conta pode ter várias assinaturas.

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

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

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. Na saída do comando, verifique se o RegistrationState se altera para Registrado. Se isso não ocorrer, execute novamente o cmdlet Register-AzResourceProvider.

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 Resource Manager e, portanto, você precisará 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.

  1. Um cofre é adicionado a um grupo de recursos. Caso não tenha um grupo de recursos existente, crie um novo com o cmdlet New-AzResourceGroup. Neste exemplo, criaremos 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 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 cofre.

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

Exibir os cofres em uma assinatura

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

Get-AzRecoveryServicesVault

A saída deverá ser semelhante a esta: O grupo de recursos e o local associados 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 cofre em uma variável e defina o contexto do cofre.

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

O exemplo a seguir define o contexto do testvault

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

Buscar a ID do cofre

Planejamos substituir a configuração de contexto do cofre de acordo com as diretrizes do Azure PowerShell. Em vez disso, é possível armazenar ou buscar a ID do cofre e passá-la 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 de 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 Objeto de Política de Agendamento. Use o exemplo a seguir para alterar a hora de início para a hora 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 seja 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

A hora de início só pode ser definida usando intervalos de 30 minutos. No exemplo acima, ela pode ser "01:00:00" ou "02:30:00". Mas 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 usa um backup "completo" diário, mantém-no por 180 dias e gera 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 deverá ser semelhante a esta:

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

Habilitar backup

Registrar a VM do SQL

Para os backups de VM e os 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 em 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 do SQL com um cofre, você poderá proteger os bancos de dados SQL somente para esse cofre. Use o cmdlet Register-AzRecoveryServicesBackupContainer do 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' desse recurso e o status será 'registrado'

Observação

Se o parâmetro Force não for fornecido, você será solicitado a confirmar com um texto 'Deseja desabilitar a proteção para este contêiner'. Ignore esse texto e digite "S" para confirmar. Esse é um problema conhecido e estamos trabalhando para remover o texto e o requisito para o parâmetro Force.

Buscar bancos de dados SQL

Quando o registro for concluído, o serviço de backup poderá listar todos os componentes SQL disponíveis na VM. Para exibir todos os componentes SQL que ainda serão copiados para esse cofre, use o cmdlet Get-AzRecoveryServicesBackupProtectableItem do PowerShell

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

A saída mostrará todos os componentes SQL desprotegidos em todas as VMs do SQL registradas nesse cofre com o Tipo de Item e ServerName. Você pode filtrar ainda mais uma determinada VM do SQL passando o parâmetro '-Container ' ou usando a combinação de 'Nome' e 'ServerName', juntamente 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 o backup

Agora que temos o banco de dados SQL necessário e a política segundo a qual o backup precisa ser realizado, podemos usar o cmdlet Enable-AzRecoveryServicesBackupProtection para configurar o backup desse banco de dados SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

O comando aguarda até que a configuração do 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

Buscar novos bancos de dados SQL

Depois de registrar o computador, o serviço de backup buscará os detalhes dos bancos de dados disponíveis. Se instâncias ou bancos de dados SQL forem adicionados posteriormente ao computador registrado, será necessário disparar manualmente o serviço de backup para executar uma nova 'consulta' e obter todos os bancos de dados desprotegidos (incluindo os recém-adicionados) novamente. Use o cmdlet Initialize-AzRecoveryServicesBackupItem do PowerShell na VM do SQL para executar uma nova consulta. O comando aguarda até que a operação seja concluída. Posteriormente, use o cmdlet Get-AzRecoveryServicesBackupProtectableItem do PowerShell para obter a lista mais recente de componentes SQL desprotegidos.

$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

Depois de buscar os itens protegíveis relevantes, habilite os backups conforme instruído na seção acima. Se não quiser detectar manualmente novos bancos de dados, é possível optar pela proteção automática, conforme explicado abaixo.

Habilitar a proteção automática

Você pode configurar o backup para que todos os bancos de dado adicionados no futuro sejam protegidos automaticamente com uma determinada política. Para habilitar a proteção automática, use o cmdlet Enable-AzRecoveryServicesBackupAutoProtection do PowerShell.

Como a instrução é fazer backup de todos os bancos de dado futuros, a operação é feita em nível de 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

Depois de fornecer a intenção de aplicar a proteção automática, a consulta no computador para buscar bancos de dados recém-adicionados ocorre como uma tarefa agendada em segundo plano a cada 8 horas.

Restaurar banco de dados SQL

O Backup do Azure pode restaurar bancos de dados do SQL Server em execução em VMs do Azure da seguinte maneira:

  • Restaure a uma data e hora específicas (com precisão de segundos), usando backups de log de transações. O Backup do Azure determina automaticamente o backup diferencial completo adequado e a cadeia de backups de log de transações necessários para restaurar com base na hora selecionada.
  • Restaure um backup completo ou diferencial específico para restaurar um ponto de recuperação específico.

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

Aviso

Devido a um problema de segurança relacionado ao RBAC, precisamos introduzir uma alteração interruptiva nos comandos de restauração para SQL DB através do PowerShell. Atualize para a versão 6.0.0 ou superior do Az, para que os comandos de restauração adequados sejam enviados através do PowerShell. Os comandos PS mais recentes são fornecidos abaixo.

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

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

Buscar o tempo de restauração relevante

Conforme descrito acima, você pode restaurar o banco de dados SQL com backup para uma cópia completa/diferencial ou para um log pontual.

Buscar pontos de recuperação distintos

Use Get-AzRecoveryServicesBackupRecoveryPoint para buscar pontos de recuperação distintos (completos/diferenciais) para um banco de dados SQL com 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 deverá ser semelhante ao seguinte exemplo:

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 pontos de recuperação pontual

Se você quiser restaurar o banco de dados para um determinado ponto no tempo, use o cmdlet Get-AzRecoveryServicesBackupRecoveryLogChain do PowerShell. O cmdlet retorna uma lista de datas que representam os horários de início e término de uma cadeia de logs contínua para esse item de backup do SQL. O ponto no tempo desejado deve estar dentro desse 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 qualquer ponto no tempo entre a hora de início e a hora de término exibidas. As horas estão em UTC. Crie um ponto no tempo no PowerShell que esteja dentro do intervalo mostrado acima.

Observação

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

Determinar a configuração de recuperação

No caso de uma restauração do banco de dados SQL, há suporte para os seguintes cenários de restauração.

  • Substituição de um banco de dados SQL com backup por outro ponto de recuperação - OriginalWorkloadRestore
  • Restauração do banco de dados SQL como um novo banco de dados na mesma instância SQL - AlternateWorkloadRestore
  • Restauração do banco de dados SQL como um novo banco de dados em outra instância do SQL - AlternateWorkloadRestore
  • Restauração do banco de dados SQL como arquivos .bak - RestoreAsFiles

Depois de buscar o ponto de recuperação relevante (diferenciado ou log pontual), use o cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig do PowerShell para buscar o objeto de configuração da recuperação de acordo com o plano de recuperação desejado.

Restauração da carga de trabalho original

Para substituir o banco de dados com backup pelos dados de um ponto de recuperação, basta especificar o sinalizador correto e o ponto de recuperação relevante, conforme mostrado nos exemplos 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 pontual
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Restauração alternativa de carga de trabalho

Importante

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

Conforme descrito acima, se a SQLInstance de destino estiver dentro de outra VM do Azure, verifique se que ela está registrada no cofre e se a 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 e direcionar a instância SQL com o sinalizador correto, conforme mostrado abaixo, e o contêiner de destino no 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 pontual
$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 Restaurar como arquivos. O banco de dados SQL com backup pode ser restaurado para qualquer VM de destino registrada nesse 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
Restaurar como arquivos com log pontual do último backup completo
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Restaurar como arquivos com log pontual do backup completo especificado

Se você quiser fornecer um backup completo específico para usar na 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 do PowerShell tem todas as informações relevantes para a restauração e está 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 de nome do banco de dados restaurado, OverwriteWLIfpresent, NoRecoveryMode e targetPhysicalPath. Obtenha mais detalhes sobre 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

Verifique se o objeto de configuração da recuperação final tem todos os valores necessários e adequados, uma vez que a operação de restauração será baseada no objeto de configuração.

Observação

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ê habilitar 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 disparar uma restauração para um computador, presente nessa região emparelhada. Assim como na restauração normal, o computador de destino deve ser registrado 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 (distinto 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 secundária emparelhada
  • Disparar a restauração para esse servidor e rastreá-la usando o JobId.

Buscar itens de backup da região secundária

Busque todos os SQL de backup da região secundária com o comando normal, mas com um parâmetro extra para indicar que esses itens devem ser buscados da 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 (Completo/diferencial) para um banco de dados SQL com backup, e adicione um parâmetro para indicar que esses são pontos de recuperação buscados da 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 deverá ser semelhante ao seguinte exemplo:

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 Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell cmdlet com o parâmetro ' -UseSecondaryRegion' que retornará os tempos de início e fim de uma cadeia de log contínua e ininterrupta para esse item de backup do SQL da região secundária. O ponto no tempo desejado deve estar dentro desse 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 qualquer ponto no tempo entre a hora de início e a hora de término exibidas. As horas estão em UTC. Crie um ponto no tempo no PowerShell que esteja dentro do intervalo mostrado acima.

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

Na região secundária, precisamos de um cofre e um servidor de destino registrados nesse cofre. Depois que temos o contêiner de destino da região secundária e a instância SQL, podemos usar novamente 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 nessa VM seja "MSSQLInstance"

Primeiro, buscamos o cofre relevante presente na região secundária e, em seguida, obteremos 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, supomos que haja uma 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 normal de SQL, o mesmo comando pode ser usado novamente 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 pontuais de log da região secundária
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Depois que a configuração relevante for obtida para restauração da região primária ou para restauração da região secundária, o mesmo comando Restore poderá ser usado para disparar restaurações e rastrear posteriormente usando o jobIDs.

Restaurar com configuração relevante

Depois de obter e verificar o objeto de configuração da recuperação relevante, use o cmdlet Restore-AzRecoveryServicesBackupItem do 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 monitorado.

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

Gerenciar backups do SQL

Backup sob demanda

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

Observação

Backups completos somente cópia são ideais para retenção de longo prazo, pois eles não têm dependências de outros tipos de backup, como logs. Um backup "Completo" é tratado como pai dos backups de log subsequentes e, portanto, sua retenção está vinculada à retenção do log na política. Portanto, o tempo de expiração fornecido pelo cliente é honrado para os backups completos somente cópia e não para os backups "completos". O período de retenção do backup completo é definido automaticamente como 45 dias da hora atual. Ele 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 de backup sob demanda retorna um trabalho a ser monitorado.

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 do trabalho relevante, obtenha a lista de trabalhos no serviço de Backup do Azure e monitore os trabalhos e seus detalhes.

Alterar a política de itens de backup

Você pode alterar a política do item de backup de Policy1 para Policy2. Para alternar políticas de um item submetido a backup, busque a política relevante e faça o backup do item e use o comando Enable-AzRecoveryServices com o item como o 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 do 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 monitorar as falhas. Se houver alguma, você precisará corrigir o problema. Em seguida, execute novamente o comando para editar a política com o parâmetro FixForInconsistentItems para tentar editar a política em todos os itens de backup nos quais houve falha na operação.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Registrar novamente as VMs do SQL

Aviso

Leia este documento para reconhecer os sintomas e as causas das falhas antes de tentar registrar novamente

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

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

Parar a proteção

Reter dados

Se quiser interromper a proteção, use o cmdlet Disable-AzRecoveryServicesBackupProtection do PowerShell. Isso interromperá os backups agendados, mas os dados armazenados em backup até o momento serão mantidos para sempre.

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

Excluir dados de backup

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

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

Desabilitar a proteção automática

Se a proteção automática foi configurada em uma SQLInstance, é possível desabilitá-la usando o cmdlet Disable-AzRecoveryServicesBackupAutoProtection do PowerShell.

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

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

Em seguida, escolha o nome do item e o nome do servidor de proteção relevantes na saída e desabilite 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 uma VM do SQL

Se todos os bancos de dados de um SQL Server não estiverem mais protegidos e não houver dados de backup, será possível cancelar o registro da VM do SQL nesse cofre. Somente depois disso você poderá proteger os bancos de dados em outro cofre. Use o cmdlet Unregister-AzRecoveryServicesBackupContainer do PowerShell para cancelar o registro de uma VM do SQL.

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

Monitorar trabalhos do Backup do Azure

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

Os usuários podem monitorar as operações disparadas pelo usuário/sob demanda com o JobID que é retornado na saída dos trabalhos assíncronos, como o backup. Use o cmdlet Get-AzRecoveryServicesBackupJobDetail do PowerShell para monitorar os trabalhos 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 no serviço de Backup do Azure, use o cmdlet Get-AzRecoveryServicesBackupJob do PowerShell. O exemplo a seguir retorna todos os trabalhos do SQL em andamento.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

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

Gerenciar Grupos de Disponibilidade Always On do SQL

Para os Grupos de Disponibilidade Always On do SQL, registre todos os nós do Grupo de Disponibilidade (AG). Depois de registrar todos os nós, um objeto do Grupo de Disponibilidade do SQL será criado logicamente sob os itens protegíveis. Os bancos de dados no AG do SQL 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 AG do SQL tenha dois nós: SQL-Server-0 e SQL-Server-1 e 1 banco de dados de AG do SQL. Depois que ambos os nós forem registrados, se você listar os itens protegíveis, ele listará os seguintes componentes:

  • Um objeto de AG do SQL - um tipo de item protegível como SQLAvailabilityGroup
  • Um banco de dados de AG do SQL - um tipo de item protegível como SQLDatabase
  • sql-server-0 - um tipo de item protegível como SQLInstance
  • sql-server-1 - um tipo de item protegível como SQLInstance
  • Bancos de dados SQL padrão (mestre, modelo, msdb) em sql-server-0 - um tipo de item protegível como SQLDatabase
  • Bancos de dados SQL padrão (mestre, modelo, msdb) em sql-server-1 - um tipo de item protegível como SQLDatabase

sql-server-0 e sql-server-1 também serão listados como "AzureVMAppContainer" quando os contêineres de backup foram listados.

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