Sichern Sie SQL Server-Datenbanken und -Instanzen in Azure-VMs mit PowerShell

Dieser Artikel beschreibt, wie man Azure PowerShell verwendet, um Streaming-Backups für SQL Server-Datenbanken und Snapshot-Backups für SQL Server-Instanzen in Azure-VMs zu konfigurieren. Für Wiederherstellungs- und Verwaltungsvorgänge siehe Wiederherstellen und Verwalten.

Prerequisites

  • Installiere das neueste Azure PowerShell-Modul, einschließlich Az.RecoveryServices. Snapshot-Beispiele erfordern eine Modulversion, die MSSQLInstance sowie die in diesem Artikel gezeigten Snapshot-Parameter freilegt.
  • Überprüfen Sie die SQL Server-Backup-Voraussetzungen und die Unterstützungsmatrix.
  • Für den Schutz von Snapshots prüfen Sie die Anforderungen an Instance-Snapshots. Bereiten Sie die Snapshot-Ressourcengruppe und die vom Benutzer zugewiesene verwaltete Identität mit den erforderlichen Berechtigungen vor.
  • Ersetzen Sie die Werte in spitzen Klammern durch die Werte für Ihre Umgebung. Beispiele verwenden -VaultId statt eines sitzungsweiten Vault-Kontexts.

Anmelden und Auswählen eines Tresors

Melden Sie sich interaktiv an und wählen Sie das Abonnement aus, das den Schlüsseltresor enthält:

Connect-AzAccount
Select-AzSubscription -SubscriptionId "<vault-subscription-id>"
Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"

Überprüfen Sie, ob der Registrierungsstatus des Anbieters Registered ist. Wenn du einen neuen Vault brauchst, erstelle eine Ressourcengruppe und einen Vault in der benötigten Region:

New-AzResourceGroup -Name "<vault-rg>" -Location "<region>"
New-AzRecoveryServicesVault -Name "<vault-name>" `
    -ResourceGroupName "<vault-rg>" -Location "<region>"

Rufen Sie das Vault-Objekt ab. Richte die Speicherredundanz für einen neuen Recovery Services-Tresor ein, bevor du irgendwelche Elemente schützt:

$vault = Get-AzRecoveryServicesVault -ResourceGroupName "<vault-rg>" -Name "<vault-name>"
Set-AzRecoveryServicesBackupProperty -Vault $vault -BackupStorageRedundancy GeoRedundant

Für einen bestehenden Tresor sollte man ihn abrufen $vault, ohne die Speicherkonfiguration zu ändern. Du kannst Vaults mit Get-AzRecoveryServicesVault auflisten.

Streaming-Datenbank-Backup konfigurieren

Erstellen Sie eine Streaming-Richtlinie

Verwenden Sie Get-AzRecoveryServicesBackupSchedulePolicyObject und Get-AzRecoveryServicesBackupRetentionPolicyObject, um die Standard-Schedule- und Retention-Objekte zu erhalten. Überprüfen Sie sie, bevor Sie die Richtlinie erstellen:

$schedule = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType MSSQL
$retention = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType MSSQL
$schedule.FullBackupSchedulePolicy.ScheduleRunTimes[0] = `
    (Get-Date -Date "2026-10-19T01:30:00Z").ToUniversalTime()

$policy = New-AzRecoveryServicesBackupProtectionPolicy -Name "Sql-Streaming" `
    -WorkloadType MSSQL -SchedulePolicy $schedule -RetentionPolicy $retention `
    -VaultId $vault.ID

Die geplanten Startzeiten müssen in UTC und in 30-Minuten-Intervallen liegen, wie etwa 01:00 oder 01:30.

Registrieren Sie die VM und entdecken Sie Datenbanken

Registrieren Sie die VM, die den SQL Server hostet, im Recovery Services-Tresor:

