Udostępnij za pośrednictwem


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 magazynu usługi Azure Backup Recovery Services.

W tym artykule opisano sposób wykonywania następujących czynności:

  • Skonfiguruj program PowerShell i zarejestruj dostawcę usług Azure Recovery Services.
  • Utwórz magazyn usługi Recovery Services.
  • Konfigurowanie kopii zapasowej bazy danych SQL na maszynie wirtualnej platformy Azure.
  • Uruchom zadanie tworzenia kopii zapasowej.
  • Przywracanie kopii zapasowej bazy danych SQL.
  • Monitorowanie zadań tworzenia kopii zapasowych i przywracania.

Przed rozpoczęciem

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ń cmdlet az.RecoveryServices w bibliotece platformy Azure.

Konfigurowanie i instalowanie

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

  1. Pobierz najnowszą wersję modułu Az programu 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 Azure Backup i magazynu usługi Recovery Services. Oto przykład tego, co można zobaczyć. Nie jest to pełna lista poleceń cmdlet.

    Lista poleceń cmdlet usługi Recovery Services

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

  5. Na wyświetlonej stronie internetowej zostanie wyświetlony monit o wprowadzenie poświadczeń konta.

    • Alternatywnie możesz dołączyć poświadczenia konta jako parametr w poleceniu cmdlet Connect-AzAccount z parametrem -Credential.
    • Jeśli jesteś partnerem CSP pracującym dla dzierżawy, określ klienta jako dzierżawę, używając identyfikatora dzierżawy lub podstawowej nazwy domeny dzierżawy. Przykładem jest fabrikam.com Connect-AzAccount -Tenant .
  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 wartość RegistrationState zmieni się na Zarejestrowano. Jeśli tak nie jest, uruchom ponownie polecenie cmdlet Register-AzResourceProvider .

Tworzenie magazynu usługi Recovery Services

Wykonaj następujące kroki, aby utworzyć magazyn usługi Recovery Services.

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. Magazyn jest umieszczany 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 utworzymy nową grupę zasobów w regionie Zachodnie stany USA.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Użyj polecenia cmdlet New-AzRecoveryServicesVault , aby utworzyć magazyn. Określ tę samą lokalizację magazynu, 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 magazynu.

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

Wyświetlanie magazynów 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 skojarzą 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

Ustawianie kontekstu magazynu

Zapisz obiekt magazynu w zmiennej i ustaw kontekst magazynu.

  • Wiele poleceń cmdlet usługi Azure Backup wymaga obiektu magazynu usługi Recovery Services jako danych wejściowych, więc wygodnie jest przechowywać obiekt magazynu w zmiennej.
  • Kontekst magazynu to typ 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 magazynu dla elementu testvault

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

Pobieranie identyfikatora magazynu

Planujemy wycofanie ustawienia kontekstu magazynu zgodnie z wytycznymi programu 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 kopii zapasowych

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

Ważne

Musisz podać czas rozpoczęcia tylko w 30 minutach wielokrotnych. 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".

W poniższym przykładzie są przechowywane zasady harmonogramu i zasady przechowywania 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łącz kopię zapasową

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"

Uwaga

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 wszystkich maszynach wirtualnych SQL zarejestrowanych w tym magazynie z typem elementu i parametrem ServerName. 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>"

Konfigurowanie kopii zapasowej

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 czeka na zakończenie 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łączanie automatycznego włączania ochrony

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 sqlInstance.

$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 podaniu intencji automatycznego włączania ochrony zapytanie dotyczące maszyny w celu pobrania nowo dodanych baz danych odbywa się jako zaplanowane zadanie w tle co 8 godzin.

Przywracanie baz danych SQL

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ą, aby przywrócić do określonego punktu odzyskiwania.

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

Ostrzeżenie

Ze względu na problem z zabezpieczeniami związany z kontrolą dostępu opartej na rolach musieliśmy wprowadzić zmianę powodującą niezgodność w poleceniach przywracania dla bazy danych SQL za pośrednictwem programu 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

Pobieranie odpowiedniego czasu przywracania

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

Pobieranie odrębnych punktów 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"

