Share via


Restaurar bases de dados SQL numa VM do Azure com a CLI do Azure

\A CLI do Azure é utilizada para criar e gerir recursos do Azure a partir da Linha de Comandos ou através de scripts. Este artigo descreve como restaurar uma base de dados SQL com cópia de segurança numa VM do Azure com a CLI do Azure. Também pode efetuar estas ações com o portal do Azure.

Utilize o Azure Cloud Shell para executar comandos da CLI.

Neste artigo, vai aprender a:

  • Ver pontos de restauro de uma base de dados com cópia de segurança
  • Restaurar uma base de dados

Este artigo pressupõe que tem uma base de dados SQL em execução na VM do Azure que é criada uma cópia de segurança com Azure Backup. Se utilizou a cópia de segurança de uma base de dados SQL no Azure com a CLI para fazer uma cópia de segurança da base de dados SQL, está a utilizar os seguintes recursos:

  • Um grupo de recursos com o nome SQLResourceGroup.
  • Um cofre com o nome SQLVault.
  • Contentor protegido com o nome VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Base de dados/item de cópia de segurança com o nome sqldatabase;mssqlserver;master.
  • Recursos na westus região.

Nota

Veja a matriz de suporte da cópia de segurança do SQL para saber mais sobre as configurações e cenários suportados.

Ver pontos de restauro de uma base de dados com cópia de segurança

Para ver a lista de todos os pontos de recuperação de uma base de dados, utilize 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 é apresentada 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 cópia de segurança completa, diferencial e de registo.

Nota

Também pode ver os pontos de início e de fim de cada cadeia de cópia de segurança de registo não desbloqueada, com o comando az backup recoverypoint show-log-chain .

Pré-requisitos para restaurar uma base de dados

Certifique-se de que os seguintes pré-requisitos são cumpridos antes de restaurar uma base de dados:

  • Só pode restaurar a base de dados para uma instância do SQL na mesma região.
  • A instância de destino tem de ser registada no mesmo cofre que a origem.

Restaurar uma base de dados

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

  • Restaure para uma data ou hora específica (para a segunda) com cópias de segurança de registo. Azure Backup determina automaticamente as cópias de segurança completas e diferenciais adequadas e a cadeia de cópias de segurança de registo necessárias para restaurar com base na hora selecionada.
  • Restaure para uma cópia de segurança completa ou diferencial específica para restaurar para um ponto de recuperação específico.

Para restaurar uma base de dados, utilize o comando az restore-azurewl , que requer um objeto de configuração de recuperação como uma das entradas. Pode gerar este objeto com o comando az backup recoveryconfig show . O objeto de configuração de recuperação contém todos os detalhes para efetuar um restauro. Um deles é o modo de restauro – OriginalWorkloadRestore ou AlternateWorkloadRestore.

Nota

OriginalWorkloadRestore: restaura os dados para a mesma instância do SQL que a origem original. Esta opção substitui a base de dados original. AlternateWorkloadRestore: restaura a base de dados para uma localização alternativa e mantém a base de dados de origem original.

Restaurar para localização alternativa

Para restaurar uma base de dados para uma localização alternativa, utilize AlternateWorkloadRestore como o modo de restauro. Em seguida, tem de escolher o ponto de restauro, que pode ser um ponto anterior no tempo ou quaisquer pontos de restauro anteriores.

Vamos continuar a restaurar para um ponto de restauro anterior. Veja a lista de pontos de restauro da base de dados e escolha o ponto que pretende restaurar. Aqui, vamos utilizar o ponto de restauro com o nome 7660777527047692711.

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

  • --target-item-name: o nome a utilizar pela base de dados restaurada. Neste cenário, utilizámos o nome restored_database.
  • --target-server-name: o nome de um servidor SQL que está registado com êxito num cofre dos Serviços de Recuperação e permanece na mesma região que de acordo com a base de dados a restaurar. Aqui, está a restaurar a base de dados para o mesmo servidor SQL que protegeu, com o nome testSQLVM.
  • --target-server-type: para restaurar bases de dados SQL, tem de utilizar o 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 a base de dados, execute o comando az restore-azurewl . Para utilizar este comando, introduza a saída JSON acima guardada num ficheiro com o nome recoveryconfig.json.

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

O resultado é apresentado 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-lhe o nome da tarefa. Pode utilizar este nome de tarefa para controlar o estado da tarefa com o comando az backup job show .

Restaurar e substituir

