Verwalten von SQL-Datenbanken in einer Azure-VM mithilfe der Azure CLI

Die Azure CLI dient zum Erstellen und Verwalten von Azure-Ressourcen über die Befehlszeile oder mit Skripts. In diesem Artikel wird beschrieben, wie Sie eine gesicherte SQL-Datenbank auf azure VM mit Azure CLI verwalten. Sie können diese Aktionen auch über das Azure-Portal ausführen.

Hinweis

Falls Sie die Anleitung unter Sichern einer SQL-Datenbank in Azure mit der CLI verwendet haben, um Ihre SQL-Datenbank zu sichern, nutzen Sie die folgenden Ressourcen:

  • Eine Ressourcengruppe mit dem Namen SQLResourceGroup
  • Ein Tresor mit dem Namen SQLVault
  • Geschützter Container mit dem Namen "VMAppContainer"; Berechnen; SQLResourceGroup; testSQLVM
  • Gesicherte Datenbank/Element mit dem Namen sqldatabase;mssqlserver;master
  • Ressourcen in der Region Westus2

Azure CLI erleichtert das Verwalten einer SQL-Datenbank, die auf einer Azure-VM ausgeführt wird, die mithilfe von Azure Backup gesichert wird. In den folgenden Abschnitten werden die einzelnen Verwaltungsvorgänge beschrieben.

Informationen zu den derzeit von uns unterstützten Sicherungs- und Wiederherstellungsszenarien finden Sie in der Support-Matrix. Allgemeine Fragen finden Sie in den häufig gestellten Fragen.

Überwachen von Sicherungs- und Wiederherstellungsaufträgen

Verwenden Sie den Befehl "az backup job list" zum Überwachen abgeschlossener oder aktuell ausgeführter Aufträge (Sicherung oder Wiederherstellung). CLI ermöglicht auch einen aktuell ausgeführten Auftrag zu unterbrechen oder zu warten, bis ein Auftrag abgeschlossen ist.

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

Die Ausgabe erscheint wie folgt:

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

Ändern einer Richtlinie

Verwenden Sie den Befehl "az backup policy set ", um die Richtlinie zu ändern, die der SQL-Sicherungskonfiguration zugrunde liegt. Der Name-Parameter in diesem Befehl bezieht sich auf das Sicherungselement, dessen Richtlinie Sie ändern möchten. Ersetzen Sie die Richtlinie der SQL-Datenbank sqldatabase;mssqlserver;master durch die neue Richtlinie newSQLPolicy. Sie können neue Richtlinien mithilfe des Befehls "az backup policy create " erstellen.

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

Die Ausgabe erscheint wie folgt:

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

Erstellen einer differenziellen Sicherungsrichtlinie

Verwenden Sie zum Erstellen einer differenziellen Sicherungsrichtlinie den Befehl "az backup policy create " mit den folgenden Parametern:

  • --backup-management-type: Azure-Workload.
  • --workload-type: SQL DataBase.
  • --name: Name der Richtlinie.
  • --policy: JSON-Datei mit den entsprechenden Details für Zeitplan und Aufbewahrung.
  • --resource-group: Ressourcengruppe des Tresors.
  • --vault-name: Name des Tresors/

Beispiel:

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

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

Nachdem die Richtlinie erfolgreich erstellt wurde, zeigt die Ausgabe des Befehls den Richtlinien-JSON-Code an, den Sie beim Ausführen des Befehls als Parameter übergeben haben.

Sie können den folgenden Abschnitt der Richtlinie ändern, um die erforderliche Sicherungshäufigkeit und Aufbewahrung für differenzielle Sicherungen anzugeben.

Beispiel:

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

Beispiel:

Wenn Sie differenzielle Sicherungen nur am Samstag haben und sie 60 Tage lang aufbewahren möchten, führen Sie die folgenden Änderungen in der Richtlinie aus:

  • Aktualisieren Sie den retentionDuration-Wert auf 60 Tage.
  • Geben Sie nur Samstag als ScheduleRunDays an.
 {
  "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
  }
}

Schützen der neuen Datenbanken, die einer SQL-Instanz hinzugefügt wurden

Durch das Registrieren einer SQL-Instanz mit einem Recovery Services-Tresor werden automatisch alle Datenbanken in dieser Instanz ermittelt.

Wenn Sie der SQL-Instanz jedoch später neue Datenbanken hinzugefügt haben, verwenden Sie den Befehl az backup protectable-item initialize . Mit diesem Befehl werden die neuen Datenbanken ermittelt, die hinzugefügt wurden.

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

Dann verwende das az backup protectable-item list-cmdlet , um alle Datenbanken aufzulisten, die auf deiner SQL-Instanz entdeckt wurden. Überprüfen oder filtern Sie ihren Schutzstatus. Wenn Sie die Datenbank gefunden haben, die Sie sichern möchten, siehe Backup in der SQL-Datenbank aktivieren.

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

