Udostępnij za pomocą


Tworzenie kopii zapasowych i przywracanie baz danych SQL na maszynach wirtualnych platformy Azure przy użyciu programu PowerShell

W tym artykule opisano, jak używać programu Azure PowerShell do tworzenia kopii zapasowych i odzyskiwania bazy danych SQL na maszynie wirtualnej platformy Azure przy użyciu usługi Azure Backup w magazynie usługi Recovery Services.

Wymagania wstępne

Przed utworzeniem kopii zapasowej i przywróceniem baz danych SQL na maszynach wirtualnych platformy Azure przy użyciu programu PowerShell upewnij się, że zostały spełnione następujące wymagania wstępne:

Hierarchia obiektów usługi Recovery Services

Hierarchia obiektów jest podsumowana na poniższym diagramie.

Hierarchia obiektów usługi Recovery Services

Zapoznaj się z dokumentacją poleceń cmdletaz.RecoveryServices w bibliotece platformy Azure.

Konfigurowanie i instalowanie programu PowerShell dla usługi Azure Backup

Skonfiguruj program PowerShell w następujący sposób:

  1. Pobierz najnowszą wersję Az PowerShell. Wymagana minimalna wersja to 1.5.0.

  2. Znajdź polecenia cmdlet programu PowerShell usługi Azure Backup za pomocą następującego polecenia:

    Get-Command *azrecoveryservices*
    
  3. Przejrzyj aliasy i polecenia cmdlet dla usługi tworzenia kopii zapasowych Azure Backup i skrytki Recovery Services. Oto przykład tego, co można zobaczyć. Nie jest to pełna lista poleceń cmdlet.

    Lista poleceń cmdlet Recovery Services

  4. Zaloguj się do konta platformy Azure przy użyciu polecenia Connect-AzAccount.

  5. Na stronie internetowej, która się pojawi, zostaniesz poproszony o wprowadzenie poświadczeń konta.

    • Alternatywnie możesz dołączyć poświadczenia konta jako parametr -Credential do polecenia cmdlet Connect-AzAccount.
    • Jeśli jesteś partnerem CSP pracującym z klientem będącym najemcą, określ klienta jako najemcę, używając identyfikatora najemcy lub głównej nazwy domeny najemcy. Przykładem jest Connect-AzAccount -Tenant fabrikam.com.
  6. Skojarz subskrypcję, której chcesz używać z kontem, ponieważ konto może mieć kilka subskrypcji.

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Jeśli używasz usługi Azure Backup po raz pierwszy, użyj polecenia cmdlet Register-AzResourceProvider , aby zarejestrować dostawcę usług Azure Recovery Services w ramach subskrypcji.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. Sprawdź, czy dostawcy zarejestrowali się pomyślnie:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. W danych wyjściowych polecenia sprawdź, czy RegistrationState zmieni się na Zarejestrowany. Jeśli tak nie jest, uruchom ponownie polecenie cmdlet Register-AzResourceProvider .

Tworzenie magazynu usługi Recovery Services i ustawianie kontekstu magazynu

Aby skonfigurować kopię zapasową baz danych SQL na maszynach wirtualnych platformy Azure, należy najpierw utworzyć magazyn usługi Recovery Services i ustawić kontekst magazynu.

Utwórz skarbiec dla Recovery Services

Wykonaj następujące kroki, aby utworzyć magazyn usług odzyskiwania.

Magazyn usługi Recovery Services jest zasobem usługi Resource Manager, dlatego należy umieścić go w grupie zasobów. Możesz użyć istniejącej grupy zasobów lub utworzyć grupę zasobów za pomocą polecenia cmdlet New-AzResourceGroup . Podczas tworzenia grupy zasobów określ nazwę i lokalizację grupy zasobów.

  1. Sejf został umieszczony w grupie zasobów. Jeśli nie masz istniejącej grupy zasobów, utwórz nową grupę za pomocą polecenia New-AzResourceGroup. W tym przykładzie tworzymy nową grupę zasobów w regionie Zachodniego USA.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Użyj polecenia cmdlet New-AzRecoveryServicesVault, aby utworzyć skrytkę. Określ tę samą lokalizację skarbca, która została użyta dla grupy zasobów.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Określ typ nadmiarowości do użycia dla magazynu skarbca.

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperties  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

Wyświetl sejfy w subskrypcji

Aby wyświetlić wszystkie magazyny w subskrypcji, użyj polecenia Get-AzRecoveryServicesVault.

Get-AzRecoveryServicesVault

Dane wyjściowe są podobne do poniższych. Udostępniono skojarzoną grupę zasobów i lokalizację.

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

