Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure CLI slouží k vytváření a správě prostředků Azure z příkazového řádku nebo prostřednictvím skriptů. Tento článek popisuje, jak obnovit zálohovanou databázi SQL na virtuálním počítači Azure pomocí Azure CLI. Tyto akce můžete provádět také pomocí webu Azure Portal.
Ke spouštění příkazů rozhraní příkazového řádku použijte Azure Cloud Shell .
Tento článek předpokládá, že máte SQL databázi běžící na Azure VM, která je zálohována pomocí Azure Backup. Pokud jste k zálohování databáze SQL využili zálohování databáze SQL v Azure pomocí příkazového řádku (CLI), pak používáte následující prostředky:
- Skupina prostředků pojmenovaná
SQLResourceGroup. - Trezor s názvem
SQLVault. - Chráněný kontejner s názvem
VMAppContainer;Compute;SQLResourceGroup;testSQLVM. - Zálohovaná databáze/položka s názvem
sqldatabase;mssqlserver;testdb. - Prostředky v
westusoblasti.
Pokud chcete zobrazit scénáře zálohování a obnovení, které dnes podporujeme, podívejte se na matici podpory. Nejčastější dotazy najdete v nejčastějších dotazech.
Zobrazení bodů obnovení zálohované databáze
Pokud chcete zobrazit seznam všech bodů obnovení pro databázi, použijte příkaz 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
Seznam bodů obnovení se zobrazí takto:
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
Výše uvedený seznam obsahuje tři body obnovení: každý pro úplné zálohování, rozdílové zálohování a zálohování protokolů.
Note
Pomocí příkazu az backup recoverypoint show-log-chain můžete také zobrazit počáteční a koncové body každého nepřerušeného řetězce zálohování protokolů.
Požadavky na obnovení databáze
Před obnovením databáze se ujistěte, že jsou splněny následující požadavky:
- Databázi můžete obnovit pouze do instance SQL ve stejné oblasti nebo do jiné oblasti, pokud je v trezoru (vault) povolena funkce obnovení mezi oblastmi (Cross Region Restore).
- Cílová instance musí být zaregistrována ve stejném trezoru jako zdroj, s výjimkou funkcí Cross Region Restore a Cross Subscription Restore. .
Obnovení databáze
Azure Backup může obnovit databáze SQL spuštěné na virtuálních počítačích Azure jako:
- Obnovení k určitému datu nebo času (na sekundu přesně) s využitím záloh protokolů Azure Backup automaticky určuje odpovídající úplné a rozdílové zálohy a řetěz záloh protokolů transakcí, které jsou potřeba k obnovení dat na základě vybraného času.
- Obnovení do konkrétního úplného nebo rozdílového zálohování pro obnovení do konkrétního bodu obnovení.
K obnovení databáze použijte příkaz az restore restore-azurewl , který jako jeden ze vstupů vyžaduje objekt konfigurace obnovení. Tento objekt můžete vygenerovat pomocí příkazu az backup recoveryconfig show . Konfigurační objekt obnovení obsahuje všechny podrobnosti k provedení obnovení. Jedním z nich je režim obnovení – OriginalWorkloadRestore nebo AlternateWorkloadRestore.
Note
OriginalWorkloadRestore: Obnoví data do stejné instance SQL jako původní zdroj. Tato možnost přepíše původní databázi. AlternateWorkloadRestore: Obnoví databázi do alternativního umístění a zachová původní zdrojovou databázi.
Obnovení do alternativního umístění
Pokud chcete obnovit databázi do alternativního umístění, použijte jako režim obnovení AlternateWorkloadRestore. Pak musíte zvolit bod obnovení, což může být předchozí bod v čase nebo předchozí body obnovení.
Pojďme obnovit systém do předchozího bodu obnovení. Zobrazte seznam bodů obnovení pro databázi a zvolte bod, který chcete obnovit. Tady použijeme bod obnovení s názvem 7660777527047692711.
Pomocí výše uvedeného názvu bodu obnovení a režimu obnovení vytvořte objekt konfigurace obnovení pomocí příkazu az backup recoveryconfig show . Zkontrolujte zbývající parametry v tomto příkazu:
- --target-item-name: Název, který má obnovená databáze používat. V tomto scénáři jsme použili název restored_database.
- --target-server-name: Název sql serveru, který je úspěšně zaregistrovaný v trezoru služby Recovery Services, a zůstane stejnou oblastí jako databáze, která se má obnovit. Tady obnovujete databázi na stejný SQL server, který jste ochránili, s názvem testSQLVM.
- --target-server-type: Pro obnovení databází SQL je nutné použít 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
Odpověď na výše uvedený dotaz je objekt konfigurace obnovení, který se zobrazí takto:
{
"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": []
}
Teď spusťte příkaz az restore restore-azurewl , abyste databázi obnovili. Pokud chcete tento příkaz použít, zadejte výše uvedený výstup JSON, který se uloží do souboru s názvem recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
Výstup se zobrazí takto:
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
Odpověď vám poskytne název úlohy. Tento název úlohy můžete použít ke sledování stavu úlohy pomocí příkazu az backup job show .
Obnovení a přepsání
Pokud chcete provést obnovení do původního umístění, použijte jako režim obnovení OriginalWorkloadRestore . Pak musíte zvolit bod obnovení, což může být předchozí bod v čase nebo kterýkoli z předchozích bodů obnovení.
Jako příklad zvolíme předchozí bod v čase 28-11-2019-09:53:00 a obnovíme ho. Tento bod obnovení můžete zadat v následujících formátech: dd-mm-yyyy, dd-mm-yy-hh:mm:ss. Pokud chcete zvolit platný bod v čase k obnovení, použijte příkaz az backup recoverypoint show-log-chain , který uvádí intervaly nepřerušených záloh řetězu protokolů.
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
Odpověď na výše uvedený dotaz je objekt konfigurace obnovení, který se zobrazí takto:
{
"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"
}
Teď spusťte příkaz az restore restore-azurewl , abyste databázi obnovili. Pokud chcete tento příkaz použít, zadejte výše uvedený výstup JSON, který se uloží do souboru s názvem recoveryconfig.json.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
Výstup se zobrazí takto:
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
Odpověď vám poskytne název úlohy. Tento název úlohy můžete použít ke sledování stavu úlohy pomocí příkazu az backup job show .
Obnovení do sekundární oblasti
Pokud chcete obnovit databázi do sekundární oblasti, v konfiguraci obnovení zadejte cílový trezor a server umístěný v sekundární oblasti.
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
Odpověď je objekt konfigurace obnovení, který vypadá takto:
{
"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": []
}
Tuto konfiguraci obnovení použijte v příkazu az restore restore-azurewl . Výběrem příznaku --use-secondary-region obnovte databázi do sekundární oblasti.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
Výstup se zobrazí takto:
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
Cíl RPO pro zálohovaná data, která mají být k dispozici v sekundárním regionu, je 12 hodin. Proto, když zapnete CRR, RPO (cíl bodu obnovení) pro sekundární oblast je 12 hodin + doba trvání frekvence záznamu (kterou lze nastavit na minimálně 15 minut).
Obnovit jako soubory
Chcete-li obnovit zálohovaná data jako soubory místo databáze, použijte jako režim obnovení RestoreAsFiles . Pak zvolte bod obnovení, který může být předchozí bod v čase nebo jakékoli předchozí body obnovení. Jakmile se soubory zadají do zadané cesty, můžete tyto soubory převést na jakýkoli počítač SQL, na kterém je chcete obnovit jako databázi. Vzhledem k tomu, že tyto soubory můžete přesunout do libovolného počítače, můžete teď obnovit data napříč předplatnými a oblastmi.
Vyberte předchozí okamžik 28-11-2019-09:53:00 pro obnovení a místo pro export záložních souborů jako C:\restoreasfiles na stejném serveru SQL. Tento bod obnovení můžete zadat v jednom z následujících formátů: dd-mm-yyyy nebo dd-mm-y-hh:mm:ss. Pokud chcete zvolit platný bod v čase k obnovení, použijte příkaz az backup recoverypoint show-log-chain , který uvádí intervaly nepřerušených záloh řetězu protokolů.
Pomocí výše uvedeného názvu bodu obnovení a režimu obnovení vytvořte objekt konfigurace obnovení pomocí příkazu az backup recoveryconfig show . Zkontrolujte všechny zbývající parametry v tomto příkazu:
- --target-container-name: Název SERVERU SQL, který je úspěšně zaregistrován do trezoru služby Recovery Services a který se nachází ve stejné oblasti jako databáze, která se má obnovit. Obnovme databázi ze souborů na stejný SQL server, který jste chránili, nazvaný mssqlserver.
- --rp-name: Pro obnovení k určitému bodu v čase je název bodu obnovení 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
Odpověď na výše uvedený dotaz je objekt konfigurace obnovení, který se zobrazí 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"
}
Teď spusťte příkaz az restore restore-azurewl a obnovte databázi jako soubory. Chcete-li použít tento příkaz, zadejte výstup JSON výše, který je uložen do souboru s názvem recoveryconfig.json.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output json
Výstup se zobrazí takto:
{
"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"
}
Odpověď vám poskytne název úlohy. Tento název úlohy můžete použít ke sledování stavu úlohy pomocí příkazu az backup job show .
Note
Pokud nechcete obnovit celý řetězec, ale jenom podmnožinu souborů, postupujte podle zde uvedených kroků.
Obnovení napříč předplatnými
S obnovením mezi předplatnými (CSR) máte flexibilitu obnovení do libovolného předplatného a jakéhokoli trezoru v rámci vašeho tenanta, pokud jsou k dispozici oprávnění k obnovení. Ve výchozím nastavení je csr povolené pro všechny trezory služby Recovery Services (existující a nově vytvořené trezory).
Note
- Obnovení napříč předplatnými můžete aktivovat z trezoru služby Recovery.
- CSR se podporuje jenom pro zálohování založené na streamování a nepodporuje se pro zálohování založené na snímcích.
- Obnovení mezi oblastmi (CRR) s CSR není podporováno.
az backup vault create
Přidejte parametr cross-subscription-restore-state , který umožňuje nastavit stav CSR trezoru během vytváření a aktualizace trezoru.
az backup recoveryconfig show
Přidejte parametr --target-subscription-id, který vám umožní při aktivaci obnovení mezi předplatnými poskytnout cílové předplatné jako vstup pro zdroje dat SQL nebo 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}
Obnovení snapshotů SQL instance
Následující příklady používají syntaxi PowerShell shellu, nikoli Bash. Použijte verzi Azure CLI, která zpřístupňuje možnosti snapshotu uvedené v tomto článku. Projděte si požadavky na obnovení snapshotů a matici podpory.
Před použitím vyměňte zástupné symboly. Dokončete běžné nastavení a zvolte pouze požadovaný scénář obnovení. Následující příklady jsou alternativy, nikoli skript, který se má provést celý. Příkazy obnovení mohou přepsat data nebo změnit připojené disky.
Nastavte proměnné pro obnovení snapshotů
Použijte předplatné pro vault pro $vaultSubscription. Připravte cílovou skupinu zdrojů a uživatelem přiřazenou spravovanou identitu s požadovanými oprávněními:
$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")
Zkopírujte přesné nativní názvy kontejnerů a chráněných položek z výstupu služby. Výše uvedené nastavení zdroje a cíle používá stejné úložiště. Pro obnovení na alternativní místo ověřte, že cílová instance je zjistitelná:
az backup protectable-item show @vaultArgs --workload-type MSSQL `
--protectable-item-type SQLInstance --name $targetInstanceName --server-name $targetVm
Dlouhé volby v těchto příkladech také podporují následující kratší aliasy:
| Dlouhá možnost | 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 |
Body obnovení snímku dotazu
Uveďte všechny požadované typy bodů obnovy pro časové okno, pouze snapshoty, nebo pouze nejnovější snapshot:
$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
Vyberte bod obnovy explicitně; nepředpokládejte pořadí položek v seznamu. Získejte jeho úplné údaje pro kontrolu zahrnutých databází a informací o souborovém systému:
$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
Rozsahy logů založené na snímcích dotazů
Získejte instanciprotectedItemDataSourceId instance. Toto ID je základním zdrojem dat pro dotazy do logů, nikoli ID zdroje dat jednotlivé databáze.
$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
Vyberte položku databáze, která odpovídá jedné z databází zahrnutých ve snapshotu. Používejte show-log-chain pro kontinuální intervaly doby zotavení, místo abyste jednotlivé body obnovení považovali za rozsahy protokolu.
Obnovení instance do původního umístění
Vygenerujte konfiguraci obnovení původního místa (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
Před odesláním si zkontrolujte mapování svazků. Obnova na původní lokalitě může přepsat původní databáze.
Obnovení instanci do alternativního umístění
Použijte cílový kontejner, server a SQL instanci. Nastavte --target-item-name na požadovaný název cílové databáze nebo na vzor pojmenování instancí podporovaný službou:
$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
Obnovení instance k určitému časovému bodu
Použijte vybraný snímek instance a ID jeho základního zdroje dat, které pocházejí z předchozích dotazů. Namapujte každou zahrnutou databázi na jedinečnou chráněnou položku a poté se dotazujte na její rozsahy logů nad tímto snapshotem:
$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)."
}
}
Prohlédněte si intervaly databáze a zvolte čas UTC. Následující příklad zvolí nejpozdější čas ukončení této databáze a ověří, že je tento čas dostupný i pro každou zahrnutou databázi. Pokud ověření selže, vyberte čas v rámci běžně dostupných rozsahů a znovu spusťte kontrolu:
$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")
Vygenerujte konfiguraci PITR pomocí základního snímku a ověřeného času přehrávání 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 požaduje, aby databáze zůstaly neobnoveny pro další kroky obnovy. Zvažte, zda je toto chování vhodné pro váš plán zotavení.
Obnovení instance jako disků
Použijte SnapshotAttach pro obnovu jako disky (RAD) místo připojení snímků následovaného obnovou databáze:
$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
Obnovit databázi chráněnou instancí
Vyberte přesný nativní název položky databáze ze zdrojového kontejneru. Pro obnovení do bodu obnovení vyberte snímek databáze explicitně:
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
Obnovení databáze do alternativního umístění
$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
Obnovení databáze k určitému bodu v čase
Dotazujte se na dostupné rozsahy logů a vyberte čas UTC uvnitř vráceného rozsahu. Použijte formát: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
Předchozí příklady obnovy databáze také používají --no-recovery-mode. Před odesláním si toto nastavení prostudujte.
Obnova databáze na disky
$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
Obnovení databáze na disky se soubory protokolu
Nastavte $pit platný čas UTC z rozsahů databázových logů, jako v příkladu s PITR databáze. Vygenerujte konfiguraci připojení k disku a poté nastavte cíl pro logovací soubory:
$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 potvrzení, že generování konfigurace byla úspěšná, upravte generovaná mapování:
$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
Zkontrolujte a odešlete obnovení snapshotu
Pro každý vybraný scénář potvrďte, že az backup recoveryconfig show proběhne úspěšně, než použijete jeho výstup. Prohlédněte si vygenerovaný soubor a mapování svazků. Přemapujte pouze zdrojové objemy, které vyžadují jinou cílovou cestu. Nahraďte příkladová písmena disků skutečnými cestami:
$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
Předchozí přemapování je volitelné. Zachovejte zamýšlená mapování pro zvolený scénář, včetně jakékoli konfigurace databázových souborů disku a transakčního logu.
Pokud je k vyřešení kolize souborového systému potřeba odpojit disk, přidejte do generované konfigurace pouze explicitně schválená ID disku:
$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
Odpojení stávajících disků může narušit cílové úlohy. Před odesláním obnovy ověřte každé ID disku a kompletní konfiguraci obnovy. Nepoužívejte volitelný příklad odpojování disku, pokud operace není vyžadována a schválena, pouze pokud je operace vyžadována a schválena.
Odešlete pouze konfigurační soubor pro zvolenou operaci:
az backup restore restore-azurewl @vaultArgs --recovery-config $configFile
Sledujte vrácený název úlohy pomocí az backup job show. Příkazy pro zrušení ochrany před zastavením a odregistraci naleznete v části Správa záloh snímků instance SQL.
Další krok
Související obsah
- Zálohujte databáze SQL Serveru na virtuálních počítačích Azure pomocí služby Azure Backup prostřednictvím rozhraní REST API.
- Obnovení databází SQL Serveru na virtuálních počítačích Azure pomocí rozhraní REST API
- Správa databází SQL Serveru na virtuálních počítačích Azure pomocí webu Azure Portal, Azure CLI, rozhraní REST API