$vm = Get-AzVM -ResourceGroupName "<vm-rg>" -Name "<vm-name>"
Register-AzRecoveryServicesBackupContainer -ResourceId $vm.ID `
    -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $vault.ID

Liste die verfügbaren SQL-Komponenten auf und wähle dann eine Datenbank mit ihrem Namen und Server aus:

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $vault.ID

$database = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL `
    -ItemType SQLDataBase -Name "<database-name>" -ServerName "<vm-name>" `
    -VaultId $vault.ID

Verwenden Sie die zurückgegebenen Namen, um die gewünschte Datenbank zu identifizieren. Aktivieren Sie den Schutz durch die Streaming-Richtlinie:

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $database `
    -Policy $policy -VaultId $vault.ID

Entdecke neu hinzugefügte Datenbanken

Wenn Sie Datenbanken oder Instanzen nach der VM-Registrierung hinzufügen, aktualisieren Sie die Discovery:

$container = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer `
    -BackupManagementType AzureWorkload -FriendlyName "<vm-name>" -VaultId $vault.ID
Initialize-AzRecoveryServicesBackupProtectableItem -Container $container `
    -WorkloadType MSSQL -VaultId $vault.ID
Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL `
    -ItemType SQLDataBase -VaultId $vault.ID

Autoschutz für zukünftige Datenbanken aktivieren

Um den Streaming-Schutz zu nutzen, aktivieren Sie die Autoprotektion auf SQL-Instanzebene. Die Erkennung neu hinzugefügter Datenbanken läuft alle acht Stunden als Hintergrundaufgabe:

$instance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL `
    -ItemType SQLInstance -Name "<instance-name>" -ServerName "<vm-name>" `
    -VaultId $vault.ID
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $instance `
    -BackupManagementType AzureWorkload -WorkloadType MSSQL `
    -Policy $policy -VaultId $vault.ID

Für SQL Always On-Verfügbarkeitsgruppen registrieren Sie alle Knoten, bevor Sie die Datenbanken der Verfügbarkeitsgruppen auswählen. Weitere Informationen finden Sie unter Verfügbarkeitsgruppen für SQL Server sichern.

SQL-Instanz-Snapshot-Backup konfigurieren

Erstellen Sie eine Snapshot-Richtlinie mit Log-Backups

Verwenden Sie MSSQLInstance für Snapshot-Planungs- und Retentionsobjekte. Das Schedule-Objekt hat standardmäßig Log-Backups aktiviert.

$snapshotSchedule = Get-AzRecoveryServicesBackupSchedulePolicyObject `
    -WorkloadType MSSQLInstance -BackupManagementType AzureWorkload
$snapshotRetention = Get-AzRecoveryServicesBackupRetentionPolicyObject `
    -WorkloadType MSSQLInstance -BackupManagementType AzureWorkload
$identityId = "/subscriptions/<subscription-id>/resourceGroups/<identity-rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>"

$snapshotPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "SqlInst-SnapLog" `
    -WorkloadType MSSQLInstance -SchedulePolicy $snapshotSchedule `
    -RetentionPolicy $snapshotRetention -BackupSnapshotResourceGroup "<snapshot-rg>" `
    -InstantRPRetentionRangeInDays 5 -UserAssignedIdentityId $identityId `
    -VaultId $vault.ID

Die daraus resultierende Richtlinie umfasst SnapshotFull und Log Unterrichtlinien.

Erstellen Sie eine Nur-Snapshot-Richtlinie

Um Log-Backups wegzulassen, setze IsLogBackupEnabled im Schedule-Objekt auf $false. Das Retentionsobjekt besitzt diese Eigenschaft nicht.

$snapshotOnlySchedule = Get-AzRecoveryServicesBackupSchedulePolicyObject `
    -WorkloadType MSSQLInstance -BackupManagementType AzureWorkload