Ustaw kontekst skrytki

Zapisz obiekt skarbca w zmiennej i ustaw kontekst skarbca.

  • Wiele poleceń cmdlet Azure Backup wymaga obiektu skarbca usługi Recovery Services jako danych wejściowych, więc wygodnie jest przechowywać obiekt skarbca w zmiennej.
  • Kontekst magazynu to rodzaj danych chronionych w magazynie. Ustaw go za pomocą polecenia Set-AzRecoveryServicesVaultContext. Po ustawieniu kontekstu ma zastosowanie do wszystkich kolejnych poleceń cmdlet.

Poniższy przykład ustawia kontekst skarbca dla testvault

Get-AzRecoveryServicesVault -Name "testvault" | Set-AzRecoveryServicesVaultContext

Pobierz identyfikator skarbca

Planujemy wycofanie ustawienia kontekstu skarbca zgodnie z wytycznymi Azure PowerShell. Zamiast tego możesz przechowywać lub pobierać identyfikator magazynu i przekazywać go do odpowiednich poleceń w następujący sposób:

$testVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$testVault.ID

Konfigurowanie zasad tworzenia kopii zapasowych dla baz danych SQL

Zasady tworzenia kopii zapasowych określają harmonogram tworzenia kopii zapasowych i czas przechowywania punktów odzyskiwania kopii zapasowej:

Domyślnie czas rozpoczęcia jest definiowany w obiekcie zasad harmonogramu. Użyj poniższego przykładu, aby zmienić godzinę rozpoczęcia na żądany czas rozpoczęcia. Żądany czas rozpoczęcia powinien również znajdować się w formacie UTC. W poniższym przykładzie przyjęto założenie, że żądany czas rozpoczęcia to 01:00 CZASU UTC dla codziennych kopii zapasowych.

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$UtcTime = (Get-Date -Date "2019-03-20 01:30:00Z").ToUniversalTime()
$schPol.FullBackupSchedulePolicy.ScheduleRunTimes[0] = $UtcTime

Important

Musisz podać czas rozpoczęcia tylko w odstępach 30-minutowych. W powyższym przykładzie może to być tylko "01:00:00" lub "02:30:00". Godzina rozpoczęcia nie może być "01:15:00".

Na poniższym przykładzie zasady dotyczące harmonogramu oraz zachowania danych są zapisane w zmiennych. Następnie używa tych zmiennych jako parametrów dla nowych zasad (NewSQLPolicy). Funkcja NewSQLPolicy wykonuje codzienne "pełne" kopie zapasowe, przechowuje je przez 180 dni i wykonuje kopię zapasową dziennika co 2 godziny

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "MSSQL"
$NewSQLPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "NewSQLPolicy" -WorkloadType "MSSQL" -RetentionPolicy $retPol -SchedulePolicy $schPol

Dane wyjściowe są podobne do poniższych.

Name                 WorkloadType       BackupManagementType BackupTime                Frequency                                IsDifferentialBackup IsLogBackupEnabled
                                                                                                                                Enabled
----                 ------------       -------------------- ----------                ---------                                -------------------- ------------------
NewSQLPolicy         MSSQL              AzureWorkload        3/15/2019 01:30:00 AM      Daily                                    False                True

Włączanie tworzenia kopii zapasowej dla baz danych SQL

Rejestrowanie maszyny wirtualnej SQL

W przypadku kopii zapasowych maszyn wirtualnych platformy Azure i udziałów plików platformy Azure usługa Backup może połączyć się z tymi zasobami usługi Azure Resource Manager i pobrać odpowiednie szczegóły. Ponieważ usługa SQL jest aplikacją na maszynie wirtualnej platformy Azure, usługa Backup musi mieć uprawnienia dostępu do aplikacji i pobrać niezbędne szczegóły. Aby to zrobić, musisz zarejestrować maszynę wirtualną platformy Azure zawierającą aplikację SQL z magazynem usługi Recovery Services. Po zarejestrowaniu maszyny wirtualnej SQL w magazynie można chronić bazy danych SQL tylko w tym magazynie. Aby zarejestrować maszynę wirtualną, użyj polecenia cmdlet Register-AzRecoveryServicesBackupContainer programu PowerShell.

 $myVM = Get-AzVM -ResourceGroupName <VMRG Name> -Name <VMName>
Register-AzRecoveryServicesBackupContainer -ResourceId $myVM.ID -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID -Force

Polecenie zwróci "kontener kopii zapasowej" tego zasobu, a stan będzie "zarejestrowany"