Pobieranie punktu w czasie punktu odzyskiwania

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.

Uwaga

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, czyli pełną kopię zapasową, którą 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 tym samym wystąpieniu 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.

Oryginalne przywracanie obciążenia

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 punktem w czasie dziennika
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

Przywracanie alternatywnego obciążenia

Ważne

Kopię zapasową bazy danych SQL można przywrócić jako nową bazę danych tylko do innej klasy SQLInstance na maszynie wirtualnej platformy Azure "zarejestrowanej" w tym magazynie.

Jak opisano powyżej, jeśli docelowa klasa SQLInstance znajduje się na innej maszynie wirtualnej platformy Azure, upewnij się, że jest ona zarejestrowana w tym magazynie , a odpowiednia klasa SQLInstance jest widoczna jako element z możliwością ochrony. W tym dokumencie przyjęto założenie, że docelowa nazwa wystąpienia SQL To MSSQLSERVER na 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 przekazać odpowiedni punkt odzyskiwania, docelowe wystąpienie SQL z prawą flagą, jak pokazano poniżej i kontener docelowy, w którym istnieje docelowe wystąpienie SQL.

Alternatywne przywracanie z odrębnym punktem odzyskiwania
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
Alternatywne przywracanie z punktem w czasie dziennika
$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 . Kopię zapasową bazy danych SQL można przywrócić do dowolnej docelowej maszyny wirtualnej zarejestrowanej w tym magazynie.

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

Jeśli chcesz nadać pełną, 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

Ważne

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.

Uwaga

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

Ważne

Obsługa przywracania w regionie pomocniczym dla programu SQL z programu PowerShell jest dostępna z modułu 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 wyzwolić przywracanie na maszynę, 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 magazynie w sparowanym regionie pomocniczym
  • Wyzwól przywracanie na ten serwer i śledź go przy użyciu identyfikatora 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
Pobieranie odrębnych punktów odzyskiwania z regionu pomocniczego

Użyj polecenia Get-AzRecoveryServicesBackupRecoveryPoint , aby pobrać odrębne punkty odzyskiwania (pełne/różnicowe) dla bazy danych SQL kopii zapasowej i dodać parametr, aby wskazać, że są to punkty odzyskiwania pobierane z regionu pomocniczego

$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 odzyskiwania dziennika z regionu pomocniczego

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 docelowy regionu pomocniczego i wystąpienie SQL, możemy ponownie użyć istniejących poleceń cmdlet w celu wygenerowania konfiguracji obciążenia 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 magazyn znajdujący się w regionie pomocniczym, a następnie pobieramy zarejestrowane kontenery w tym magazynie.

$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 regionu pomocniczego
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
W przypadku przywracania do punktu dziennika w czasie z regionu pomocniczego
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ń.

Przywracanie 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.

Uwaga

Kopie zapasowe tylko do kopiowania są idealne do przechowywania długoterminowego, ponieważ nie mają żadnych zależności od innych typów kopii zapasowych, takich jak dzienniki. Kopia zapasowa "Pełna" jest traktowana jako element nadrzędny kolejnych kopii zapasowych dziennika, dlatego przechowywanie jest powiązane z przechowywaniem dzienników w zasadach. W związku z tym klient podał czas wygaśnięcia jest honorowany dla kopii zapasowych tylko do 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

Ostrzeżenie

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

Zatrzymywanie ochrony

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 ochrony została skonfigurowana w usłudze 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 nie są już chronione i nie istnieją żadne dane kopii zapasowej, możesz wyrejestrować maszynę wirtualną SQL z tego magazynu. 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 wyzwalane na żądanie/użytkownika za pomocą identyfikatora JobID zwróconego w danych wyjściowych zadań asynchronicznych, takich jak kopia zapasowa. 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 zawsze włączonymi grupami dostępności SQL

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 wystąpienia autonomiczne, a domyślne bazy danych SQL w nich będą również wyświetlane 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 zarejestrowaniu obu tych węzłów, jeśli wyświetlisz listę elementów, które można chronić, zostaną wyświetlone 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 obszarze sql-server-0 — chroniony typ elementu 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.