Share via


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

\Interfaccia della riga di comando di Azure viene usata per creare e gestire le risorse di Azure dalla riga di comando o tramite script. Questo articolo descrive come ripristinare un database SQL di cui è stato eseguito il backup in una macchina virtuale di Azure usando l'interfaccia della riga di comando di Azure. È anche possibile eseguire queste azioni usando il portale di Azure.

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

In questo articolo si apprenderà come:

  • Visualizzare i punti di ripristino per un database sottoposto a backup
  • Ripristinare un database

Questo articolo presuppone che sia in esecuzione un database SQL nella macchina virtuale di Azure di cui viene eseguito il backup usando Backup di Azure. Se è stato usato Eseguire il backup di un database SQL in Azure usando l'interfaccia della riga di comando per eseguire il backup del database SQL, si usano le risorse seguenti:

  • Un 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 per il backup 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:

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

L'elenco dei punti di ripristino viene visualizzato come segue:

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: ognuno per il backup completo, differenziale e del log.

Nota

È anche possibile visualizzare i punti di inizio e di fine di ogni catena di backup del log non registrato, 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 DI SQL nella stessa area.
  • L'istanza di destinazione deve essere registrata con lo stesso insieme di credenziali dell'origine.

Ripristinare un database

Backup di Azure possibile ripristinare i database SQL in esecuzione nelle macchine virtuali di Azure come:

  • 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 config di ripristino come uno degli input. È possibile generare questo oggetto usando il comando az backup recoveryconfig show . L'oggetto config di ripristino contiene tutti i dettagli per eseguire un ripristino. Uno di essi è la modalità di ripristino : OriginalWorkloadRestore o AlternateWorkloadRestore.

Nota

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

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 potrebbe essere un punto nel tempo precedente o eventuali punti di ripristino precedenti.

Procedere con il ripristino a un punto di ripristino precedente. Visualizzare l'elenco dei punti di ripristino per il database e scegliere il punto da ripristinare. In questo caso si userà il punto di ripristino con il nome 7660777527047692711.

Con il nome del punto di ripristino precedente e la modalità di ripristino, creare l'oggetto config di ripristino usando il comando az backup recoveryconfig show . Controllare i parametri rimanenti in questo comando:

  • --target-item-name: nome da utilizzare 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 rimane la stessa area in base al database da ripristinare. In questo caso si ripristina 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 config di ripristino visualizzato come:

{
  "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 momento, 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 di processo 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 OriginalWorkloadRestore come modalità di ripristino. È quindi necessario scegliere il punto di ripristino, che potrebbe essere un punto nel tempo precedente o uno dei punti di ripristino precedenti.

Ad esempio, scegliamo il punto nel tempo precedente "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-a-hh:mm:ss. Per scegliere un punto nel tempo valido da ripristinare, usare il comando az backup recoverypoint show-log-chain , che elenca gli intervalli di backup della catena di log non registrati.

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 config di ripristino visualizzato come:

{
  "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 momento, 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 di processo 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, specificare un insieme di credenziali di destinazione e un server che si trova nell'area secondaria, nella configurazione di ripristino.

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 visualizzato come:

 {
  "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 --use-secondary-region flag 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

Il valore 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 invece di un database, usare RestoreAsFiles come modalità di ripristino. Scegliere quindi il punto di ripristino, che può essere un punto nel tempo precedente o qualsiasi punto di ripristino precedente. Dopo aver eseguito il dump dei file in un percorso specificato, è possibile eseguire il dump di questi file in qualsiasi computer SQL in cui si desidera 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, scegliere il punto nel tempo 28-11-2019-09:53:00 precedente da ripristinare e il percorso in cui eseguire il dump dei file di backup nello /home/sql/restoreasfiles stesso server SQL. È possibile specificare questo punto di ripristino in uno dei formati seguenti: gg-mm-a o gg-mm-a-hh:mm:ss. Per scegliere un punto nel tempo valido da ripristinare, usare il comando az backup recoverypoint show-log-chain , che elenca gli intervalli di backup della catena di log non registrati.

Con il nome del punto di ripristino precedente e la modalità di ripristino, creare l'oggetto config di ripristino usando il comando az backup recoveryconfig show . Controllare ognuno dei 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 presente nella stessa area in base al database da ripristinare. Ripristinare 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 js un oggetto config di ripristino visualizzato come:

{
  "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 momento, 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 di processo 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 subset di file, seguire la procedura descritta qui.

Ripristino tra sottoscrizioni

Con il ripristino tra sottoscrizioni è possibile ripristinare qualsiasi sottoscrizione e qualsiasi insieme di credenziali nel tenant, se sono disponibili autorizzazioni di ripristino. Per impostazione predefinita, csr è 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.
  • Csr è supportato solo per il backup basato su streaming e non è supportato per il backup basato su snapshot.
  • Il ripristino tra aree (CRR) con CSR non è supportato.
az backup vault create

Aggiungere il parametro cross-subscription-restore-state che consente di impostare lo stato CSR 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}

Passaggi successivi