Note

Jeśli parametr force nie zostanie podany, zostanie wyświetlony monit o potwierdzenie przy użyciu tekstu "Czy chcesz wyłączyć ochronę dla tego kontenera". Zignoruj ten tekst i powiedz "Y", aby potwierdzić. Jest to znany problem i pracujemy nad usunięciem tekstu i wymaganiami dotyczącymi parametru force.

Pobieranie baz danych SQL

Po zakończeniu rejestracji usługa Backup będzie mogła wyświetlić listę wszystkich dostępnych składników SQL na maszynie wirtualnej. Aby wyświetlić wszystkie składniki SQL, których kopia zapasowa nie została jeszcze utworzona w tym magazynie, użyj polecenia cmdlet Get-AzRecoveryServicesBackupProtectableItem programu PowerShell

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

W danych wyjściowych zostaną wyświetlone wszystkie niechronione składniki SQL na zarejestrowanych w tym magazynie maszynach wirtualnych SQL, z typem elementu oraz nazwą serwera. Możesz dalej filtrować do określonej maszyny wirtualnej SQL, przekazując parametr "-Container" lub używając kombinacji parametru "Name" i "ServerName" wraz z flagą ItemType, aby uzyskać unikatowy element SQL.

$SQLDB = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID -Name "<Item Name>" -ServerName "<Server Name>"

Skonfiguruj kopię zapasową

Teraz, gdy mamy wymaganą bazę danych SQL i zasady, dla których należy utworzyć kopię zapasową, możemy użyć polecenia cmdlet Enable-AzRecoveryServicesBackupProtection , aby skonfigurować kopię zapasową dla tej bazy danych SQL.

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

Polecenie czeka na ukończenie konfiguracji kopii zapasowej i zwraca następujące dane wyjściowe.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 6:00:21 PM      3/18/2019 6:01:35 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Pobieranie nowych baz danych SQL

Po zarejestrowaniu maszyny usługa kopii zapasowej pobierze wówczas szczegóły baz danych. Jeśli bazy danych SQL lub wystąpienia SQL zostaną dodane do zarejestrowanej maszyny później, musisz ręcznie wyzwolić usługę tworzenia kopii zapasowej, aby wykonać nowe "zapytanie", aby ponownie pobrać wszystkie niechronione bazy danych (w tym nowo dodane). Użyj polecenia cmdlet Initialize-AzRecoveryServicesBackupItem PowerShell na maszynie wirtualnej SQL, aby wykonać nowe zapytanie. Polecenie będzie czekać do momentu zakończenia operacji. Później użyj polecenia cmdlet Get-AzRecoveryServicesBackupProtectableItem programu PowerShell, aby uzyskać listę najnowszych niechronionych składników SQL.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Initialize-AzRecoveryServicesBackupProtectableItem -Container $SQLContainer -WorkloadType MSSQL -VaultId $testVault.ID
Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID

Po pobraniu odpowiednich elementów z możliwością ochrony włącz kopie zapasowe zgodnie z instrukcjami w powyższej sekcji. Jeśli nie chcesz ręcznie wykrywać nowych baz danych, mogą zdecydować się na automatyczną ochronę, jak wyjaśniono poniżej.

Włącz automatyczną ochronę dla przyszłych baz danych SQL

Można skonfigurować kopię zapasową, aby wszystkie bazy danych dodane w przyszłości zostały automatycznie chronione przy użyciu określonych zasad. Aby włączyć automatyczne włączanie ochrony, użyj polecenia cmdlet Enable-AzRecoveryServicesBackupAutoProtection programu PowerShell.

Ponieważ instrukcja polega na utworzeniu kopii zapasowej wszystkich przyszłych baz danych, operacja jest wykonywana na poziomie wystąpienia SQL.

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -Policy $NewSQLPolicy -VaultId $testVault.ID

Po ustawieniu intencji ochrony automatycznej przeprowadzane jest zapytanie do maszyny w celu pobrania nowo dodanych baz danych, jako zaplanowane zadanie w tle odbywające się co 8 godzin.

Przywracanie baz danych SQL na maszynach wirtualnych platformy Azure

Usługa Azure Backup może przywrócić bazy danych programu SQL Server uruchomione na maszynach wirtualnych platformy Azure w następujący sposób:

  • Przywróć do określonej daty lub godziny (do sekundy) przy użyciu kopii zapasowych dziennika transakcji. Usługa Azure Backup automatycznie określa odpowiednią pełną różnicową kopię zapasową i łańcuch kopii zapasowych dziennika, które są wymagane do przywrócenia na podstawie wybranego czasu.
  • Przywróć określoną pełną lub różnicową kopię zapasową w celu osiągnięcia określonego punktu odzyskiwania.

