Restaurar bancos de dados SQL em uma VM do Azure usando a CLI do Azure

A CLI do Azure é usada para criar e gerenciar recursos do Azure a partir da Linha de Comando ou por meio de scripts. Este artigo descreve como restaurar um banco de dados SQL de backup em uma VM do Azure usando a CLI do Azure. Você também pode executar essas ações usando o portal do Azure.

Use o Azure Cloud Shell para executar comandos da CLI.

Este artigo pressupõe que você tenha um banco de dados SQL em execução na VM do Azure cujo backup é feito usando o Backup do Azure. Se você usou Fazer backup de um banco de dados SQL no Azure usando a CLI para fazer backup do banco de dados SQL, está usando os seguintes recursos:

  • Um grupo de recursos chamado SQLResourceGroup.
  • Um cofre chamado SQLVault.
  • Contêiner protegido chamado VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Banco de dados/item de backup nomeado sqldatabase;mssqlserver;master.
  • Recursos na westus região.

Nota

Consulte a matriz de suporte de backup SQL para saber mais sobre as configurações e cenários suportados.

Exibir pontos de restauração para um banco de dados de backup

Para exibir a lista de todos os pontos de recuperação de um banco de dados, use o comando az backup recoverypoint list como:

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

A lista de pontos de recuperação aparece como:

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

A lista acima contém três pontos de recuperação: cada um para backup completo, diferencial e de log.

Nota

Você também pode visualizar os pontos inicial e final de cada cadeia de backup de log ininterrupta, usando o comando az backup recoverypoint show-log-chain .

Pré-requisitos para restaurar um banco de dados

Certifique-se de que os seguintes pré-requisitos sejam atendidos antes de restaurar um banco de dados:

  • Você pode restaurar o banco de dados somente para uma instância SQL na mesma região.
  • A instância de destino deve ser registrada com o mesmo vault que a origem.

Restaurar uma base de dados

O Backup do Azure pode restaurar bancos de dados SQL que estão sendo executados em VMs do Azure como:

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

Para restaurar um banco de dados, use o comando az restore restore-azurewl , que requer um objeto de configuração de recuperação como uma das entradas. Você pode gerar esse objeto usando o comando az backup recoveryconfig show . O objeto de configuração de recuperação contém todos os detalhes para executar uma restauração. Um deles é o modo de restauração – OriginalWorkloadRestore ou AlternateWorkloadRestore.

Nota

OriginalWorkloadRestore: Restaura dados para a mesma instância SQL que a fonte original. Esta opção substitui o banco de dados original. AlternateWorkloadRestore: restaura o banco de dados para um local alternativo e mantém o banco de dados de origem original.

Restaurar para local alternativo

Para restaurar um banco de dados para um local alternativo, use AlternateWorkloadRestore como o modo de restauração. Em seguida, você deve escolher o ponto de restauração, que pode ser um point-in-time anterior ou quaisquer pontos de restauração anteriores.

Vamos prosseguir para restaurar para um ponto de restauração anterior. Exiba a lista de pontos de restauração para o banco de dados e escolha o ponto que deseja restaurar. Aqui, vamos usar o ponto de restauração com o nome 7660777527047692711.

Com o nome do ponto de restauração acima e o modo de restauração, crie o objeto de configuração de recuperação usando o comando az backup recoveryconfig show . Verifique os parâmetros restantes neste comando:

  • --target-item-name: O nome a ser usado pelo banco de dados restaurado. Nesse cenário, usamos o nome restored_database.
  • --target-server-name: o nome de um servidor SQL que é registrado com êxito em um cofre dos Serviços de Recuperação e permanece na mesma região de acordo com o banco de dados a ser restaurado. Aqui, você está restaurando o banco de dados para o mesmo servidor SQL que você protegeu, chamado testSQLVM.
  • --target-server-type: Para a restauração de bancos de dados SQL, você deve usar SQLInstance.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

A resposta à consulta acima é um objeto de configuração de recuperação que aparece como:

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

Agora, para restaurar o banco de dados, execute o comando az restore restore-azurewl . Para usar esse comando, insira a saída JSON acima salva em um arquivo chamado recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

A saída aparece como:

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

A resposta fornece o nome do trabalho. Você pode usar esse nome de trabalho para acompanhar o status do trabalho usando o comando az backup job show .

Restaurar e substituir

Para restaurar para o local original, use OriginalWorkloadRestore como o modo de restauração. Em seguida, você deve escolher o ponto de restauração, que pode ser um point-in-time anterior ou qualquer um dos pontos de restauração anteriores.

