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}