Die neue Datenbank, die Sie sichern möchten, wird in dieser Liste angezeigt, die wie folgt angezeigt wird:

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

Beenden des Schutzes für eine SQL-Datenbank

Sie können den Schutz einer SQL-Datenbank in den folgenden Prozessen beenden:

  • Beenden aller zukünftigen Sicherungsaufträge und Löschen aller Wiederherstellungspunkte
  • Stoppen Sie alle zukünftigen Sicherungsaufträge und lassen Sie die Wiederherstellungspunkte intakt.

Wenn Sie die Wiederherstellungspunkte verlassen möchten, beachten Sie die folgenden Details:

  • Alle Wiederherstellungspunkte werden unbegrenzt beibehalten, und die gesamte Bereinigung endet mit der Beendigung des Schutzes unter Beibehaltung der Daten.
  • Ihnen werden die geschützte Instanz und der verbrauchte Speicher in Rechnung gestellt.
  • Wenn Sie eine Datenquelle löschen, ohne die Sicherungen zu beenden, treten bei neuen Sicherungen Fehler auf.

Die Prozesse zum Beenden des Schutzes sind unten aufgeführt.

Beendigung des Schutzes mit Beibehaltung der Daten

Verwenden Sie den Befehl "az backup protection disable", um den Schutz mit der Aufbewahrung von Daten zu beenden.

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

Die Ausgabe erscheint wie folgt:

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

Um den Status dieses Vorgangs zu überprüfen, verwenden Sie den Befehl "az backup job show ".

Schutz beenden, ohne Daten aufzubewahren

Verwenden Sie den Befehl "az backup protection disable ", um den Schutz ohne Aufbewahrung von Daten zu beenden.

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

Die Ausgabe erscheint wie folgt:

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

Um den Status dieses Vorgangs zu überprüfen, verwenden Sie den Befehl "az backup job show ".

Schutz fortsetzen

Wenn Sie den Schutz für die SQL-Datenbank mit Aufbewahrungsdaten beenden, können Sie den Schutz später fortsetzen. Wenn Sie die gesicherten Daten nicht aufbewahren, können Sie den Schutz nicht fortsetzen.

Um den Schutz fortzusetzen, verwenden Sie den Befehl "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

Die Ausgabe erscheint wie folgt:

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

Um den Status dieses Vorgangs zu überprüfen, verwenden Sie den Befehl "az backup job show ".

SQL-Instanz-Snapshot-Backups verwalten

Die folgenden Snapshot-Befehle verwenden PowerShell-Shell-Syntax, nicht Bash. Ersetzen Sie die Platzhalter und verwenden Sie eine Azure CLI-Version, die die in diesem Artikel gezeigten Snapshot-Optionen unterstützt. Führe nur die beabsichtigte Operation aus. Die Beispiele retain-data und delete-data sind Alternativen.

Wählen Sie den Tresor und die geschützte Instanz aus

Verwenden Sie das Abonnement und die Ressourcengruppe des Schlüsseltresors für die gängigen Argumente:

$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")

Kopiere den genauen Containernamen aus der Ausgabe. Liste alle snapshot-geschützten Instanzen im Tresor auf und beschränke die Liste dann auf den ausgewählten Container:

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")

Verwenden Sie native Namen, die vom Service zurückgegeben werden, anstatt Container- oder Elementnamen zu erstellen. Für Richtlinienerstellung und Datenbankauswahl siehe SQL-Instanz-Snapshot-Sicherung konfigurieren.

Snapshot-Operationen überwachen

Verwenden Sie den Jobnamen, den eine Backup-, Wiederherstellungs- oder Schutzoperation zurückgibt, um ihren Status zu überprüfen.

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

Beenden des Schutzes und Aufbewahren von Daten

Bestätigen Sie, dass das ausgewählte Element die vorgesehene Instanz ist, bevor Sie die Backups stoppen:

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

Dieser Vorgang stoppt das Backup, wobei vorhandene Backup-Daten beibehalten werden. Überprüfen Sie die Bestätigungsaufforderung, bevor Sie fortfahren.

Beenden des Schutzes und Löschen der Daten

Warning

Das Folgende ist eine zerstörerische Alternative zur Aufbewahrung von Backup-Daten. Verifiziere die ausgewählte Instanz und ihre Datenbanken, bevor du eine Löschung beantragst. Vault-Unveränderlichkeit und Soft-Delete-Einstellungen können das Löschverhalten beeinflussen.

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

Deregistrieren Sie den VM-Container

Deregistrieren Sie den Container erst, wenn alle geschützten Objekte nicht mehr geschützt sind und keine Backup-Daten mehr übrig sind. Diese Operation gilt für den gesamten VM-Anwendungscontainer, nicht nur für eine einzelne Instanz oder Datenbank.

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

Für Abfragen von Snapshot-Wiederherstellungspunkten und Wiederherstellungskonfigurationen siehe Wiederherstellung von SQL-Instanz-Snapshots.

Nächste Schritte