Przed przywróceniem baz danych SQL sprawdź wymagania wstępne wymienione tutaj .

Warning

Ze względu na problem z zabezpieczeniami związany z Role-Based Access Control (RBAC) musieliśmy wprowadzić istotną zmianę w przywracaniu poleceń dla bazy danych SQL za pośrednictwem PowerShell. Przeprowadź uaktualnienie do wersji Az 6.0.0 lub nowszej, aby odpowiednie polecenia przywracania zostały przesłane za pomocą programu PowerShell. Poniżej podano najnowsze polecenia PS.

Najpierw pobierz odpowiednią kopię zapasową bazy danych SQL przy użyciu polecenia cmdlet Get-AzRecoveryServicesBackupItem programu PowerShell.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID

Pobierz odpowiedni czas przywracania

Jak opisano powyżej, możesz przywrócić zarchiwizowaną kopię zapasową bazy danych SQL do pełnej lub różnicowej kopii LUB do określonego punktu w czasie dziennika.

Pobierz odrębne punkty odzyskiwania

Użyj polecenia Get-AzRecoveryServicesBackupRecoveryPoint , aby pobrać odrębne punkty odzyskiwania (pełne/różnicowe) dla kopii zapasowej bazy danych SQL.

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate

Dane wyjściowe są podobne do poniższego przykładu

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

Użyj filtru "RecoveryPointId" lub filtru tablicy, aby pobrać odpowiedni punkt odzyskiwania.

$FullRP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -RecoveryPointId "6660368097802"

Pobierz punkt odzyskiwania z określonego momentu w czasie

Jeśli chcesz przywrócić bazę danych do określonego punktu w czasie, użyj polecenia cmdlet Get-AzRecoveryServicesBackupRecoveryLogChain programu PowerShell. Polecenie cmdlet zwraca listę dat reprezentujących czasy rozpoczęcia i zakończenia nieprzerwanego łańcucha dzienników dla tego elementu kopii zapasowej SQL. Żądany punkt w czasie powinien mieścić się w tym zakresie.

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $bkpItem -VaultId $testVault.ID

Dane wyjściowe będą podobne do poniższego przykładu.

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

Powyższe dane wyjściowe oznaczają, że można przywrócić do dowolnego punktu w czasie między wyświetlanym czasem rozpoczęcia a czasem zakończenia. Czasy są w formacie UTC. Skonstruuj dowolny punkt w czasie w programie PowerShell, który znajduje się w zakresie przedstawionym powyżej.

Note

Jeśli do przywracania wybrano punkt w czasie dziennika, nie trzeba określać punktu początkowego, czyli pełnej kopii zapasowej, z której jest przywracana baza danych. Usługa Azure Backup zajmie się całym planem odzyskiwania, to znaczy, którą pełną kopię zapasową należy wybrać, jakie kopie zapasowe dziennika mają być stosowane itd.

Określanie konfiguracji odzyskiwania

W przypadku przywracania bazy danych SQL obsługiwane są następujące scenariusze przywracania.

  • Zastępowanie kopii zapasowej bazy danych SQL danymi z innego punktu odzyskiwania — OriginalWorkloadRestore
  • Przywracanie bazy danych SQL jako nowej bazy danych w tej samej instancji SQL — AlternateWorkloadRestore
  • Przywracanie bazy danych SQL jako nowej bazy danych w innym wystąpieniu SQL na innej maszynie wirtualnej SQL — AlternateWorkloadRestore
  • Przywracanie bazy danych SQL jako plików .bak -RestoreAsFiles

Po pobraniu odpowiedniego punktu odzyskiwania (odrębnego lub punktu w czasie dziennika) użyj polecenia cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig programu PowerShell, aby pobrać obiekt konfiguracji odzyskiwania zgodnie z żądanym planem odzyskiwania.

Przywracanie oryginalnych obciążeń

Aby zastąpić kopię zapasową bazy danych danymi z punktu odzyskiwania, wystarczy określić właściwą flagę i odpowiedni punkt odzyskiwania, jak pokazano w poniższych przykładach.

Oryginalne przywracanie z odrębnym punktem odzyskiwania
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
Oryginalne przywracanie z logiem punktu czasowego
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Alternatywne przywracanie obciążeń roboczych

Important

Przywróconą kopię zapasową bazy danych SQL można odtworzyć jako nową bazę danych tylko do innej instancji SQL na maszynie wirtualnej platformy Azure, zarejestrowanej w tym skarbcu.

