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
- Saiba mais sobre os cofres dos Serviços de Recuperação.
- Leia sobre os recursos de backup de bancos de dados SQL em VMs do Azure.
- Examine a hierarquia de objetos do PowerShell para os Serviços de Recuperação.
Hierarquia de objetos dos Serviços de Recuperação
A hierarquia de objetos está resumida no diagrama a seguir.
Examine a referência do cmdletAz.RecoveryServices na biblioteca do Azure.
Configurar e instalar
Configure o PowerShell conforme a seguir:
Baixe a versão mais recente do Azure PowerShell. A versão 1.5.0 é a mínima necessária.
Localize os cmdlets do PowerShell do Backup do Azure com este comando:
Get-Command *azrecoveryservices*
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.
Entre em sua conta do Azure usando Connect-AzAccount.
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.
Associe a assinatura que deseja usar com a conta porque uma conta pode ter várias assinaturas.
Select-AzSubscription -SubscriptionName $SubscriptionName
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"
Verifique se os provedores foram registrados com êxito:
Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
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.
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"
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"
Especifique o tipo de redundância a ser usado para o armazenamento do cofre.
- Você pode usar o armazenamento com redundância local, armazenamento com redundância geográfica ou armazenamento com redundância de zona.
- O exemplo a seguir define a opção
-BackupStorageRedundancy
para o cmd Set-AzRecoveryServicesBackupProperty para otestvault
definido comoGeoRedundant
.
$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:
- Uma política de backup está associada a pelo menos uma política de retenção. Uma política de retenção define por quanto tempo um ponto de recuperação é mantido até ser excluído.
- Exiba a retenção de política de backup padrão usando Get-AzRecoveryServicesBackupRetentionPolicyObject.
- Exiba o agendamento da política de backup padrão usando Get-AzRecoveryServicesBackupSchedulePolicyObject.
- Use o cmdlet New-AzRecoveryServicesBackupProtectionPolicy para criar uma nova política de backup. Insira os objetos da política de retenção e o agendamento.
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.