Compartilhar via


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 por meio da linha de comando ou por meio de scripts. Este artigo descreve como restaurar um banco de dados SQL com 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 em uma VM do Azure cujo backup tenha sido feito com 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, você estará usando os seguintes recursos:

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

Observação

Confira a Matriz de suporte ao backup de SQL para saber mais sobre as configurações e os cenários com suporte.

Exibir pontos de restauração de um banco de dados copiado em backup

Para ver 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: um para o backup completo, um para o diferencial e um para o de log.

Observação

Veja também 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

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

  • Você pode restaurar o banco de dados somente em uma instância SQL que esteja na mesma região.
  • A instância de destino precisa ser registrada no mesmo cofre que a origem.

Restaurar um banco de dados

O Backup do Azure pode restaurar bancos de dados SQL em execução em VMs do Azure como:

  • Restauração em uma data ou uma hora específica (com precisão de segundos) usando backups de log. O Backup do Azure determina automaticamente os backups diferenciais completos apropriados e a cadeia de backups de log necessários para a restauração com base na hora selecionada.
  • Restauração em um backup completo ou diferencial específico para restauração em um ponto de recuperação específico.

Para restaurar um banco de dados, use o comando az restore restore-azurewl, que exige 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.

Observação

OriginalWorkloadRestore: restaura os dados para a mesma instância do SQL da fonte original. Essa opção substitui o banco de dados original. AlternateWorkloadRestore: restaura o banco de dados em uma localização alternativa e mantenha o banco de dados de origem.

Restauração em uma localização alternativa

Para restaurar um banco de dados em uma localização alternativa, use AlternateWorkloadRestore como o modo de restauração. Em seguida, você precisará escolher o ponto de restauração, que pode ser um ponto anterior no tempo ou um dos pontos de restauração anteriores.

Vamos continuar a restaurar para um ponto de restauração anterior. Veja a lista de pontos de restauração do banco de dados e escolha o ponto que deseja restaurar. Aqui, usamos o ponto de restauração com o nome 7660777527047692711.

Com o nome do ponto de restauração acima e o modo de restauração, criamos 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 registrado com êxito em um cofre dos Serviços de Recuperação e que reside na mesma região do 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, use 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, entre na saída JSON acima que está 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 é exibida 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 fazer a restauração na localização original, use OriginalWorkloadRestore como o modo de restauração. Em seguida, você precisará escolher o ponto de restauração, que pode ser um ponto anterior no tempo ou um dos pontos de restauração anteriores.

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

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, entre na saída JSON acima que está 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 é exibida 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.

Restauração 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 é exibido 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 esta configuração de recuperação no comando az restore restore-azurew. Selecione o sinalizador --use-secondary-region 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 é exibida 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

Observação

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

Restaurar como arquivos

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 ponto anterior no tempo ou um dos pontos de restauração anteriores. Assim que os arquivos forem despejados em um caminho especificado, você poderá levá-los a qualquer computador SQL onde você deseja restaurá-los como um banco de dados. Como você pode mover esses arquivos para qualquer computador, agora é possível restaurar os dados entre assinaturas e regiões.

Aqui, escolha o ponto anterior no tempo 28-11-2019-09:53:00 para o qual restaurar e a localização 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-aaaa-hh:mm:ss. Para escolher um ponto no tempo válido para a restauração, use o comando az backup recoverypoint show-log-chain, que lista os intervalos de backups da cadeia de logs ininterrupta.

Com o nome do ponto de restauração acima e o modo de restauração, criamos 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 que reside na mesma região do 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 de um ponto no tempo, 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 é 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, entre na saída JSON acima que está 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 é exibida 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.

Observação

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

Restauração Entre Assinaturas

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

Observação

  • Você pode acionar a Restauração Entre Assinaturas a partir do cofre dos Serviços de Recuperação.
  • O CSR tem suporte apenas para backup baseado em streaming e não tem suporte para backup baseado em instantâneo.
  • Não há suporte para Restauração Entre Regiões (CRR) com CSR.
az backup vault create

Adicione o parâmetro cross-subscription-restore-state, que permite que você configure o estado da CSR do cofre durante a criação e atualização do cofre.

az backup recoveryconfig show

Adicione o parâmetro --target-subscription-id, que permite que você forneça a assinatura visada como uma entrada ao acionar a Restauração de Várias Assinaturas para recursos de dados do SQL ou do 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óxima etapa