Jak opisano powyżej, jeśli docelowy SQLInstance znajduje się na innej maszynie wirtualnej platformy Azure, upewnij się, że jest zarejestrowany w tym magazynie, a odpowiedni SQLInstance jest widoczny jako element z możliwością ochrony. W tym dokumencie załóżmy, że docelową nazwą wystąpienia SQL jest MSSQLSERVER w innej maszynie wirtualnej "Contoso2".

$TargetContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $testVault.ID -FriendlyName "Contoso2"
$TargetInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -Name "MSSQLSERVER" -ServerName "Contoso2" -VaultId $testVault.ID

Następnie wystarczy określić odpowiedni punkt odzyskiwania, docelowe wystąpienie SQL z właściwą flagą, jak pokazano poniżej, oraz kontener docelowy, w którym znajduje się docelowe wystąpienie SQL.

Alternatywne przywracanie z odrębnym punktem przywracania
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Alternatywne odzyskiwanie z punktem czasowym w dzienniku
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Przywracanie jako pliki

Aby przywrócić dane kopii zapasowej jako pliki .bak zamiast bazy danych, wybierz opcję Przywróć jako pliki . Zapasową bazę danych SQL można przywrócić do dowolnej docelowej maszyny wirtualnej zarejestrowanej w tym skarbcu.

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
Przywróć jako pliki z odrębnym punktem odzyskiwania
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Przywracanie plików z punktu czasowego dziennika z najnowszej pełnej kopii zapasowej.
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
Przywróć jako pliki z punktu czasowego dziennika z określonej pełnej kopii zapasowej

Jeśli chcesz określić pełną kopię zapasową, która ma być używana do przywracania, użyj następującego polecenia:

$FileRestoreWithLogAndSpecificFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -FromFull $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID

Końcowy obiekt konfiguracji punktu odzyskiwania uzyskany z polecenia cmdlet Get-AzRecoveryServicesBackupWorkloadRecoveryConfig programu PowerShell zawiera wszystkie istotne informacje dotyczące przywracania i jest pokazany poniżej.

TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : No
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

Możesz edytować przywróconą nazwę bazy danych, pola OverwriteWLIfpresent, NoRecoveryMode i targetPhysicalPath. Uzyskaj więcej szczegółów dotyczących ścieżek plików docelowych, jak pokazano poniżej.

$AnotherInstanceWithFullConfig.targetPhysicalPath
MappingType SourceLogicalName SourcePath                  TargetPath
----------- ----------------- ----------                  ----------
Data        azurebackup1      F:\Data\azurebackup1.mdf    F:\Data\azurebackup1_1553001753.mdf
Log         azurebackup1_log  F:\Log\azurebackup1_log.ldf F:\Log\azurebackup1_log_1553001753.ldf

Ustaw odpowiednie właściwości programu PowerShell jako wartości ciągu, jak pokazano poniżej.

$AnotherInstanceWithFullConfig.OverwriteWLIfpresent = "Yes"
$AnotherInstanceWithFullConfig | fl
TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : Yes
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

Important

Upewnij się, że końcowy obiekt konfiguracji odzyskiwania ma wszystkie niezbędne i prawidłowe wartości, ponieważ operacja przywracania będzie oparta na obiekcie konfiguracji.

Note

Jeśli nie chcesz przywracać całego łańcucha, ale tylko podzbioru plików, wykonaj kroki opisane tutaj.

Alternatywne przywracanie obciążenia do magazynu w regionie pomocniczym

Important

Obsługa przywracania w dodatkowym regionie dla SQL z PowerShell jest dostępna w Az 6.0.0

Jeśli włączono przywracanie między regionami, punkty odzyskiwania zostaną również zreplikowane do pomocniczego, sparowanego regionu. Następnie możesz pobrać te punkty odzyskiwania i uruchomić proces przywracania na maszynie, która znajduje się w tym sparowanym regionie. Podobnie jak w przypadku normalnego przywracania, maszyna docelowa powinna być zarejestrowana w magazynie docelowym w regionie pomocniczym. Poniższa sekwencja kroków powinna wyjaśnić kompleksową procedurę.

  • Pobieranie elementów kopii zapasowej replikowanych do regionu pomocniczego
  • W przypadku takiego elementu pobierz punkty odzyskiwania (odrębne i/lub dzienniki), które są replikowane do regionu pomocniczego
  • Następnie wybierz serwer docelowy zarejestrowany w skarbcu w sparowanym regionie zapasowym
  • Zainicjuj przywracanie na ten serwer i śledź je za pomocą JobId.

