Condividi tramite


Ripristinare i database SQL in una macchina virtuale di Azure tramite l'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure consente di creare e gestire le risorse di Azure dalla riga di comando o tramite script. Questo articolo spiega come ripristinare un database SQL sottoposto a backup in una macchina virtuale di Azure tramite l'interfaccia della riga di comando di Azure. È anche possibile eseguire queste procedure tramite il portale di Azure.

Usare Azure Cloud Shell per eseguire i comandi dell'interfaccia della riga di comando.

Questo articolo presuppone che sia disponibile un database SQL in esecuzione in una macchina virtuale di Azure di cui viene eseguito il backup con Backup di Azure. Se è stata usata l'esercitazione Eseguire il backup di un database SQL in Azure tramite l'interfaccia della riga di comando per eseguire il backup del database SQL, sono in uso le risorse seguenti:

  • Gruppo di risorse denominato SQLResourceGroup.
  • Insieme di credenziali denominato SQLVault.
  • Contenitore protetto denominato VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Database/elemento di cui è stato eseguito il backup denominato sqldatabase;mssqlserver;master.
  • Risorse nell'area westus.

Nota

Per altre informazioni sulle configurazioni e sugli scenari supportati, vedere la matrice di supporto del backup di SQL.

Visualizzare i punti di ripristino per un database sottoposto a backup

Per visualizzare l'elenco di tutti i punti di ripristino per un database, usare il comando az backup recoverypoint list come indicato di seguito:

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

Viene visualizzato un elenco dei punti di recupero simile al seguente:

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

L'elenco precedente contiene tre punti di ripristino: uno per il backup completo, uno per il backup differenziale e uno per il backup del log.

Nota

È anche possibile visualizzare i punti di inizio e di fine di ogni catena di backup del log non interrotta usando il comando az backup recoverypoint show-log-chain.

Prerequisiti per il ripristino di un database

Prima di ripristinare un database, verificare che siano soddisfatti i prerequisiti seguenti:

  • È possibile ripristinare il database solo in un'istanza SQL che risiede nella stessa area.
  • L'istanza di destinazione deve essere registrata con lo stesso insieme di credenziali dell'origine.

Ripristinare un database

Backup di Azure può ripristinare database SQL in esecuzione nelle macchine virtuali di Azure seguendo questa procedura:

  • Ripristinare una data specifica o un'ora (al secondo), usando i backup del log. In base ai tempi di ripristino specificati, Backup di Azure determina automaticamente i backup completi, differenziali e la catena di backup del log necessari per ripristinare in base all'ora selezionata.
  • Ripristinare un backup completo o differenziale specifico per il ripristino a un punto di ripristino specifico.

Per ripristinare un database, usare il comando az restore restore-azurewl, che richiede un oggetto configurazione di ripristino come uno degli input. È possibile generare questo oggetto usando il comando az backup recoveryconfig show. L'oggetto configurazione di ripristino contiene tutti i dettagli per eseguire un ripristino. Uno di essi è la modalità di ripristino, ovvero OriginalWorkloadRestore o AlternateWorkloadRestore.

Nota

OriginalWorkloadRestore: consente di ripristinare i dati nella stessa istanza di SQL dell'origine. Questa opzione sovrascrive il database originale. AlternateWorkloadRestore: consente di ripristinare il database in un percorso alternativo conservando il database di origine.

Ripristinare in un percorso alternativo

Per ripristinare un database in un percorso alternativo, usare AlternateWorkloadRestore come modalità di ripristino. È quindi necessario scegliere il punto di ripristino, che può corrispondere a un punto precedente specifico nel tempo o a uno dei punti di ripristino precedenti.

In questo caso verrà ripristinato un punto di ripristino precedente. Visualizzare l'elenco dei punti di ripristino per il database e scegliere il punto in cui si desidera eseguire il ripristino. In questo caso si userà il punto di ripristino con il nome 7660777527047692711.

Usando il nome del punto di ripristino e la modalità di ripristino precedenti, verrà creato l'oggetto configurazione di ripristino usando il comando az backup recoveryconfig show. Controllare i parametri rimanenti in questo comando:

  • --target-item-name: nome che deve essere usato dal database ripristinato. In questo scenario, è stato usato il nome restored_database.
  • --target-server-name: nome di un server SQL registrato correttamente in un insieme di credenziali di Servizi di ripristino e che risiede nella stessa area del database da ripristinare. In questo caso si sta ripristinando il database nello stesso server SQL protetto, denominato testSQLVM.
  • --target-server-type: per il ripristino dei database SQL, è necessario usare 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

La risposta alla query precedente è un oggetto configurazione di ripristino simile al seguente:

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

A questo punto, per ripristinare il database, eseguire il comando az restore restore-azurewl. Per usare questo comando, immettere l'output JSON precedente salvato in un file denominato recoveryconfig.json.

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

L'output viene visualizzato come segue:

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

La risposta fornisce il nome del processo. È possibile usare questo nome per tenere traccia dello stato del processo usando il comando az backup job show.

Ripristinare e sovrascrivere

Per eseguire il ripristino nel percorso originale, usare la modalità di ripristino OriginalWorkloadRestore. È quindi necessario scegliere il punto di ripristino, che può corrispondere a un punto precedente specifico nel tempo o a uno dei punti di ripristino precedenti.

