Wykonaj kopię zapasową baz danych i instancji SQL Server w maszynach wirtualnych Azure za pomocą PowerShell

Ten artykuł opisuje, jak używać Azure PowerShell do konfiguracji kopii zapasowych przesyłania strumieniowego dla baz danych SQL Server oraz snapshotów dla instancji SQL Server w maszynach wirtualnych Azure. Aby poznać operacje przywracania i zarządzania, zobacz Przywracanie i Zarządzanie.

Prerequisites

Zaloguj się i wybierz sejf

Zaloguj się interaktywnie i wybierz subskrypcję, która zawiera magazyn:

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

Sprawdź, czy status rejestracji dostawcy to Registered. Jeśli potrzebujesz nowego magazynu, utwórz grupę zasobów i magazyn w wymaganym regionie:

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

Pobierz obiekt skarbca. Ustaw redundancję magazynowania dla nowego sejfu przed ochroną jakichkolwiek przedmiotów:

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

W przypadku istniejącego vault pobieraj $vault bez zmiany jego konfiguracji przechowywania. Możesz wyświetlić listę skarbców za pomocą Get-AzRecoveryServicesVault.

Skonfiguruj strumieniową kopię zapasową bazy danych

Stwórz politykę streamingową

Użyj Get-AzRecoveryServicesBackupSchedulePolicyObject oraz Get-AzRecoveryServicesBackupRetentionPolicyObject , aby uzyskać domyślne obiekty harmonogramu i retencji. Przejrzyj je przed utworzeniem polisy:

$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

Godziny rozpoczęcia harmonogramu muszą być w UTC i w odstępach co 30 minut, takich jak 01:00 lub 01:30.

Zarejestruj maszynę wirtualną i wykryj bazy danych

Zarejestruj maszynę wirtualną, która hostuje SQL Server, w magazynie:

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

Wypisz dostępne komponenty SQL, a następnie wybierz bazę danych, używając jej nazwy i serwera:

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

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

Użyj zwróconych nazw, aby zidentyfikować bazę danych, którą chcesz. Włącz ochronę korzystając z polityki streamingu:

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

Odkryj nowo dodane bazy danych

Jeśli dodajesz bazy danych lub instancje po rejestracji maszyny wirtualnej, odśwież wykrywanie:

$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

Włączenie autoochrony dla przyszłych baz danych

Aby korzystać z ochrony strumieniowej, włącz autoochronę na poziomie instancji SQL. Odkrywanie nowo dodanych baz danych działa jako zadanie w tle co osiem godzin:

$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

W przypadku grup dostępności SQL Server Always On zarejestruj wszystkie węzły przed wybraniem baz danych grup dostępności. Więcej informacji można znaleźć w temacie Tworzenie kopii zapasowych grup dostępności programu SQL Server.

Konfigurowanie kopii zapasowej migawki instancji SQL

Stwórz politykę snapshot z kopiami zapasowymi logów

Użyj MSSQLInstance dla obiektów harmonogramu i retencji snapshotów. Obiekt harmonogramu ma domyślnie włączone kopie zapasowe logów.

$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

Powstała polityka obejmuje podpolityki SnapshotFull i Log.

Stwórz politykę opartą wyłącznie na migawkach

Aby pominąć kopie zapasowe logów, ustaw IsLogBackupEnabled w obiekcie harmonogram na $false. Obiekt retencji nie posiada tej właściwości.

$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

Powstała zasada obejmuje jedynie podzasadę SnapshotFull. Ochrona wyłącznie na podstawie migawek nie zapewnia odzyskiwania opartego na dziennikach do określonego punktu w czasie.

Zarejestruj maszynę wirtualną dla ochrony instancji

Zarejestruj maszynę wirtualną, używając MSSQLInstance. Dla maszyny wirtualnej w innej subskrypcji użyj jej pełnego ID zasobu. Element -ContainerSubscriptionId jest opcjonalny.

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

Wybierz instancję i włącz ochronę

Discovery nadal używa MSSQL z SQLInstance jako typu przedmiotu. Pobierz politykę snapshot według nazwy, a następnie podaj wybrane bazy danych użytkownika.

$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

Wybierz do 12 baz danych użytkowników. Migawki baz danych systemowych nie są obsługiwane. Aby poznać inne ograniczenia, zapoznaj się z macierzą wsparcia snapshotów.

Wyzwalanie kopii zapasowej na żądanie

Strumieniowa kopia zapasowa bazy danych

Ogranicz wyszukiwanie elementów kopii zapasowej do kontenera maszyny wirtualnej. Ten przykład żąda pełnej kopii zapasowej tylko do kopiowania z kompresją i 60-dniowym terminem ważności:

$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

Pełne kopie zapasowe typu copy-only uwzględniają żądany termin wygaśnięcia. Okres przechowywania pełnych kopii zapasowych przesyłanych strumieniowo jest powiązany z zależnymi kopiami zapasowymi dzienników; zobacz przechowywanie kopii zapasowych na żądanie.

Kopia zapasowa migawki instancji

Użyj MSSQLInstance do pobrania chronionej instancji, a następnie zażądaj kopii zapasowej SnapshotFull:

$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

Polecenie tworzenia kopii zapasowej zwraca zadanie. Polecenia do śledzenia można znaleźć w artykule Monitor jobs.

Następne kroki