Pobieranie elementów kopii zapasowej z regionu pomocniczego

Pobierz wszystkie elementy kopii zapasowej SQL z regionu pomocniczego za pomocą zwykłego polecenia, ale z dodatkowym parametrem wskazującym, że te elementy powinny być pobierane z regionu pomocniczego.

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
Pobierz unikalne punkty odzyskiwania z regionu zapasowego

Użyj polecenia Get-AzRecoveryServicesBackupRecoveryPoint w celu pobrania odrębnych punktów odzyskiwania (pełnych/różnicowych) dla kopii zapasowej bazy danych SQL oraz dodania parametru, który wskaże, że są to punkty pobierane z regionu zapasowego.

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate -UseSecondaryRegion

Dane wyjściowe są podobne do poniższego przykładu

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

Użyj filtru "RecoveryPointId" lub filtru tablicy, aby pobrać odpowiedni punkt odzyskiwania.

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
Pobieranie punktów przywracania dziennika z regionu zapasowego

Użyj polecenia cmdlet Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell z parametrem "-UseSecondaryRegion", który zwróci czas rozpoczęcia i zakończenia nierozwiązanego, ciągłego łańcucha dzienników dla tego elementu kopii zapasowej SQL z regionu pomocniczego. Żądany punkt w czasie powinien mieścić się w tym zakresie.

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $secondaryBkpItems[0] -VaultId $testVault.ID -UseSecondaryRegion

Dane wyjściowe będą podobne do poniższego przykładu.

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

Powyższe dane wyjściowe oznaczają, że można przywrócić do dowolnego punktu w czasie między wyświetlanym czasem rozpoczęcia a czasem zakończenia. Czasy są w formacie UTC. Skonstruuj dowolny punkt w czasie w programie PowerShell, który znajduje się w zakresie przedstawionym powyżej.

Pobieranie serwera docelowego z regionu pomocniczego

Z regionu pomocniczego potrzebujemy magazynu i serwera docelowego zarejestrowanego w tym magazynie. Gdy mamy kontener dla pomocniczego regionu docelowego oraz wystąpienie SQL, możemy ponownie wykorzystać istniejące polecenia cmdlet do wygenerowania konfiguracji zadania przywracania. W tym dokumencie załóżmy, że nazwa maszyny wirtualnej to "secondaryVM", a nazwa wystąpienia na tej maszynie wirtualnej to "MSSQLInstance"

Najpierw pobieramy odpowiedni skarbiec znajdujący się w regionie pomocniczym, a następnie uzyskujemy zarejestrowane kontenery w tym skarbcu.

$PairedRegionVault = Get-AzRecoveryServicesVault -ResourceGroupName SecondaryRG -Name PairedVault
$secContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $PairedRegionVault.ID -FriendlyName "secondaryVM"

Po wybraniu zarejestrowanego kontenera pobieramy wystąpienia SQL w kontenerze, do którego ma zostać przywrócona baza danych. W tym miejscu przyjęto założenie, że istnieje 1 wystąpienie SQL w ramach "secondaryVM" i pobieramy to wystąpienie.

$secSQLInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -VaultId $PairedRegionVault.ID -Container $secContainer

Przygotowywanie konfiguracji odzyskiwania

Jak opisano powyżej w przypadku normalnego przywracania SQL, to samo polecenie można ponownie użyć do wygenerowania odpowiedniej konfiguracji odzyskiwania.

Pełne przywracanie z drugiego regionu
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
W przypadku przywracania w czasie określonego punktu dziennika z regionu wtórnego
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

Po uzyskaniu odpowiedniej konfiguracji dla przywracania regionu podstawowego lub przywracania regionu pomocniczego można użyć tego samego polecenia przywracania do wyzwalania przywracania i późniejszego śledzenia przy użyciu identyfikatorów zadań.

Przywróć z odpowiednią konfiguracją

Po uzyskaniu i zweryfikowaniu odpowiedniego obiektu konfiguracji odzyskiwania użyj polecenia cmdlet Restore-AzRecoveryServicesBackupItem programu PowerShell, aby rozpocząć proces przywracania.

Restore-AzRecoveryServicesBackupItem -WLRecoveryConfig $AnotherInstanceWithLogConfig -VaultId $testVault.ID -RestoreToSecondaryRegion

Operacja przywracania zwraca zadanie do śledzenia.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Restore              InProgress           3/17/2019 10:02:45 AM                                3274xg2b-e4fg-5952-89b4-8cb566gc1748