Come esempio, in questo caso viene scelto il punto precedente nel tempo "28-11-2019-09:53:00" in cui eseguire il ripristino. È possibile specificare questo punto di ripristino nei formati seguenti: gg-mm-aaaa, gg-mm-aaaa-hh: mm:ss. Per scegliere un ripristino temporizzato valido, usare il comando az backup recoverypoint show-log-chain, che elenca gli intervalli di backup della catena di log non interrotti.

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

La risposta alla query precedente è un oggetto configurazione di ripristino simile al seguente:

{
  "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"
}

A questo punto, per ripristinare il database, eseguire il comando az restore restore-azurewl. Per usare questo comando, immettere l'output JSON precedente salvato in un file denominato recoveryconfig.json.

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

L'output viene visualizzato come segue:

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

La risposta fornisce il nome del processo. È possibile usare questo nome per tenere traccia dello stato del processo usando il comando az backup job show.

Eseguire il ripristino in un'area secondaria

Per ripristinare un database nell'area secondaria, nella configurazione di ripristino specificare un insieme di credenziali di destinazione e un server che si trova nell'area secondaria.

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

La risposta è un oggetto di configurazione di ripristino simile al seguente:

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

Usare questa configurazione di ripristino nel comando az restore restore-azurewl. Selezionare il flag --use-secondary-region per ripristinare il database nell'area secondaria.

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

L'output viene visualizzato come segue:

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

L'RPO per i dati di backup da rendere disponibili nell'area secondaria è di 12 ore. Pertanto, quando si attiva CRR, l'RPO per l'area secondaria è di 12 ore e la durata della frequenza del log (che può essere impostata su un minimo di 15 minuti).

Ripristinare come file

Per ripristinare i dati di backup come file anziché come database, usare la modalità di ripristino RestoreAsFiles. Scegliere quindi il punto di ripristino, che può corrispondere a un punto precedente specifico nel tempo o a uno dei punti di ripristino precedenti. Dopo aver eseguito il dump dei file in un percorso specificato, è possibile spostare questi file in qualsiasi computer SQL in cui si intende ripristinarli come database. Dal momento che è possibile spostare questi file in qualsiasi computer, è ora possibile ripristinare i dati tra sottoscrizioni e aree diverse.

In questo caso si sceglieranno il punto precedente nel tempo 28-11-2019-09:53:00 per eseguire il ripristino e il percorso /home/sql/restoreasfiles in cui eseguire il dump dei file di backup nello stesso server SQL. È possibile specificare questo punto di ripristino in uno dei formati seguenti: gg-mm-aaaa o gg-mm-aaaa-hh: mm:ss. Per scegliere un ripristino temporizzato valido, usare il comando az backup recoverypoint show-log-chain, che elenca gli intervalli di backup della catena di log non interrotti.

Usando il nome del punto di ripristino e la modalità di ripristino precedenti, verrà creato l'oggetto configurazione di ripristino usando il comando az backup recoveryconfig show. Controllare i parametri rimanenti in questo comando:

  • --target-container-name: nome di un server SQL registrato correttamente in un insieme di credenziali di Servizi di ripristino e che risiede nella stessa area del database da ripristinare. In questo caso si ripristina il database come file nello stesso server SQL protetto, denominato hxehost.
  • --rp-name: per un ripristino temporizzato il nome del punto di ripristino è 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

La risposta alla query precedente è un oggetto configurazione di ripristino simile al seguente:

{
  "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"
}

A questo punto, per ripristinare il database come file, eseguire il comando az restore restore-azurewl. Per usare questo comando, immettere l'output JSON precedente salvato in un file denominato recoveryconfig.json.

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

L'output viene visualizzato come segue:

{
  "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"
}

La risposta fornisce il nome del processo. È possibile usare questo nome per tenere traccia dello stato del processo usando il comando az backup job show.

Nota

Se non si vuole ripristinare l'intera catena, ma solo un sottoinsieme di file, seguire la procedura descritta qui.

Ripristino tra sottoscrizioni

Con il ripristino tra sottoscrizioni è possibile eseguire il ripristino in qualsiasi sottoscrizione e in qualsiasi insieme di credenziali nel tenant, se sono disponibili le autorizzazioni di ripristino. Per impostazione predefinita, il ripristino tra sottoscrizioni è abilitato in tutti gli insiemi di credenziali di Servizi di ripristino (insiemi di credenziali esistenti e appena creati).

Nota

  • È possibile attivare il ripristino tra sottoscrizioni dall'insieme di credenziali di Servizi di ripristino.
  • Il ripristino tra aree è supportato solo per i backup basati su streaming e non è supportato per i backup basati su snapshot.
  • Il ripristino tra aree combinato con il ripristino tra sottoscrizioni non è supportato.
az backup vault create

Aggiungere il parametro cross-subscription-restore-state che consente di impostare lo stato del ripristino tra sottoscrizioni dell'insieme di credenziali durante la creazione e l'aggiornamento dell'insieme di credenziali.

az backup recoveryconfig show

Aggiungere il parametro --target-subscription-id che consente di specificare la sottoscrizione di destinazione come input durante l'attivazione del ripristino tra sottoscrizioni per le origini dati SQL o HANA.

Esempio:

   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}

Passaggio successivo