Como exemplo, vamos escolher o point-in-time anterior "28-11-2019-09:53:00" para restaurar. Você pode fornecer esse ponto de restauração nos seguintes formatos: dd-mm-aa, dd-mm-aa-hh:mm:ss. Para escolher um point-in-time válido para restaurar, use o comando az backup recoverypoint show-log-chain , que lista os intervalos de backups ininterruptos da cadeia de logs.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

A resposta à consulta acima é um objeto de configuração de recuperação que aparece como:

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

Agora, para restaurar o banco de dados, execute o comando az restore restore-azurewl . Para usar esse comando, insira a saída JSON acima salva em um arquivo chamado recoveryconfig.json.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

A saída aparece como:

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

A resposta fornece o nome do trabalho. Você pode usar esse nome de trabalho para acompanhar o status do trabalho usando o comando az backup job show .

Restaurar para uma região secundária

Para restaurar um banco de dados para a região secundária, especifique um cofre de destino e um servidor localizado na região secundária, na configuração de restauração.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

A resposta é um objeto de configuração de recuperação que aparece como:

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

Use essa configuração de recuperação no comando az restore restore-azurewl . Selecione o --use-secondary-region sinalizador para restaurar o banco de dados para a região secundária.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

A saída aparece como:

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Nota

O RPO para que os dados de backup estejam disponíveis na região secundária é de 12 horas. Portanto, quando você ativa a CRR, o RPO para a região secundária é de 12 horas + duração da frequência de log (que pode ser definida para um mínimo de 15 minutos).

Restaurar como ficheiros

Para restaurar os dados de backup como arquivos em vez de um banco de dados, use RestoreAsFiles como o modo de restauração. Em seguida, escolha o ponto de restauração, que pode ser um point-in-time anterior ou qualquer ponto de restauração anterior. Depois que os arquivos são despejados para um caminho especificado, você pode levar esses arquivos para qualquer máquina SQL onde você deseja restaurá-los como um banco de dados. Como você pode mover esses arquivos para qualquer máquina, agora pode restaurar os dados entre assinaturas e regiões.

Aqui, escolha o point-in-time 28-11-2019-09:53:00 anterior para restaurar e o local para despejar arquivos de backup como /home/sql/restoreasfiles no mesmo servidor SQL. Você pode fornecer esse ponto de restauração em um dos seguintes formatos: dd-mm-aaaa ou dd-mm-aa-hh:mm:ss. Para escolher um point-in-time válido para restaurar, use o comando az backup recoverypoint show-log-chain , que lista os intervalos de backups ininterruptos da cadeia de logs.

Com o nome do ponto de restauração acima e o modo de restauração, crie o objeto de configuração de recuperação usando o comando az backup recoveryconfig show . Verifique cada um dos parâmetros restantes neste comando:

  • --target-container-name: o nome de um servidor SQL registrado com êxito em um cofre dos Serviços de Recuperação e presente na mesma região de acordo com o banco de dados a ser restaurado. Vamos restaurar o banco de dados como arquivos para o mesmo servidor SQL que você protegeu, chamado hxehost.
  • --rp-name: Para uma restauração point-in-time, o nome do ponto de restauração é DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

A resposta à consulta acima js um objeto de configuração de recuperação que aparece como:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

Agora, para restaurar o banco de dados como arquivos, execute o comando az restore restore-azurewl . Para usar esse comando, insira a saída JSON acima salva em um arquivo chamado recoveryconfig.json.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

A saída aparece como:

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

A resposta fornece o nome do trabalho. Você pode usar esse nome de trabalho para acompanhar o status do trabalho usando o comando az backup job show .

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 assinatura cruzada

Com o Cross Subscription Restore (CSR), você tem a flexibilidade de restaurar para qualquer assinatura e qualquer cofre sob seu locatário se as permissões de restauração estiverem disponíveis. Por padrão, o CSR está habilitado em todos os cofres dos Serviços de Recuperação (cofres existentes e recém-criados).

Nota

  • Você pode acionar a restauração entre assinaturas a partir do cofre dos Serviços de Recuperação.
  • O CSR é suportado apenas para backup baseado em streaming e não é suportado para backup baseado em instantâneo.
  • Não há suporte para CRR (Cross Regional Restore) com CSR.
az backup vault create

Adicione o parâmetro cross-subscription-restore-state que permite definir o estado CSR do vault durante a criação e atualização do vault.

az backup recoveryconfig show

Adicione o parâmetro --target-subscription-id que permite fornecer a assinatura de destino como entrada ao acionar a restauração entre assinaturas para fontes de dados SQL ou HANA.

Exemplo:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

Próximo passo