Zarządzanie kopiami zapasowymi SQL

Kopia zapasowa na żądanie

Po włączeniu tworzenia kopii zapasowej dla bazy danych można również wyzwolić kopię zapasową na żądanie dla bazy danych przy użyciu polecenia cmdlet Backup-AzRecoveryServicesBackupItem programu PowerShell. Poniższy przykład wyzwala pełną kopię zapasową tylko do kopiowania w bazie danych SQL z włączoną kompresją, a kopia zapasowa tylko do kopiowania powinna być przechowywana przez 60 dni.

Note

Pełne kopie zapasowe tylko do kopiowania są idealne do przechowywania długoterminowego, ponieważ nie mają żadnych powiązań z innymi typami kopii zapasowych, takimi jak dzienniki. Kopia zapasowa "Pełna" jest traktowana jako kopia nadrzędna kolejnych kopii zapasowych dziennika, a jej przechowywanie jest powiązane z przechowywaniem dzienników w polityce przechowywania. W związku z tym czas wygaśnięcia podany przez klienta jest honorowany dla pełnych kopii zapasowych wykonywanych tylko do celów kopiowania, a nie dla "pełnych" kopii zapasowych. Pełny czas przechowywania kopii zapasowej jest ustawiany automatycznie przez 45 dni od bieżącego czasu. Jest on również udokumentowany tutaj.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
$endDate = (Get-Date).AddDays(45).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $bkpItem -BackupType CopyOnlyFull -EnableCompression -VaultId $testVault.ID -ExpiryDateTimeUTC $endDate

Polecenie kopii zapasowej na żądanie zwraca zadanie do śledzenia.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Backup               InProgress           3/18/2019 8:41:27 PM                                2516bb1a-d3ef-4841-97a3-9ba455fb0637

Jeśli dane wyjściowe zostaną utracone lub chcesz uzyskać odpowiedni identyfikator zadania, pobierz listę zadań z usługi Azure Backup, a następnie śledź je i jego szczegóły.

Zmienianie zasad dla elementów kopii zapasowych

Możesz zmienić zasady elementu kopii zapasowej z Policy1 na Policy2. Aby przełączyć zasady dla elementu kopii zapasowej, pobierz odpowiednie zasady i utwórz kopię zapasową elementu i użyj polecenia Enable-AzRecoveryServices z elementem kopii zapasowej jako parametrem.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName>
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType MSSQL -BackupManagementType AzureWorkload -Name "<BackupItemName>"
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1

Polecenie czeka na ukończenie konfiguracji kopii zapasowej i zwraca następujące dane wyjściowe.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Edytowanie istniejących zasad tworzenia kopii zapasowych

Aby edytować istniejące zasady, użyj polecenia Set-AzRecoveryServicesBackupProtectionPolicy .

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -SchedulePolicy $SchPol -RetentionPolicy $RetPol

Sprawdź zadania tworzenia kopii zapasowej po pewnym czasie, aby śledzić wszelkie błędy. Jeśli istnieją, musisz rozwiązać problemy. Następnie uruchom ponownie polecenie edytowania zasad za pomocą parametru FixForInconsistentItems , aby ponowić próbę edycji zasad we wszystkich elementach kopii zapasowej, dla których operacja nie powiodła się wcześniej.

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

Ponowne rejestrowanie maszyn wirtualnych SQL

Warning

Pamiętaj, aby przeczytać ten dokument , aby zrozumieć objawy niepowodzenia i przyczyny przed podjęciem próby ponownej rejestracji

Aby wyzwolić ponowną rejestrację maszyny wirtualnej SQL, pobierz odpowiedni kontener kopii zapasowej i przekaż go do polecenia cmdlet register.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Register-AzRecoveryServicesBackupContainer -Container $SQLContainer -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

Zatrzymaj ochronę

Zachowywanie danych

Jeśli chcesz zatrzymać ochronę, możesz użyć polecenia cmdlet Disable-AzRecoveryServicesBackupProtection programu PowerShell. Spowoduje to zatrzymanie zaplanowanych kopii zapasowych, ale kopie zapasowe danych będą przechowywane na zawsze.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID

Usuwanie danych kopii zapasowej

Aby całkowicie usunąć przechowywane dane kopii zapasowej w magazynie, wystarczy dodać flagę "-RemoveRecoveryPoints" /przełącz się do polecenia ochrony "disable".

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID -RemoveRecoveryPoints

Wyłączanie automatycznej ochrony

