Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejs wiersza polecenia platformy Azure służy do tworzenia zasobów platformy Azure i zarządzania nimi z poziomu wiersza polecenia lub za pośrednictwem skryptów. W tym artykule opisano sposób przywracania kopii zapasowej bazy danych SQL na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure. Te akcje można również wykonać przy użyciu witryny Azure Portal.
Użyj Azure Cloud Shell, aby uruchomić polecenia interfejsu CLI.
Ten artykuł zakłada, że masz bazę danych SQL działającą na Azure VM, która jest backupowana za pomocą Azure Backup. Jeśli wykonałeś kopię zapasową bazy danych SQL w Azure przez utworzenie kopii zapasowej bazy danych SQL przy użyciu CLI, używasz następujących zasobów:
- Grupa zasobów o nazwie
SQLResourceGroup. - Skarbiec o nazwie
SQLVault. - Chroniony kontener o nazwie
VMAppContainer;Compute;SQLResourceGroup;testSQLVM. - Kopia zapasowa bazy danych/element o nazwie
sqldatabase;mssqlserver;testdb. - Zasoby w
westusregionie.
Aby wyświetlić scenariusze tworzenia kopii zapasowych i przywracania, które obecnie obsługujemy, zobacz macierz wsparcia. Często zadawane pytania można znaleźć w często zadawanych pytaniach.
Wyświetlanie punktów przywracania dla baz danych z kopii zapasowej
Aby wyświetlić listę wszystkich punktów odzyskiwania dla bazy danych, użyj polecenia az backup recoverypoint list jako:
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--item-name "sqldatabase;mssqlserver;testdb" \
--output table
Lista punktów odzyskiwania jest wyświetlana jako:
Name Time BackupManagementType Item Name RecoveryPointType
------------------- --------------------------------- --------------------- ---------------------- ------------------
7660777527047692711 2019-12-10T04:00:32.346000+00:00 AzureWorkload sqldatabase;mssqlserver;testdb Full
7896624824685666836 2019-12-15T10:33:32.346000+00:00 AzureWorkload sqldatabase;mssqlserver;testdb Differential
DefaultRangeRecoveryPoint AzureWorkload sqldatabase;mssqlserver;testdb Log
Powyższa lista zawiera trzy punkty odzyskiwania: każdy dla pełnej kopii zapasowej, kopii zapasowej różnicowej i kopii zapasowej logów.
Note
Możesz również wyświetlić punkty początkowe i końcowe każdego niezałamanego łańcucha kopii zapasowych dzienników przy użyciu polecenia az backup recoverypoint show-log-chain .
Wymagania wstępne dotyczące przywracania bazy danych
Przed przywróceniem bazy danych upewnij się, że zostały spełnione następujące wymagania wstępne:
- Bazę danych można przywrócić tylko do instancji SQL w regionie lokalnym lub w innym regionie, jeśli przywracanie między regionami jest aktywowane w skarbcu.
- Wystąpienie docelowe musi być zarejestrowane w tym samym magazynie co źródło, z wyjątkiem przywracania między regionami i przywracania między subskrypcjami. .
Przywracanie bazy danych
Usługa Azure Backup może przywrócić bazy danych SQL uruchomione na maszynach wirtualnych platformy Azure jako:
- Przywróć do określonej daty lub godziny (do sekundy) przy użyciu kopii zapasowych dziennika. Usługa Azure Backup automatycznie określa i zarządza odpowiednimi pełnymi, różnicowymi kopiami zapasowymi oraz łańcuchem kopii zapasowych dzienników, które są wymagane do przywrócenia na podstawie wybranego czasu.
- Przywracanie do określonej pełnej lub różnicowej kopii zapasowej w celu przywrócenia do określonego punktu odzyskiwania.
Aby przywrócić bazę danych, użyj polecenia az restore-azurewl , które wymaga obiektu konfiguracji odzyskiwania jako jednego z danych wejściowych. Ten obiekt można wygenerować za pomocą polecenia az backup recoveryconfig show . Obiekt konfiguracji odzyskiwania zawiera wszystkie szczegóły dotyczące wykonywania przywracania. Jednym z nich jest tryb przywracania — OriginalWorkloadRestore lub AlternateWorkloadRestore.
Note
OriginalWorkloadRestore: przywraca dane do tego samego wystąpienia SQL co oryginalne źródło. Ta opcja zastępuje oryginalną bazę danych. AlternateWorkloadRestore: przywraca bazę danych do alternatywnej lokalizacji i przechowuje oryginalną źródłową bazę danych.
Przywracanie do lokalizacji alternatywnej
Aby przywrócić bazę danych do alternatywnej lokalizacji, użyj polecenia AlternateWorkloadRestore jako trybu przywracania. Następnie należy wybrać punkt przywracania, który może być poprzednim punktem w czasie lub dowolnym z wcześniejszych punktów przywracania.
Przejdźmy do przywrócenia do poprzedniego punktu przywracania. Wyświetl listę punktów przywracania dla bazy danych i wybierz punkt, który chcesz przywrócić. W tym miejscu użyjemy punktu przywracania z nazwą 7660777527047692711.
Przy użyciu powyższej nazwy punktu przywracania i trybu przywracania utwórz obiekt konfiguracji odzyskiwania za pomocą polecenia az backup recoveryconfig show . Sprawdź pozostałe parametry w tym poleceniu:
- --target-item-name: nazwa, która ma być używana przez przywróconą bazę danych. W tym scenariuszu użyliśmy nazwy restored_database.
- --target-server-name: nazwa serwera SQL, który został pomyślnie zarejestrowany w skrytce usługi Recovery Services i pozostaje w tym samym regionie, co baza danych, która ma zostać przywrócona. W tym miejscu przywracasz bazę danych do tego samego serwera SQL, który jest chroniony, o nazwie testSQLVM.
- --target-server-type: w przypadku przywracania baz danych SQL należy użyć klasy SQLInstance.
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--item-name "SQLDataBase;mssqlserver;testdb" \
--restore-mode AlternateWorkloadRestore \
--rp-name 7660777527047692711 \
--target-item-name restored_database \
--target-server-name testSQLVM \
--target-server-type SQLInstance \
--workload-type SQLDataBase \
--output json
Odpowiedź na powyższe zapytanie to obiekt konfiguracji odzyskiwania, który jest wyświetlany jako:
{
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": "MSSQLSERVER/restored_database",
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;testdb",
"log_point_in_time": null,
"recovery_mode": null,
"recovery_point_id": "7660777527047692711",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase",
"alternate_directory_paths": []
}
Teraz, aby przywrócić bazę danych, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź powyższe dane wyjściowe JSON zapisane w pliku o nazwie recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
Dane wyjściowe są wyświetlane jako:
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ----------- ---------- --------------------------------- ------------------------ -------------------------------- --------------
be7ea4a4-0752-4763-8570-a306b0a0106f Restore InProgress testdb [testSQLVM] AzureWorkload 2022-06-21T03:51:06.898981+00:00 0:00:05.652967
Odpowiedź zawiera nazwę zadania. Tej nazwy zadania można użyć do śledzenia stanu zadania za pomocą polecenia az backup job show .
Przywracanie i zastępowanie
Aby przywrócić do oryginalnej lokalizacji, użyj elementu OriginalWorkloadRestore jako trybu przywracania. Następnie należy wybrać punkt przywracania, który może być poprzednim punktem w czasie lub dowolnym z poprzednich punktów przywracania.
Na przykład wybierzmy poprzedni punkt w czasie "28-11-2019-09:53:00" w celu przywrócenia. Ten punkt przywracania można podać w następujących formatach: dd-mm-rrrr, dd-mm-rrrr-hh:mm:ss. Aby wybrać prawidłowy punkt w czasie do przywrócenia, użyj polecenia az backup recoverypoint show-log-chain , które wyświetla interwały niepowiązanych kopii zapasowych łańcucha dzienników.
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--item-name "sqldatabase;mssqlserver;testdb" \
--restore-mode OriginalWorkloadRestore \
--log-point-in-time 20-06-2022-09:02:41 \
--output json
Odpowiedź na powyższe zapytanie to obiekt konfiguracji odzyskiwania, który jest wyświetlany jako:
{
"alternate_directory_paths": null,
"container_id": null,
"container_uri": "VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
"database_name": null,
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;testdb",
"log_point_in_time": "20-06-2022-09:02:41",
"recovery_mode": null,
"recovery_point_id": "DefaultRangeRecoveryPoint",
"restore_mode": "OriginalLocation",
"source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase"
}
Teraz, aby przywrócić bazę danych, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź powyższe dane wyjściowe JSON zapisane w pliku o nazwie recoveryconfig.json.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
Dane wyjściowe są wyświetlane jako:
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ----------- ---------- ------------------------------- ------------------------ -------------------------------- --------------
1730ec49-166a-4bfd-99d5-93027c2d8480 Restore InProgress testdb [testSQLVM] AzureWorkload 2022-06-21T04:04:11.161411+00:00 0:00:03.118076
Odpowiedź zawiera nazwę zadania. Tej nazwy zadania można użyć do śledzenia stanu zadania przy użyciu polecenia az backup job show .
Przywracanie do regionu pomocniczego
Aby przywrócić bazę danych do regionu zapasowego, określ docelowy magazyn i serwer znajdujący się w regionie zapasowym w konfiguracji przywracania.
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;compute;SQLResourceGroup;testSQLVM" \
--item-name "sqldatabase;mssqlserver;testdb" \
--restore-mode AlternateWorkloadRestore \
--from-full-rp-name 293170069256531 \
--rp-name 293170069256531 \
--target-server-name targetSQLServer \
--target-container-name "VMAppContainer;compute;SQLResourceGroup;targetSQLServer" \
--target-item-name testdb_restore_1 \
--target-server-type SQLInstance \
--workload-type SQLDataBase \
--target-resource-group SQLResourceGroup \
--target-vault-name targetVault \
--backup-management-type AzureWorkload
Odpowiedź to obiekt konfiguracji odzyskiwania, który jest wyświetlany jako:
{
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": "MSSQLSERVER/testdb_restore_1",
"filepath": null,
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;testdb",
"log_point_in_time": null,
"recovery_mode": null,
"recovery_point_id": "293170069256531",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase",
"alternate_directory_paths": []
}
Użyj tej konfiguracji odzyskiwania w poleceniu az restore restore-azurewl. Wybierz flagę --use-secondary-region , aby przywrócić bazę danych do regionu pomocniczego.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
Dane wyjściowe są wyświetlane jako:
Name Operation Status Item Name Backup Management Type Start Time UTC Duration
------------------------------------ ------------------ ---------- ------------------------- ------------------------ -------------------------------- --------------
0d863259-b0fb-4935-8736-802c6667200b CrossRegionRestore InProgress testdb [testSQLVM] AzureWorkload 2022-06-21T08:29:24.919138+00:00 0:00:12.372421
Note
Punkt odzyskiwania (RPO) dla danych kopii zapasowej, który ma być dostępny w regionie zapasowym, wynosi 12 godzin. W związku z tym po włączeniu funkcji CRR docelowy punkt odzyskiwania dla regionu pomocniczego wynosi 12 godzin plus czas trwania częstotliwości rejestrowania dzienników (który można ustawić na co najmniej 15 minut).
Przywróć jako pliki
Aby przywrócić dane kopii zapasowej jako pliki zamiast bazy danych, użyj polecenia RestoreAsFiles jako trybu przywracania. Następnie wybierz punkt przywracania, który może być wcześniejszym punktem czasowym lub jednym z wcześniejszych punktów przywracania. Gdy pliki zostaną wgrane do określonej ścieżki, możesz przenieść te pliki na dowolną maszynę SQL, aby je przywrócić jako bazę danych. Ponieważ można przenieść te pliki na dowolną maszynę, możesz teraz przywrócić dane między subskrypcjami i regionami.
Wybierz wcześniejszy punkt w czasie 28-11-2019-09:53:00, który ma zostać przywrócony, oraz miejsce zapisania plików kopii zapasowej jako C:\restoreasfiles na tym samym serwerze SQL. Ten punkt przywracania można podać w jednym z następujących formatów: dd-mm-yyyy lub dd-mm-yyyy-hh:mm:ss. Aby wybrać prawidłowy punkt w czasie do przywrócenia, użyj polecenia az backup recoverypoint show-log-chain , które wyświetla interwały niepowiązanych kopii zapasowych łańcucha dzienników.
Przy użyciu powyższej nazwy punktu przywracania i trybu przywracania utwórz obiekt konfiguracji odzyskiwania za pomocą polecenia az backup recoveryconfig show . Sprawdź wszystkie pozostałe parametry w tym poleceniu:
- --target-container-name: nazwa serwera SQL, który został pomyślnie zarejestrowany w magazynie Recovery Services i znajduje się w tym samym regionie co baza danych do przywrócenia. Przywróćmy bazę danych jako pliki na ten sam serwer SQL, który został objęty ochroną, nazwany mssqlserver.
- --rp-name: dla przywracania do określonego punktu w czasie, nazwa punktu przywracania to DefaultRangeRecoveryPoint.
az backup recoveryconfig show --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--item-name "sqldatabase;mssqlserver;testdb" \
--restore-mode RestoreAsFiles \
--rp-name 932606668166874635 \
--target-container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--filepath "C:\restoreasfiles" \
--output json
Odpowiedź na powyższe zapytanie js obiekt konfiguracji odzyskiwania, który jest wyświetlany jako:
{
"alternate_directory_paths": null,
"container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
"container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
"database_name": null,
"filepath": "C:\restoreasfiles",
"item_type": "SQL",
"item_uri": "SQLDataBase;mssqlserver;testdb",
"log_point_in_time": null,
"recovery_mode": "FileRecovery",
"recovery_point_id": "932606668166874635",
"restore_mode": "AlternateLocation",
"source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
"workload_type": "SQLDataBase"
}
Teraz, aby przywrócić bazę danych jako pliki, uruchom polecenie az restore-azurewl . Aby użyć tego polecenia, wprowadź dane wyjściowe JSON powyżej zapisane w pliku o nazwie recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output json
Dane wyjściowe są wyświetlane jako:
{
"eTag": null,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
"location": null,
"name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
"properties": {
"actionsInfo": [
"1"
],
"activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
"backupManagementType": "AzureWorkload",
"duration": "0:00:04.304322",
"endTime": null,
"entityFriendlyName": "testdb [testSQLVM]",
"errorDetails": null,
"extendedInfo": {
"dynamicErrorMessage": null,
"propertyBag": {
"Job Type": "Restore as files"
},
"tasksList": [
{
"status": "InProgress",
"taskId": "Transfer data from vault"
}
]
},
"isUserTriggered": true,
"jobType": "AzureWorkloadJob",
"operation": "Restore",
"startTime": "2022-06-22T05:53:32.951666+00:00",
"status": "InProgress",
"workloadType": "SQLDataBase"
},
"resourceGroup": "SQLResourceGroup",
"tags": null,
"type": "Microsoft.RecoveryServices/vaults/backupJobs"
}
Odpowiedź zawiera nazwę zadania. Tej nazwy zadania można użyć do śledzenia stanu zadania przy użyciu polecenia az backup job show .
Note
Jeśli nie chcesz przywracać całego łańcucha, ale tylko podzbioru plików, wykonaj kroki opisane tutaj.
Przywracanie subskrypcji między kontami
W przypadku funkcji przywracania między subskrypcjami (CSR) możesz elastycznie przywracać dane do dowolnej subskrypcji i dowolnej skrytki w dzierżawie, o ile są dostępne uprawnienia przywracania. Domyślnie CSR jest włączone we wszystkich magazynach Recovery Services (zarówno istniejących, jak i nowo utworzonych magazynach).
Note
- Możesz wyzwolić przywracanie między subskrypcjami z magazynu usług odzyskiwania.
- CSR jest obsługiwane tylko w przypadku kopii strumieniowej i nie jest obsługiwane w przypadku kopii migawkowej.
- Przywracanie między regionami (CRR) z CSR nie jest obsługiwane.
az backup vault create
Dodaj parametr cross-subscription-restore-state, który umożliwia ustawienie stanu CSR magazynu podczas jego tworzenia i aktualizowania.
az backup recoveryconfig show
Dodaj parametr --target-subscription-id, który umożliwia podanie docelowej subskrypcji jako danych wejściowych podczas wyzwalania przywracania danych między subskrypcjami w źródłach danych SQL lub HANA.
Example:
az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Enable
az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}
Przywracaj migawki instancji SQL
Poniższe przykłady wykorzystują składnię PowerShell shell, a nie Bash. Użyj wersji Azure CLI, która udostępnia opcje migawki przedstawione w tym artykule. Przejrzyj wymagania dotyczące przywracania snapshotów oraz matrycę wsparcia.
Zastąp symbole zastępcze przed użyciem. Ukończ wspólną konfigurację i wybierz tylko wymagany scenariusz przywracania. Poniższe przykłady są alternatywami, a nie skryptem do pełnego wykonania. Polecenia przywracania mogą nadpisywać dane lub zmieniać podłączenia dysków.
Skonfiguruj zmienne przywracania migawek
Korzystaj z subskrypcji vaulta w przypadku $vaultSubscription. Przygotuj docelową grupę zasobów oraz zarządzaną tożsamość przypisaną przez użytkownika z wymaganymi uprawnieniami:
$vaultSubscription = "<vault-subscription-id>"
$vaultRg = "<vault-rg>"
$vaultName = "<vault-name>"
$sourceVm = "<source-vm-name>"
$targetVm = "<target-vm-name>"
$targetInstanceName = "<target-instance-name>"
$restoreRg = "<restore-resource-group>"
$uamiId = "/subscriptions/<subscription-id>/resourceGroups/<identity-rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>"
$vaultArgs = @("--subscription", $vaultSubscription, "--resource-group", $vaultRg, "--vault-name", $vaultName)
az backup vault show --subscription $vaultSubscription --resource-group $vaultRg --name $vaultName
az backup container list @vaultArgs --backup-management-type AzureWorkload `
--query "[].{Name:name,VM:properties.friendlyName}" --output table
$containerName = "<native-source-container-name>"
$targetContainerName = "<native-target-container-name>"
$sourceArgs = $vaultArgs + @("--container-name", $containerName, "--backup-management-type", "AzureWorkload")
az backup item list @sourceArgs --workload-type SQLInstance --output json
$instanceItemName = "<native-protected-instance-item-name>"
$instanceArgs = $sourceArgs + @("--item-name", $instanceItemName, "--workload-type", "SQLInstance")
Skopiuj dokładne natywne nazwy kontenerów i chronionych elementów z wyjścia usługi. Konfiguracja źródłowa i docelowa powyżej korzysta z tego samego magazynu. Dla przywracania w alternatywnych lokalizacjach sprawdź, czy docelowa instancja jest wykrywalna:
az backup protectable-item show @vaultArgs --workload-type MSSQL `
--protectable-item-type SQLInstance --name $targetInstanceName --server-name $targetVm
Opcje długie w tych przykładach wspierają także następujące krótsze aliasy:
| Długa opcja | Alias |
|---|---|
--restore-point-query-type |
--rp-query-type |
--get-latest-recovery-point-only |
--latest-rp-only |
--base-snapshot-recovery-point-id |
--base-snapshot-rp-id |
--base-recovery-point-datasource-id |
--base-datasource-id |
Punkty odzyskiwania migawek zapytań
Wymień wszystkie żądane typy punktów odzyskania dla danego okna czasowego, tylko migawki lub tylko najnowsze migawki:
$startDate = (Get-Date).ToUniversalTime().AddDays(-7).ToString("dd-MM-yyyy-HH:mm:ss")
$endDate = (Get-Date).ToUniversalTime().ToString("dd-MM-yyyy-HH:mm:ss")
az backup recoverypoint list @instanceArgs --start-date $startDate --end-date $endDate `
--restore-point-query-type FullDifferentialAndSnapshot --output json
az backup recoverypoint list @instanceArgs --restore-point-query-type Snapshot --output json
az backup recoverypoint list @instanceArgs --restore-point-query-type Snapshot `
--get-latest-recovery-point-only true --output json
Jawnie wybierz punkt odzyskiwania; nie zakładaj kolejności na liście. Pobierz pełne szczegóły, aby sprawdzić zawarte bazy danych i informacje o systemie plików:
$snapshotRpName = "<selected-snapshot-recovery-point-name>"
$snapshotJson = az backup recoverypoint show @instanceArgs --name $snapshotRpName --output json
if ($LASTEXITCODE -ne 0) { throw "Could not read the selected snapshot recovery point." }
$snapshotRp = $snapshotJson | ConvertFrom-Json
$snapshotRp.properties.extendedInfo.includedDatabases | Select-Object datasourceName, datasourceId
$snapshotRp.properties.extendedInfo.snapshotRecoveryPointInfo.snapshotResourceGroup
$snapshotRp.properties.extendedInfo.snapshotRecoveryPointInfo.sourceFilesystemInfo |
Select-Object label, fileSystemType, accessPaths, isOnStorageSpace, storageSpaceInfo, diskInfoList
Zakresy logów oparte na migawkach zapytań
Odzyskaj instancjiprotectedItemDataSourceId. Ten identyfikator jest podstawowym źródłem danych dla zapytań logowych, a nie ID źródła danych pojedynczej bazy danych.
$instanceJson = az backup item show @sourceArgs --name $instanceItemName `
--workload-type SQLInstance --output json
if ($LASTEXITCODE -ne 0) { throw "Could not read the protected instance." }
$instanceItem = $instanceJson | ConvertFrom-Json
$instanceDatasourceId = $instanceItem.properties.protectedItemDataSourceId
az backup item list @sourceArgs --workload-type MSSQL --output json
$dbItemName = "<selected-native-database-item-name>"
$databaseArgs = $sourceArgs + @("--item-name", $dbItemName, "--workload-type", "MSSQL")
az backup recoverypoint show-log-chain @databaseArgs `
--recovery-mode SnapshotAttachAndRecover `
--base-snapshot-recovery-point-id $snapshotRpName `
--base-recovery-point-datasource-id $instanceDatasourceId --output json
Wybierz element bazy danych odpowiadający jednej z baz danych dołączonych do snapshotu. Używaj show-log-chain do ciągłych zakresów czasu odzyskiwania, zamiast traktować pojedyncze punkty odzysku jako zakresy dziennika.
Przywracanie instancji do oryginalnej lokalizacji
Wygeneruj konfigurację przywracania do oryginalnej lokalizacji (OLR).
$configFile = ".\instance-olr.json"
az backup recoveryconfig show @instanceArgs --rp-name $snapshotRpName `
--restore-mode OriginalWorkloadRestore --recovery-mode SnapshotAttachAndRecover `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --output json |
Set-Content -Encoding utf8 $configFile
Przed przesłaniem sprawdź mapowania woluminów. Przywracanie w oryginalnej lokalizacji może nadpisać oryginalne bazy danych.
Przywracanie instancji do alternatywnej lokalizacji
Użyj docelowego kontenera, serwera i instancji SQL. Ustaw --target-item-name na wymaganą nazwę docelowej bazy danych lub wzorzec nazewnictwa instancji wspierany przez usługę:
$configFile = ".\instance-alr.json"
az backup recoveryconfig show @instanceArgs --rp-name $snapshotRpName `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttachAndRecover `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--target-item-name "<target-database-name-or-service-supported-instance-pattern>" `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --output json |
Set-Content -Encoding utf8 $configFile
Przywracanie instancji do punktu w czasie
Użyj wybranego migawki instancji oraz jej bazowego identyfikatora źródła danych z wcześniejszych zapytań. Przypisz każdą uwzględnioną bazę danych do unikalnego chronionego elementu, a następnie odpytaj zakresy dziennika transakcji powyżej tej migawki:
$includedDatabases = @($snapshotRp.properties.extendedInfo.includedDatabases)
if ($includedDatabases.Count -eq 0) { throw "The snapshot has no included databases." }
$itemsJson = az backup item list @sourceArgs --workload-type MSSQL --output json
if ($LASTEXITCODE -ne 0) { throw "Could not list protected databases." }
$databaseItems = @($itemsJson | ConvertFrom-Json)
$logRangesPerDb = @{}
foreach ($database in $includedDatabases) {
$matchingItems = @($databaseItems | Where-Object {
$_.properties.protectedItemDataSourceId -eq $database.datasourceId
})
if ($matchingItems.Count -eq 0) {
$matchingItems = @($databaseItems | Where-Object {
$_.name -eq "SQLDataBase;$($database.datasourceName)" -or
$_.properties.friendlyName -eq $database.datasourceName
})
}
if ($matchingItems.Count -ne 1) {
throw "Could not uniquely resolve included database $($database.datasourceName)."
}
$rangesJson = az backup recoverypoint show-log-chain @sourceArgs `
--item-name $matchingItems[0].name --workload-type MSSQL `
--recovery-mode SnapshotAttachAndRecover `
--base-snapshot-recovery-point-id $snapshotRpName `
--base-recovery-point-datasource-id $instanceDatasourceId `
--query "[].properties.timeRanges[]" --output json
if ($LASTEXITCODE -ne 0) { throw "Could not query snapshot-based log ranges." }
$logRangesPerDb[$database.datasourceName] = @(
foreach ($range in ($rangesJson | ConvertFrom-Json)) {
if (-not $range.startTime -or -not $range.endTime) {
throw "The service returned a log range without startTime or endTime."
}
[PSCustomObject]@{
ItemName = $matchingItems[0].name
StartTime = ([DateTimeOffset]$range.startTime).UtcDateTime
EndTime = ([DateTimeOffset]$range.endTime).UtcDateTime
}
}
)
if ($logRangesPerDb[$database.datasourceName].Count -eq 0) {
throw "No snapshot-based log ranges for $($database.datasourceName)."
}
}
Sprawdź zakresy bazy danych i wybierz czas UTC. Poniższy przykład wybiera najpóźniejszy czas zakończenia dla tej bazy, a następnie weryfikuje, czy czas ten jest dostępny także dla każdej uwzględnionej bazy danych. Jeśli walidacja się nie powiedzie, wybierz czas we wspólnych dostępnych przedziałach czasowych i ponownie przeprowadź kontrolę:
$selectedDatabase = "<instance-name>;<database-name>"
if (-not $logRangesPerDb.ContainsKey($selectedDatabase)) {
throw "Select a database from logRangesPerDb.Keys."
}
$selectedRanges = @($logRangesPerDb[$selectedDatabase] | Sort-Object EndTime)
$selectedRanges | Format-Table ItemName, StartTime, EndTime
$rangeIndex = -1
$pointInTime = $selectedRanges[$rangeIndex].EndTime
foreach ($databaseName in $logRangesPerDb.Keys) {
$matchingRanges = @($logRangesPerDb[$databaseName] | Where-Object {
$_.StartTime -le $pointInTime -and $_.EndTime -ge $pointInTime
})
if ($matchingRanges.Count -eq 0) {
throw "The chosen restore time is unavailable for $databaseName."
}
}
$pit = $pointInTime.ToString("dd-MM-yyyy-HH:mm:ss")
Wygeneruj konfigurację PITR na podstawie podstawowej migawki i zweryfikowanego czasu odtworzenia logu:
$configFile = ".\instance-pit.json"
az backup recoveryconfig show @instanceArgs --rp-name $snapshotRpName --log-point-in-time $pit `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttachAndRecover `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--target-item-name "<target-database-name-or-service-supported-instance-pattern>" `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --no-recovery-mode `
--output json | Set-Content -Encoding utf8 $configFile
--no-recovery-mode wymaga, aby bazy danych pozostały nieprzywrócone na potrzeby kolejnych etapów odzyskiwania. Przeanalizuj, czy takie zachowanie jest odpowiednie dla Twojego planu odzyskiwania.
Przywróć instancję jako dyski
Zastosowanie SnapshotAttach do przywracania jako dysków (RAD), zamiast dołączania migawki, a następnie odzyskiwania bazy danych:
$configFile = ".\instance-rad.json"
az backup recoveryconfig show @instanceArgs --rp-name $snapshotRpName `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttach `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --output json |
Set-Content -Encoding utf8 $configFile
Przywróć bazę danych chronioną w ramach instancji
Wybierz dokładną natywną nazwę elementu bazy danych z kontenera źródłowego. W przypadku przywracania do punktu odzyskiwania wybierz jawnie migawkę bazy danych:
az backup item list @sourceArgs --workload-type MSSQL --output json
$dbItemName = "<native-protected-database-item-name>"
$databaseArgs = $sourceArgs + @("--item-name", $dbItemName, "--workload-type", "MSSQL")
az backup recoverypoint list @databaseArgs --restore-point-query-type Snapshot --output json
$dbSnapshotRpName = "<chosen-database-snapshot-recovery-point-name>"
az backup recoverypoint show @databaseArgs --name $dbSnapshotRpName --output json
Przywracanie bazy danych do lokalizacji alternatywnej
$configFile = ".\database-alr.json"
az backup recoveryconfig show @databaseArgs --rp-name $dbSnapshotRpName `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttachAndRecover `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--target-item-name "<restored-db-name>" --snapshot-rg $restoreRg `
--identity-arm-id $uamiId --no-recovery-mode --output json |
Set-Content -Encoding utf8 $configFile
Przywracanie bazy danych do punktu w czasie
Sprawdź dostępne zakresy logów i wybierz czas UTC w zwróconym zakresie. Użyj formatu dd-MM-yyyy-HH:mm:ss :
az backup recoverypoint show-log-chain @databaseArgs --output json
$pit = "<dd-MM-yyyy-HH:mm:ss-in-UTC-within-a-returned-range>"
$configFile = ".\database-pit.json"
az backup recoveryconfig show @databaseArgs --log-point-in-time $pit `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttachAndRecover `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--target-item-name "<restored-db-name>" --snapshot-rg $restoreRg `
--identity-arm-id $uamiId --no-recovery-mode --output json |
Set-Content -Encoding utf8 $configFile
Powyższe przykłady przywracania bazy danych również wykorzystują --no-recovery-mode. Sprawdź to ustawienie przed przesłaniem.
Przywracanie bazy danych na dyski
$configFile = ".\database-rad.json"
az backup recoveryconfig show @databaseArgs --rp-name $dbSnapshotRpName `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttach `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --output json |
Set-Content -Encoding utf8 $configFile
Przywracanie bazy danych z dyskami jako dyskami i dziennikami jako plikami
Ustaw $pit na prawidłowy czas UTC z zakresów logów bazy danych, jak w przykładzie PITR bazy danych. Wygeneruj konfigurację dołączania dysku, a następnie ustaw miejsce docelowe dla plików logów:
$configFile = ".\database-rad-logs.json"
az backup recoveryconfig show @databaseArgs --log-point-in-time $pit `
--restore-mode AlternateWorkloadRestore --recovery-mode SnapshotAttach `
--target-container-name $targetContainerName --target-server-name $targetVm `
--target-server-type SQLInstance --target-instance-name $targetInstanceName `
--snapshot-rg $restoreRg --identity-arm-id $uamiId --output json |
Set-Content -Encoding utf8 $configFile
Po potwierdzeniu, że generowanie konfiguracji zakończyło się sukcesem, edytuj wygenerowane mapowania:
$cfg = Get-Content -Raw $configFile | ConvertFrom-Json
$cfg.target_directory_mapping = @{ all = 'C:\temp' }
($cfg.target_physical_path | Where-Object source_path -eq 'E:\').target_path = 'M:\'
$cfg | ConvertTo-Json -Depth 100 | Set-Content -Encoding utf8 $configFile
Przejrzyj i prześlij żądanie przywrócenia migawki
Dla każdego wybranego scenariusza potwierdź, że az backup recoveryconfig show się udało, zanim użyjesz jego wyjścia. Sprawdź wygenerowany plik i mapowania woluminów. Przemapuj tylko te woluminy źródłowe, które wymagają innej ścieżki docelowej. Zamień przykładowe litery dysków na rzeczywiste ścieżki:
$cfg = Get-Content -Raw $configFile | ConvertFrom-Json
$cfg.target_physical_path | Format-Table source_path, target_path
($cfg.target_physical_path | Where-Object source_path -eq 'E:\').target_path = 'X:\'
$cfg | ConvertTo-Json -Depth 100 | Set-Content -Encoding utf8 $configFile
Poprzednie przemapowanie jest opcjonalne. Zachowaj zamierzone mapowania dla wybranego scenariusza, w tym konfigurację dysku i pliku loga bazy danych.
Jeśli do rozwiązania konfliktu systemu plików wymagane jest odłączenie dysku, do wygenerowanej konfiguracji dodaj tylko wyraźnie zatwierdzone ID dysków:
$cfg = Get-Content -Raw $configFile | ConvertFrom-Json
$cfg.disks_to_detach_on_clash = @(
"/subscriptions/<subscription-id>/resourceGroups/<disk-rg>/providers/Microsoft.Compute/disks/<disk-name>"
)
$cfg | ConvertTo-Json -Depth 100 | Set-Content -Encoding utf8 $configFile
Warning
Odłączenie istniejących dysków może zakłócić obciążenia w miejscu docelowym. Sprawdź każdy identyfikator dysku oraz pełną konfigurację odzyskiwania przed uruchomieniem operacji przywracania. Nie stosuj opcjonalnego przykładu odłączania dysku, chyba że operacja jest wymagana i zatwierdzona.
Prześlij tylko plik konfiguracyjny dla wybranej operacji:
az backup restore restore-azurewl @vaultArgs --recovery-config $configFile
Śledz zwróconą nazwę zadania za pomocą az backup job show. Informacje o poleceniach wyłączania ochrony przed zatrzymaniem i wyrejestrowywania znajdziesz w sekcji Zarządzaj kopiami zapasowymi migawek instancji SQL.
Następny krok
Treści powiązane
- Tworzenie kopii zapasowych baz danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu usługi Azure Backup za pośrednictwem interfejsu API REST.
- Przywracanie baz danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu interfejsu API REST.
- Zarządzanie bazami danych programu SQL Server na maszynach wirtualnych platformy Azure przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, interfejsu API REST.