$snapshotOnlyRetention = Get-AzRecoveryServicesBackupRetentionPolicyObject `
    -WorkloadType MSSQLInstance -BackupManagementType AzureWorkload
$snapshotOnlySchedule.IsLogBackupEnabled = $false

$snapshotOnlyPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "SqlInst-SnapOnly" `
    -WorkloadType MSSQLInstance -SchedulePolicy $snapshotOnlySchedule `
    -RetentionPolicy $snapshotOnlyRetention -BackupSnapshotResourceGroup "<snapshot-rg>" `
    -InstantRPRetentionRangeInDays 5 -UserAssignedIdentityId $identityId `
    -VaultId $vault.ID

Die daraus resultierende Richtlinie umfasst nur die SnapshotFull Unterrichtlinie. Snapshot-only-Schutz bietet keine log-basierte Punkt-in-Zeit-Wiederherstellung.

Registrieren Sie die VM für den Instanzschutz

Registrieren Sie die VM mit MSSQLInstance. Für eine VM in einem anderen Abonnement verwenden Sie deren vollständige Ressourcen-ID. -ContainerSubscriptionId ist optional.

Register-AzRecoveryServicesBackupContainer `
    -ResourceId "/subscriptions/<vm-subscription-id>/resourceGroups/<vm-rg>/providers/Microsoft.Compute/virtualMachines/<vm-name>" `
    -BackupManagementType AzureWorkload -WorkloadType MSSQLInstance `
    -ContainerSubscriptionId "<vm-subscription-id>" -VaultId $vault.ID

Wählen Sie eine Instanz aus und aktivieren Sie den Schutz

Discovery verwendet MSSQL immer noch mit SQLInstance als Elementtyp. Rufen Sie die Snapshot-Policy nach Namen ab und geben Sie dann die ausgewählten Benutzerdatenbanken an.

$instance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL `
    -ItemType SQLInstance -Name "<instance-name>" -ServerName "<vm-name>" `
    -VaultId $vault.ID
$snapshotPolicy = Get-AzRecoveryServicesBackupProtectionPolicy `
    -Name "SqlInst-SnapLog" -VaultId $vault.ID

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $instance `
    -Policy $snapshotPolicy -ChildDatabaseName @("Testdb1", "Testdb2", "Testdb4") `
    -VaultId $vault.ID

Wählen Sie bis zu 12 Benutzerdatenbanken aus. Systemdatenbank-Snapshots werden nicht unterstützt. Um mehr über andere Limits zu erfahren, sehen Sie sich die Snapshot-Unterstützungsmatrix an.

Auslösen einer bedarfsgesteuerten Sicherung

Streaming-Datenbank-Backup

Beschränken Sie die Backup-Item-Suche auf den Container der VM. Dieses Beispiel verlangt ein vollständiges Backup als Nur-Kopie mit Kompression und 60-tägigem Ablaufdatum:

$container = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer `
    -BackupManagementType AzureWorkload -FriendlyName "<vm-name>" -VaultId $vault.ID
$databaseItem = Get-AzRecoveryServicesBackupItem -Container $container `
    -WorkloadType MSSQL -Name "SQLDataBase;<instance-name>;<database-name>" `
    -VaultId $vault.ID
$expiry = (Get-Date).AddDays(60).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $databaseItem -BackupType CopyOnlyFull `
    -EnableCompression -ExpiryDateTimeUTC $expiry -VaultId $vault.ID

Für vollständige Nur-Kopie-Backups gilt das angeforderte Ablaufdatum. Die Aufbewahrung von Streaming-Vollsicherungen ist an die abhängigen Log-Backups gebunden; siehe Aufbewahrung von On-Demand-Backups.

Instance-Snapshot-Backup

Verwenden Sie MSSQLInstance , um eine geschützte Instanz abzurufen, und fordern Sie dann ein SnapshotFull Backup an:

$container = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer `
    -BackupManagementType AzureWorkload -FriendlyName "<vm-name>" -VaultId $vault.ID
$instanceItem = Get-AzRecoveryServicesBackupItem -Container $container `
    -WorkloadType MSSQLInstance -Name "sqlinstance;<instance-name>" -VaultId $vault.ID
$expiry = (Get-Date).AddDays(45).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $instanceItem -BackupType SnapshotFull `
    -ExpiryDateTimeUTC $expiry -VaultId $vault.ID

Der Backup-Befehl gibt einen Job zurück. Für Ablaufverfolgungsbefehle siehe Aufträge überwachen.

Nächste Schritte