Partilhar 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:

  • 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

Consulte a 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 Azure Backup 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 de Serviços de Recuperação

Siga estes passos para criar um cofre de Recuperação de Serviços.

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. Utilize o cmdlet New-AzRecoveryServicesVault para criar o vault. 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 o cmdlet Set-AzRecoveryServicesBackupProperty para testvault definir 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, aplica-se 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

Planeamos descontinuar 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 apenas em múltiplos de 30 minutos. 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

O resultado é semelhante ao 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, precisa 'registar' a VM do Azure que contém a aplicação SQL com um Cofre dos Serviços de Recuperação. Depois de registar uma VM SQL com um cofre, pode proteger as bases de dados SQL apenas nesse cofre. Utilize o cmdlet PowerShell Register-AzRecoveryServicesBackupContainer para registar 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.

A obter bases de dados SQL

Quando o registro estiver concluído, o serviço de backup poderá listar todos os componentes SQL disponíveis na VM. Para exibir o componente SQL que ainda não foi copiado para este 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 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

Uma vez que a máquina estiver registrada, o serviço de Backup irá buscar os detalhes dos DBs disponíveis nesse momento. 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 do PowerShell na VM SQL para realizar uma nova investigação. 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 Enable-AzRecoveryServicesBackupAutoProtection PowerShell cmdlet.

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 o objetivo de auto-proteção é dado, realiza-se uma consulta na máquina para procurar as bases de dados recém-adicionadas, ocorrendo como uma tarefa em segundo plano, agendada a cada 8 horas.

Restaurar bases de dados 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 exata, até aos segundos, usando backups de log de transações. O Azure Backup determina automaticamente o tipo apropriado de backup diferencial completo e a cadeia de backups de log necessários para a restauração, com base no horário selecionado.
  • Restaure um backup completo ou diferencial específico para recuperar a partir de 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 com o RBAC, tivemos que introduzir uma alteração disruptiva nos comandos de restauração para a base 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 relevante de restauração

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 pontual

Se quiser restaurar o banco de dados para um determinado momento específico no tempo, 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 momento específico 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 podes restaurar para qualquer ponto no tempo entre a hora de início exibida e a hora de término. Os horários estão em UTC. Construa qualquer momento específico em PowerShell que se encontre 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

Após obter o ponto de recuperação relevante (distinto ou ponto no tempo do log), use o cmdlet PowerShell Get-AzRecoveryServicesBackupWorkloadRecoveryConfig para obter o objeto de configuração de recuperação de acordo com o plano de recuperação pretendido.

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 de arquivos com log em um ponto no tempo a partir de um backup completo especificado.

Se pretender especificar um backup completo que deve ser usado para a 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, podes obter esses pontos de recuperação e acionar uma restauração para uma máquina existente 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, registado num cofre na região secundária emparelhada.
  • 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 do PowerShell com o parâmetro '-UseSecondaryRegion', o que irá retornar as horas de início e término de uma cadeia de logs contínua e ininterrupta para esse item de backup SQL da região secundária. O momento no tempo 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 pode restaurar a qualquer ponto no tempo entre a hora de início exibida e a hora de término. Os horários estão em UTC. Crie qualquer momento específico no PowerShell que esteja dentro do intervalo mostrado acima.

Buscar o servidor de destino na localizaçã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 no momento específico no tempo de registo 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 a configuração adequada

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 apenas de cópia são ideais para retenção de longo prazo, desde que não têm dependências de outros tipos de backup, como logs. Uma cópia de segurança completa é tratada como uma matriz para backups de log subsequentes e, portanto, a sua retenção está ligada à 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 de backup on-demand retorna um trabalho para 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 pretender obter a ID de Tarefa relevante, obtenha a lista de tarefas do serviço de Backup do Azure e acompanhe-a juntamente com os 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

Registar novamente as 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

Parar proteção

Reter dados

Se desejar interromper a proteção, você pode usar o cmdlet Disable-AzRecoveryServicesBackupProtection PowerShell. Isso interromperá os backups agendados, mas os dados que foram copiados até agora ficarão retidos permanentemente.

$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 poderás proteger as Bases de Dados noutro cofre. Use o cmdlet PowerShell Unregister-AzRecoveryServicesBackupContainer 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 Azure Backup

É 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 acompanhar o trabalho e seus detalhes.

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

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

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

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

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
  • Quaisquer DBs SQL padrão (master, model, msdb) em sql-server-1 - tipo de item protegível é SQLDatabase

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

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