Jeśli automatyczna ochrona została skonfigurowana na SQLInstance, możesz ją wyłączyć przy użyciu polecenia cmdlet Disable-AzRecoveryServicesBackupAutoProtection programu PowerShell.

Znajdź wystąpienia, w których włączono automatyczną ochronę przy użyciu następującego polecenia programu PowerShell.

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID | Where-Object {$_.IsAutoProtected -eq $true}

Następnie wybierz odpowiednią nazwę elementu chronionego i nazwę serwera z danych wyjściowych i wyłącz automatyczną ochronę dla tych wystąpień.

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Disable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

Wyrejestrowywanie maszyny wirtualnej SQL

Jeśli wszystkie bazy danych serwera SQL przestały być chronione i nie istnieją wszelkie dane kopii zapasowej, możesz wyrejestrować maszynę wirtualną SQL z tego skarbca. Tylko wtedy można chronić bazy danych w innym magazynie. Użyj polecenia cmdlet Unregister-AzRecoveryServicesBackupContainer programu PowerShell, aby wyrejestrować maszynę wirtualną SQL.

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
 Unregister-AzRecoveryServicesBackupContainer -Container $SQLContainer -VaultId $testVault.ID

Śledzenie zadań usługi Azure Backup

Należy pamiętać, że usługa Azure Backup śledzi tylko zadania wyzwalane przez użytkownika w kopii zapasowej SQL. Zaplanowane kopie zapasowe (w tym kopie zapasowe dzienników) nie są widoczne w portalu ani programie PowerShell. Jeśli jednak jakiekolwiek zaplanowane zadania kończą się niepowodzeniem, alert kopii zapasowej jest generowany i wyświetlany w portalu. Użyj usługi Azure Monitor , aby śledzić wszystkie zaplanowane zadania i inne istotne informacje.

Użytkownicy mogą śledzić operacje uruchamiane na żądanie przez użytkownika za pomocą JobID zwróconego w danych wyjściowych zadań asynchronicznych, takich jak kopie zapasowe. Użyj polecenia cmdlet Get-AzRecoveryServicesBackupJobDetail programu PowerShell, aby śledzić zadanie i jego szczegóły.

 Get-AzRecoveryServicesBackupJobDetails -JobId 2516bb1a-d3ef-4841-97a3-9ba455fb0637 -VaultId $testVault.ID

Aby uzyskać listę zadań na żądanie i ich stanu z usługi Azure Backup, użyj polecenia cmdlet Get-AzRecoveryServicesBackupJob programu PowerShell. Poniższy przykład zwraca wszystkie zadania SQL w toku.

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

Aby anulować zadanie w toku, użyj polecenia cmdlet Stop-AzRecoveryServicesBackupJob programu PowerShell.

Zarządzanie grupami dostępności SQL Always On

W przypadku zawsze włączonych grup dostępności SQL pamiętaj, aby zarejestrować wszystkie węzły grupy dostępności. Po zakończeniu rejestracji dla wszystkich węzłów obiekt grupy dostępności SQL jest logicznie tworzony w ramach elementów chronionych. Bazy danych w ramach grupy dostępności SQL zostaną wyświetlone jako "SQLDatabase". Węzły będą wyświetlane jako niezależne instancje, a domyślne bazy danych SQL, które się pod nimi znajdują, również będą wymienione jako bazy danych SQL.

Załóżmy na przykład, że grupa dostępności SQL ma dwa węzły: sql-server-0 i sql-server-1 i 1 baza danych grupy dostępności SQL. Po rejestracji obu węzłów, jeśli wyświetlisz listę elementów, które można chronić, pojawią się następujące składniki.

  • Obiekt grupy dostępności SQL — typ elementu, który można chronić jako SQLAvailabilityGroup
  • Baza danych grupy dostępności SQL — typ elementu, który można chronić jako SQLDatabase
  • sql-server-0 — typ elementu, który można chronić jako sqlInstance
  • sql-server-1 — typ elementu, który można chronić jako sqlInstance
  • Wszystkie domyślne bazy danych SQL (master, model, msdb) w ramach sql-server-0 — typ elementu chronionego jako SQLDatabase
  • Wszystkie domyślne bazy danych SQL (master, model, msdb) w obszarze sql-server-1 — chroniony typ elementu jako SQLDatabase

sql-server-0, sql-server-1 będzie również wyświetlany jako "AzureVMAppContainer", gdy zostaną wyświetlone kontenery kopii zapasowych.

Wystarczy pobrać odpowiednią bazę danych, aby włączyć tworzenie kopii zapasowych, a polecenia cmdlet programu PowerShell na żądanie i ich przywracanie są identyczne.