Para restaurar para a localização original, utilize OriginalWorkloadRestore como o modo de restauro. Em seguida, tem de escolher o ponto de restauro, que pode ser um ponto anterior no tempo ou qualquer um dos pontos de restauro anteriores.

Por exemplo, vamos escolher o ponto anterior no tempo "28-11-2019-09:53:00" para o qual restaurar. Pode fornecer este ponto de restauro nos seguintes formatos: dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss. Para escolher um ponto anterior no tempo válido para restaurar, utilize o comando az backup recoverypoint show-log-chain , que lista os intervalos de cópias de segurança da cadeia de registos não desbloqueados.

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 a base de dados, execute o comando az restore-azurewl . Para utilizar este comando, introduza a saída JSON acima guardada num ficheiro com o nome recoveryconfig.json.

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

O resultado é apresentado 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-lhe o nome da tarefa. Pode utilizar este nome de tarefa para controlar o estado da tarefa com o comando az backup job show .

Restaurar para uma região secundária

Para restaurar uma base de dados para a região secundária, especifique um cofre de destino e um servidor localizados na região secundária, na configuração de restauro.

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": [],
}

Utilize esta configuração de recuperação no comando az restore-azurewl . Selecione o --use-secondary-region sinalizador para restaurar a base 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

O resultado é apresentado 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 cópia de segurança estejam disponíveis na região secundária é de 12 horas. Por conseguinte, quando ativar o CRR, o RPO para a região secundária é de 12 horas + duração da frequência do registo (que pode ser definido para um mínimo de 15 minutos).

Restaurar como ficheiros

Para restaurar os dados de cópia de segurança como ficheiros em vez de uma base de dados, utilize RestoreAsFiles como o modo de restauro. Em seguida, escolha o ponto de restauro, que pode ser um ponto anterior no tempo ou quaisquer pontos de restauro anteriores. Assim que os ficheiros forem despejados para um caminho especificado, pode levar estes ficheiros para qualquer computador SQL onde pretende restaurá-los como uma base de dados. Uma vez que pode mover estes ficheiros para qualquer computador, agora pode restaurar os dados entre subscrições e regiões.

Aqui, selecione o ponto anterior no tempo 28-11-2019-09:53:00 para restaurar e a localização para capturar ficheiros de cópia de segurança como /home/sql/restoreasfiles no mesmo servidor SQL. Pode fornecer este ponto de restauro num dos seguintes formatos: dd-mm-yyyy ou dd-mm-yyyyy-hh:mm:ss. Para escolher um ponto anterior no tempo válido para restaurar, utilize o comando az backup recoverypoint show-log-chain , que lista os intervalos de cópias de segurança da cadeia de registos não desbloqueados.

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

  • --target-container-name: o nome de um servidor SQL registado com êxito num cofre dos Serviços de Recuperação e presente na mesma região que de acordo com a base de dados a restaurar. Vamos restaurar a base de dados como ficheiros para o mesmo servidor SQL que protegeu, com o nome hxehost.
  • --rp-name: para um restauro para um ponto anterior no tempo, o nome do ponto de restauro é 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 de 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 a base de dados à medida que os ficheiros executam o comando az restore-azurewl . Para utilizar este comando, introduza a saída JSON acima que é guardada num ficheiro com o nome recoveryconfig.json.

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

O resultado é apresentado 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-lhe o nome da tarefa. Pode utilizar este nome de tarefa para controlar o estado da tarefa com o comando az backup job show .

Nota

Se não quiser restaurar toda a cadeia, mas apenas um subconjunto de ficheiros, siga os passos conforme documentado aqui.

Restauro entre Subscrições

Com o Restauro Entre Subscrições (CSR), tem a flexibilidade de restaurar para qualquer subscrição e qualquer cofre no seu inquilino se estiverem disponíveis permissões de restauro. Por predefinição, o CSR está ativado em todos os cofres dos Serviços de Recuperação (cofres existentes e recém-criados).

Nota

  • Pode acionar o Restauro Entre Subscrições a partir do cofre dos Serviços de Recuperação.
  • A CSR é suportada apenas para cópias de segurança baseadas em transmissão em fluxo e não é suportada para cópias de segurança baseadas em instantâneos.
  • O Restauro Entre Regiões (CRR) com CSR não é suportado.
az backup vault create

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

az backup recoveryconfig show

Adicione o parâmetro --target-subscription-id que lhe permite fornecer a subscrição de destino como entrada enquanto aciona o Restauro Entre Subscrições para origens 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}

Passos seguintes