Gestire i database SQL in una macchina virtuale di Azure usando 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 descrive come gestire 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.

Annotazioni

Se hai usato Esegui il backup di un database SQL in Azure utilizzando la CLI per eseguire il backup del tuo database SQL, allora stai usando le seguenti risorse:

  • Un gruppo di risorse denominato SQLResourceGroup
  • Una cassaforte denominata SQLVault
  • Contenitore protetto denominato VMAppContainer;Calcolo;SQLResourceGroup;testSQLVM
  • Database/elemento di cui è stato eseguito il backup denominato sqldatabase; mssqlserver; padrone
  • Risorse nell'area westus2

L'interfaccia della riga di comando di Azure semplifica il processo di gestione di un database SQL in esecuzione in una macchina virtuale di Azure sottoposta a backup con Backup di Azure. Le sezioni seguenti descrivono ognuna delle operazioni di gestione.

Per visualizzare gli scenari di backup e ripristino attualmente supportati, vedere la matrice di supporto. Per domande comuni, vedere le domande frequenti.

Monitorare i processi di backup e ripristino

Usare il comando az backup job list per monitorare i processi completati o attualmente in esecuzione (backup o ripristino). L'interfaccia della riga di comando consente anche di sospendere un processo in esecuzione o attendere il completamento di un processo.

az backup job list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --output table

L'output viene visualizzato come segue:

Name                                  Operation              Status      Item Name       			Start Time UTC
------------------------------------  ---------------        ---------   ----------      			-------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup        Completed   master [testSQLVM]         2019-12-03T03:09:210831+00:00  
ccdb4dce-8b15-47c5-8c46-b0985352238f  Backup (Full)          Completed   master [testSQLVM]   		2019-12-01T10:30:58.867489+00:00
4980af91-1090-49a6-ab96-13bc905a5282  Backup (Differential)  Completed   master [testSQLVM]			2019-12-01T10:36:00.563909+00:00
F7c68818-039f-4a0f-8d73-e0747e68a813  Restore (Log)          Completed   master [testSQLVM]			2019-12-03T05:44:51.081607+00:00

Modificare un criterio

Per modificare i criteri sottostanti la configurazione del backup SQL, usare il comando az backup policy set . Il parametro name in questo comando fa riferimento all'elemento di backup di cui si desidera modificare i criteri. In questo caso sostituire i criteri del database SQL sqldatabase; mssqlserver; master con un nuovo criterio newSQLPolicy. È possibile creare nuovi criteri usando il comando az backup policy create .

az backup item set-policy --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name newSQLPolicy \
    --name sqldatabase;mssqlserver;master 

L'output viene visualizzato come segue:

Name                                  Operation        Status     Item Name    Backup Management Type    Start Time UTC                    Duration
------------------------------------  ---------------  ---------  -----------  ------------------------  --------------------------------  --------------
ba350996-99ea-46b1-aae2-e2096c1e28cd  ConfigureBackup  Completed  master       AzureWorkload             2022-06-22T08:24:03.958001+00:00  0:01:12.435765

Creare un criterio di backup differenziale

Per creare un criterio di backup differenziale, usare il comando az backup policy create con i parametri seguenti:

  • --backup-management-type: carico di lavoro di Azure.
  • --workload-type: Banca dati SQL.
  • --name: nome della politica.
  • --policy: file JSON con i dettagli appropriati per la pianificazione e la conservazione.
  • --resource-group: gruppo di risorse del vault.
  • --vault-name: nome dell'insieme di credenziali/

Esempio:

az backup policy create --resource-group SQLResourceGroup --vault-name SQLVault --name SQLPolicy --backup-management-type AzureWorkload --policy SQLPolicy.json --workload-type SQLDataBase

Esempio JSON (SQLPolicy.json):

  {"eTag": null,
  "id": "/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupPolicies/SQLPolicy",
  "location": null,
  "name": "sqlpolicy",
  "properties": {
    "backupManagementType": "AzureWorkload",
    "workLoadType": "SQLDataBase",
    "settings": {
      "timeZone": "UTC",
      "issqlcompression": false,
      "isCompression": false
    },
    "subProtectionPolicy": [
      {
        "policyType": "Full",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Sunday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T19:30:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "LongTermRetentionPolicy",
          "weeklySchedule": {
            "daysOfTheWeek": [
              "Sunday"
            ],
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 104,
              "durationType": "Weeks"
            }
          },
          "monthlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 60,
              "durationType": "Months"
            }
          },
          "yearlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "monthsOfYear": [
              "January"
            ],
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 10,
              "durationType": "Years"
            }
          }
        }
      },
      {
        "policyType": "Differential",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T02:00:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 30,
            "durationType": "Days"
          }
        }
      },
      {
        "policyType": "Log",
        "schedulePolicy": {
          "schedulePolicyType": "LogSchedulePolicy",
          "scheduleFrequencyInMins": 120
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 15,
            "durationType": "Days"
          }
        }
      }
    ],
    "protectedItemsCount": 0
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupPolicies"
} 

Dopo aver creato correttamente i criteri, l'output del comando mostra il codice JSON dei criteri passato come parametro durante l'esecuzione del comando.

È possibile modificare la sezione seguente dei criteri per specificare la frequenza di backup e la conservazione necessarie per i backup differenziali.

Per esempio:

{
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 30,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Esempio:

Se si vogliono avere backup differenziali solo il sabato e conservarli per 60 giorni, eseguire le modifiche seguenti nei criteri:

  • Aggiornare il conteggio retentionDuration a 60 giorni.
  • Specificare solo sabato come ScheduleRunDays.
 {
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 60,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

Proteggere i nuovi database aggiunti a un'istanza di SQL

La registrazione di un'istanza SQL con una cassetta dei Servizi di ripristino individua automaticamente tutti i database presenti in questa istanza.

Tuttavia, se sono stati aggiunti nuovi database all'istanza di SQL in un secondo momento, usare il comando az backup protectable-item initialize . Questo comando individua i nuovi database aggiunti.

az backup protectable-item initialize --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --workload-type SQLDataBase

Poi, usa il cmdlet az backup protectable-item list per elencare tutti i database scoperti sulla tua istanza SQL. Controlla o filtra il loro stato di protezione. Quando trovi il database di cui vuoi eseguire il backup, vedi Abilita il backup su un database SQL.

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--protectable-item-type SQLDataBase \
    --output table

Il nuovo database di cui si vuole eseguire il backup viene visualizzato in questo elenco, che viene visualizzato come segue:

Name                            Protectable Item Type    ParentName    ServerName    IsProtected
---------------------------     ----------------------   ------------  -----------   ------------
sqldatabase;mssqlserver;db1     SQLDataBase              mssqlserver   testSQLVM	 NotProtected  
sqldatabase;mssqlserver;db2     SQLDataBase              mssqlserver   testSQLVM	 NotProtected

Interrompere la protezione per un database SQL

È possibile interrompere la protezione di un database SQL nei processi seguenti:

  • Arrestare tutti i processi di backup futuri ed eliminare tutti i punti di recupero.
  • Arrestare tutti i processi di backup futuri mantenendo tuttavia invariati i punti di ripristino.

Se si sceglie di lasciare i punti di ripristino, tenere presenti questi dettagli:

  • Tutti i punti di ripristino rimangono invariati per sempre e tutte le riduzioni vengono arrestate in caso di arresto della protezione con conservazione dei dati.
  • Verranno addebitati i costi per l'istanza protetta e lo spazio di archiviazione utilizzato.
  • Se si elimina un'origine dati senza arrestare i backup, i nuovi backup avranno esito negativo.

I processi per arrestare la protezione sono descritti nel dettaglio di seguito.

Interrompere la protezione conservando i dati

Per arrestare la protezione mantenendo i dati, usare il comando az backup protection disable.

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --output table

L'output viene visualizzato come segue:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Per verificare lo stato di questa operazione, usare il comando az backup job show .

Arrestare la protezione senza conservare i dati

Per arrestare la protezione senza conservare i dati, usare il comando az backup protection disable .

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --delete-backup-data true \
    --output table

L'output viene visualizzato come segue:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

Per verificare lo stato di questa operazione, usare il comando az backup job show .

Riprendere la protezione

Quando si arresta la protezione per il database SQL con conservazione dei dati, è possibile riprendere la protezione in un secondo momento. Se non si conservano i dati di cui è stato eseguito il backup, non sarà possibile riprendere la protezione.

Per riprendere la protezione, usare il comando az backup protection resume .

az backup protection resume --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name SQLPolicy \
    --item-name "<native-database-item-name>" \
    --output table

L'output viene visualizzato come segue:

Name                                  ResourceGroup
------------------------------------  ---------------  
b2a7f108-1020-4529-870f-6c4c43e2bb9e  SQLResourceGroup

Per verificare lo stato di questa operazione, usare il comando az backup job show .

Gestire le snapshot di backup delle istanze SQL

I seguenti comandi snapshot utilizzano la sintassi shell di PowerShell, non Bash. Sostituisci i segnaposto e utilizza una versione interfaccia della riga di comando di Azure che supporti le opzioni snapshot mostrate in questo articolo. Esegui solo l'operazione prevista. Gli esempi retain-data e delete-data sono alternative.

Seleziona il vault e l'istanza protetta

Usa l'abbonamento del vault e il gruppo di risorse per gli argomenti più comuni:

$vaultSubscription = "<vault-subscription-id>"
$vaultRg = "<vault-rg>"
$vaultName = "<vault-name>"
$vaultArgs = @("--subscription", $vaultSubscription, "--resource-group", $vaultRg, "--vault-name", $vaultName)

az backup vault show --subscription $vaultSubscription --resource-group $vaultRg --name $vaultName
az backup container list @vaultArgs --backup-management-type AzureWorkload `
  --query "[].{Name:name,VM:properties.friendlyName}" --output table
$containerName = "<native-source-container-name>"
$sourceArgs = $vaultArgs + @("--container-name", $containerName, "--backup-management-type", "AzureWorkload")

Copia il nome esatto del contenitore dall'output. Elenca tutte le istanze protette da snapshot nel vault, poi limita l'elenco al contenitore selezionato:

az backup item list @vaultArgs --backup-management-type AzureWorkload `
  --workload-type SQLInstance --output json
az backup item list @sourceArgs --workload-type SQLInstance --output json
$instanceItemName = "<native-protected-instance-item-name>"
az backup item show @sourceArgs --workload-type SQLInstance `
  --name $instanceItemName --output json
$instanceArgs = $sourceArgs + @("--item-name", $instanceItemName, "--workload-type", "SQLInstance")

Usa nomi nativi restituiti dal servizio invece di costruire nomi di container o oggetti. Per la creazione di policy e la selezione del database, vedi Configura backup snapshot di istanza SQL.

Monitora le operazioni snapshot

Usa il nome del processo che un'operazione di backup, ripristino o protezione restituisce per verificarne lo stato.

az backup job show @vaultArgs --name "<job-name>" --output json

Arrestare la protezione e conservare i dati

Conferma che l'elemento selezionato sia l'istanza prevista prima di interrompere i suoi backup:

az backup protection disable @instanceArgs --delete-backup-data false

Questa operazione blocca il backup pur conservando i dati di backup esistenti. Consulta il prompt di conferma prima di procedere.

Arrestare la protezione ed eliminare i dati

Warning

Quanto segue è un'alternativa distruttiva alla conservazione dei dati di backup. Verifica l'istanza selezionata e i suoi database prima di richiedere la cancellazione. L'immutabilità del vault e le impostazioni di cancellazione soft possono influenzare il comportamento di eliminazione.

az backup protection disable @instanceArgs --delete-backup-data true

Annulla registrazione del contenitore della VM

Annulla la registrazione del container solo dopo che tutti i suoi elementi protetti non sono più protetti e non rimangono dati di backup. Questa operazione si applica all'intero contenitore applicativo della VM, non solo a un'istanza o a un database.

az backup container unregister @vaultArgs --container-name $containerName `
  --backup-management-type AzureWorkload

Per query di snapshot e configurazioni di ripristino dei punti di recupero, vedi Ripristina snapshot di istanza SQL.

Passaggi successivi