Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure CLI, Komut Satırı'ndan veya betikler aracılığıyla Azure kaynakları oluşturmak ve yönetmek için kullanılır. Bu makalede, Azure CLI kullanarak Bir Azure VM'de yedeklenmiş SQL veritabanının nasıl geri yükleneceği açıklanır. Bu eylemleri Azure portalını kullanarak da gerçekleştirebilirsiniz.
CLI komutlarını çalıştırmak için Azure Cloud Shell'i kullanın.
Bu makale, Azure VM'de çalışan ve Azure Backup ile yedeklenmiş bir SQL veritabanınız olduğunu varsayıyor. SQL veritabanınızı yedeklemek için CLI kullanarak Azure'da bir SQL veritabanını yedeklemeyi kullandıysanız aşağıdaki kaynakları kullanıyorsunuz demektir:
- adlı
SQLResourceGroupbir kaynak grubu. - adlı
SQLVaultbir kasa. - adlı
VMAppContainer;Compute;SQLResourceGroup;testSQLVMkorumalı kapsayıcı. -
sqldatabase;mssqlserver;testdbadlı yedeklenmiş bir veritabanı/öğe. -
westusBölgedeki kaynaklar.
Bugün desteklediğimiz yedekleme ve geri yükleme senaryolarını görüntülemek için destek matrisine bakın. Sık sorulan sorular için sık sorulan sorulara bakın.
Yedeklenen veritabanı için geri yükleme noktalarını görüntüleme
Bir veritabanının tüm kurtarma noktalarının listesini görüntülemek için az backup recoverypoint list komutunu şu şekilde kullanın:
az backup recoverypoint list --resource-group SQLResourceGroup \
--vault-name SQLVault \
--container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
--item-name "sqldatabase;mssqlserver;testdb" \
--output table
Kurtarma noktalarının listesi şu şekilde görünür:
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
Yukarıdaki listede üç kurtarma noktası vardır: tam yedekleme, farklı yedekleme ve günlük yedekleme için.
Note
Ayrıca, az backup recoverypoint show-log-chain komutunu kullanarak her kesintisiz günlük yedekleme zincirinin başlangıç ve bitiş noktalarını görüntüleyebilirsiniz.
Veritabanını geri yükleme önkoşulları
Veritabanını geri yüklemeden önce aşağıdaki önkoşulların karşılandığından emin olun:
- Kasada Bölgeler Arası Geri Yükleme etkinleştirildiyse veritabanını yalnızca aynı bölgedeki bir SQL örneğine veya farklı bir bölgeye geri yükleyebilirsiniz.
- Hedef örnek, Bölgeler Arası Geri Yükleme ve Abonelikler Arası Geri Yükleme dışında kaynakla aynı kasaya kaydedilmiş olmalıdır. .
Veritabanını geri yükleme
Azure Backup, Azure VM'lerinde çalışan SQL veritabanlarını şu şekilde geri yükleyebilir:
- Günlük yedeklerini kullanarak belirli bir tarih veya saati (saniyesine kadar) geri yükleyin. Azure Backup, seçilen zamana göre geri yüklemek için gereken uygun tam, değişiklik yedeklemelerini ve günlük yedeklemeleri zincirini otomatik olarak belirler.
- Belirli bir kurtarma noktasına ulaşmak için belirli bir tam veya farklılaştırılmış yedekten geri yükleyin.
Veritabanını geri yüklemek için, az restore restore-azurewl komutunu kullanın, bu komut girişlerden biri olarak kurtarma yapılandırması nesnesi gerektirir. Az backup recoveryconfig show komutunu kullanarak bu nesneyi oluşturabilirsiniz. Kurtarma yapılandırması nesnesi, geri yükleme gerçekleştirmek için tüm ayrıntıları içerir. Bunlardan biri geri yükleme modudur: OriginalWorkloadRestore veya AlternateWorkloadRestore.
Note
OriginalWorkloadRestore: Verileri özgün kaynakla aynı SQL örneğine geri yükler. Bu seçenek orijinal veritabanının üzerine yazar. AlternateWorkloadRestore: Veritabanını alternatif bir konuma geri yükler ve özgün kaynak veritabanını saklar.
Alternatif konuma geri yükleme
Veritabanını alternatif bir konuma geri yüklemek için geri yükleme modu olarak AlternateWorkloadRestore kullanın. Daha sonra, önceki bir zaman noktası veya herhangi bir önceki geri yükleme noktası olabilecek geri yükleme noktasını seçmelisiniz.
Önceki bir geri yükleme noktasına geri yüklemeye devam edelim. Veritabanı için geri yükleme noktalarının listesini görüntüleyin ve geri yüklemek istediğiniz noktayı seçin. Burada, 7660777527047692711 adlı geri yükleme noktasını kullanalım.
Yukarıdaki geri yükleme noktası adı ve geri yükleme moduyla, az backup recoveryconfig show komutunu kullanarak kurtarma yapılandırması nesnesini oluşturun. Bu komutta kalan parametreleri denetleyin:
- --target-item-name: Geri yüklenen veritabanı tarafından kullanılacak ad. Bu senaryoda restored_database adını kullandık.
- --target-server-name: Kurtarma Hizmetleri kasasına başarıyla kaydedilen ve geri yüklenecek veritabanıyla aynı bölgede kalan bir SQL sunucusunun adı. Burada veritabanını, testSQLVM adlı koruduğun SQL sunucusuna geri yüklüyorsunuz.
- --target-server-type: SQL veritabanlarının geri yüklenmesi için SQLInstance kullanmanız gerekir.
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
Yukarıdaki sorguya verilen yanıt, şu şekilde görünen bir kurtarma yapılandırma nesnesidir:
{
"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": []
}
Şimdi veritabanını geri yüklemek için az restore-azurewl komutunu çalıştırın. Bu komutu kullanmak için, recoveryconfig.json adlı bir dosyaya kaydedilen yukarıdaki JSON çıkışını girin.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output table
Çıkış şu şekilde görünür:
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
Yanıt size iş adını sağlar. az backup job show komutunu kullanarak iş durumunu izlemek için bu iş adını kullanabilirsiniz.
Geri yükleme ve üzerine yazma
Özgün konuma geri yüklemek için, geri yükleme modu olarak OriginalWorkloadRestore kullanın. Daha sonra önceki bir zaman noktası veya önceki geri yükleme noktalarından herhangi biri olabilecek geri yükleme noktasını seçmeniz gerekir.
Örnek olarak, '28-11-2019-09:53:00' tarihindeki önceki zaman dilimini geri yüklemek için seçelim. Bu geri yükleme noktasını şu biçimlerde sağlayabilirsiniz: dd-mm-yy, dd-mm-yyyy-hh:mm:ss. Geri yüklemek için geçerli bir zaman noktası seçmek için, kesintisiz günlük zinciri yedekleme aralıklarını listeleyen az backup recoverypoint show-log-chain komutunu kullanın.
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
Yukarıdaki sorguya verilen yanıt, şu şekilde görünen bir kurtarma yapılandırma nesnesidir:
{
"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"
}
Şimdi veritabanını geri yüklemek için az restore-azurewl komutunu çalıştırın. Bu komutu kullanmak için, recoveryconfig.json adlı bir dosyaya kaydedilen yukarıdaki JSON çıkışını girin.
az backup restore restore-azurewl --resource-group sqlResourceGroup \
--vault-name sqlVault \
--recovery-config recoveryconfig.json \
--output table
Çıkış şu şekilde görünür:
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
Yanıt size iş adını sağlar. az backup job show komutunu kullanarak iş durumunu izlemek için bu iş adını kullanabilirsiniz.
İkincil bölgeye geri yükleme
Veritabanını ikincil bölgeye geri yüklemek için, geri yükleme yapılandırmasında ikincil bölgede bulunan bir hedef kasa ve sunucu belirtin.
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
Yanıt, şu şekilde görünen bir kurtarma yapılandırma nesnesidir:
{
"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": []
}
`az restore restore-azurewl komutunda bu kurtarma yapılandırmasını kullanın.`
--use-secondary-region Veritabanını ikincil bölgeye geri yüklemek için bayrağını seçin.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--use-secondary-region \
--output table
Çıkış şu şekilde görünür:
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
İkincil bölgede kullanılabilir yedekleme verilerinin RPO değeri 12 saattir. Bu nedenle, CRR'yi açtığınızda, ikincil bölgenin RPO'su 12 saat + log sıklığı süresi (minimum 15 dakika olarak ayarlanabilir) olur.
Dosya olarak geri yükleme
Yedekleme verilerini veritabanı yerine dosya olarak geri yüklemek için geri yükleme modu olarak RestoreAsFiles kullanın. Ardından, önceki bir zamana ait nokta veya herhangi bir önceki geri yükleme noktası olabilecek geri yükleme noktasını seçin. Dosyalar belirtilen yola bırakıldıktan sonra, bu dosyaları veritabanı olarak geri yüklemek istediğiniz herhangi bir SQL makinesine götürebilirsiniz. Bu dosyaları herhangi bir makineye taşıyabildiğiniz için artık verileri abonelikler ve bölgeler arasında geri yükleyebilirsiniz.
Geri yüklemek için önceki zaman noktasını 28-11-2019-09:53:00 ve yedek dosyalarının aynı SQL sunucusundaki C:\restoreasfiles olarak döküleceği konumu seçin. Bu geri yükleme noktasını şu biçimlerden birinde sağlayabilirsiniz: dd-mm-yyyy veya dd-mm-yyyy-hh:mm:ss. Geri yüklemek için geçerli bir zaman noktası seçmek için, kesintisiz günlük zinciri yedekleme aralıklarını listeleyen az backup recoverypoint show-log-chain komutunu kullanın.
Yukarıdaki geri yükleme noktası adı ve geri yükleme moduyla, az backup recoveryconfig show komutunu kullanarak kurtarma yapılandırması nesnesini oluşturun. Bu komutta kalan parametrelerin her birini denetleyin:
- --target-container-name: Kurtarma Hizmetleri kasasına başarıyla kaydedilen ve geri yüklenecek veritabanıyla aynı bölgede bulunan bir SQL sunucusunun adı. Veritabanını, koruduğunuz aynı SQL sunucusuna, mssqlserver adıyla dosya olarak geri getirelim.
- --rp-name: Belirli bir anlık geri yükleme için geri yükleme noktası adı DefaultRangeRecoveryPoint'tir.
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
Yukarıdaki sorguya verilen yanıt şu şekilde görünen bir kurtarma yapılandırma nesnesidir:
{
"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"
}
Şimdi veritabanını dosyalar olarak geri yüklemek için az restore restore-azurewl komutunu çalıştırın. Bu komutu kullanmak için yukarıdaki recoveryconfig.json adlı dosyaya kaydedilen JSON çıkışını girin.
az backup restore restore-azurewl --resource-group SQLResourceGroup \
--vault-name SQLVault \
--recovery-config recoveryconfig.json \
--output json
Çıkış şu şekilde görünür:
{
"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"
}
Yanıt size iş adını sağlar. az backup job show komutunu kullanarak iş durumunu izlemek için bu iş adını kullanabilirsiniz.
Note
Zincirin tamamını geri yüklemek istemiyorsanız ancak dosyaların yalnızca bir alt kümesini geri yüklemek istiyorsanız, burada belgelendiği gibi adımları izleyin.
Abonelikler Arası Geri Yükleme
Abonelikler Arası Geri Yükleme (CSR) ile, geri yükleme izinleri varsa kiracınızın altındaki herhangi bir aboneliğe ve herhangi bir kasaya geri yükleme esnekliğine sahip olursunuz. CsR varsayılan olarak tüm Kurtarma Hizmetleri kasalarında (mevcut ve yeni oluşturulan kasalar) etkinleştirilir.
Note
- Kurtarma Hizmetleri kasasından Abonelikler Arası Geri Yükleme'yi tetikleyebilirsiniz.
- CSR yalnızca akış tabanlı yedekleme için desteklenir ve anlık görüntü tabanlı yedekleme için desteklenmez.
- CSR ile Bölgeler Arası Geri Yükleme (CRR) desteklenmez.
az backup vault create
Kasa oluşturma ve güncelleştirme sırasında kasanın CSR durumunu ayarlayabilmenizi sağlayan cross-subscription-restore-state parametresini ekleyin.
az backup recoveryconfig show
SQL veya HANA veri kaynakları için Çapraz Abonelik Geri Yükleme'yi tetiklerken giriş olarak hedef aboneliği sağlamanıza olanak tanıyan parametreyi --target-subscription-id ekleyin.
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}
SQL örneği anlık görüntülerini geri getir
Aşağıdaki örnekler Bash değil, PowerShell shell sözdizimi kullanır. Bu makalede gösterilen anlık görüntü seçeneklerini sunan bir Azure CLI sürümünü kullanın. Snapshot restore ön koşullarını ve destek matrisini gözden geçirin.
Kullanmadan önce yer tutucuları değiştirin. Ortak kurulumu tamamla ve sadece gerekli geri yükleme senaryosunu seç. Aşağıdaki örnekler alternatiflerdir, baştan sona uygulanacak bir script değildir. Restore komutları verilerin üzerine yazabilir veya disk bağlantılarını değiştirebilir.
Anlık görüntü geri yükleme değişkenlerini ayarlayın
$vaultSubscription için Vault'un aboneliğini kullanın. Hedef kaynak grubunu ve kullanıcı tarafından atanan yönetilen kimliği gerekli izinlerle hazırlayın:
$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")
Hizmet çıktısından tam olarak yerel konteyner ve korunan öğe isimlerini kopyalayın. Yukarıdaki kaynak ve hedef kurulum aynı vault'u kullanıyor. Alternatif konum geri yüklemeleri için, hedef örneğin bulunabilir olduğundan emin olun:
az backup protectable-item show @vaultArgs --workload-type MSSQL `
--protectable-item-type SQLInstance --name $targetInstanceName --server-name $targetVm
Bu örneklerdeki uzun opsiyonlar ayrıca aşağıdaki kısa takma adları da destekler:
| Uzun seçenek | 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 |
Anlık görüntü kurtarma noktalarını sorgulama
Bir zaman penceresi için istenen tüm kurtarma noktası türlerini, sadece anlık görüntüleri veya sadece en son anlık görüntüyü listeleyin:
$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
Bir kurtarma noktasını açıkça seçin; liste sıralamasını varsaymayın. Dahil edilen veritabanları ve dosya sistemi bilgilerini incelemek için tam detaylarını alın:
$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
Anlık görüntü tabanlı log aralıklarını sorgula
örneğin ayrıntılarınıprotectedItemDataSourceId geri alın. Bu ID, günlük sorguları için temel veri kaynağıdır, bireysel bir veritabanının veri kaynağı ID'si değildir.
$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
Anlık görüntüye dahil olan veritabanlarından birine karşılık gelen bir veritabanı öğesi seçin. Bireysel kurtarma noktalarını günlük aralıkları olarak ele almak yerine, sürekli kurtarma süresi aralıkları için show-log-chain kullanın.
İnstansı özgün konuma geri yükleme
Orijinal konum geri yükleme (OLR) yapılandırmasını oluşturun.
$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
Göndermeden önce, hacim eşlemelerini inceleyin. Orijinal konum geri yükleme, orijinal veritabanlarının üzerine yazabilir.
Örneğin alternatif konuma geri yüklenmesi
Hedef konteyner, sunucu ve SQL örneğini kullanın.
--target-item-name öğesini gerekli hedef veritabanı adına veya hizmet tarafından desteklenen bir örnek adlandırma desenine ayarlayın:
$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
Instans belirli bir zamandaki geri yükleme
Önceki sorgulardan seçilen instance anlık görüntüsünü ve temel veri kaynağı ID'sini kullanın. Dahil edilen her veritabanını benzersiz bir korunan öğeye çözüp, ardından bu anlık görüntüden sonraki log aralıklarını sorgula:
$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)."
}
}
Bir veritabanının aralıklarını inceleyin ve bir UTC zamanını seçin. Aşağıdaki örnek, o veritabanı için en son bitiş zamanını seçer ve ardından bu saatin dahil edilen her veritabanı için de mevcut olup olmadığını doğrular. Doğrulama başarısız olursa, ortak mevcut aralıklar içinde bir zaman seçin ve kontrolü tekrar yapın:
$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")
PITR yapılandırmasını temel anlık görüntü ve doğrulanmış günlük tekrar süresi kullanarak oluşturun:
$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 veritabanlarının sonraki kurtarma adımları için kurtarılmamış durumda kalmasını talep eder. Bu davranışın iyileşme planınız için uygun olup olmadığını gözden geçirin.
Disk olarak instans geri yükleme
SnapshotAttach öğesini, snapshot bağlama ve ardından veritabanı kurtarma yerine, disk olarak geri yükleme (RAD) için kullanın:
$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
Bir instans altında korunan veritabanını geri getirin
Kaynak konteynerden tam olarak yerel veritabanı öğesi adını seçin. Kurtarma noktası geri yüklemeleri için, açıkça bir veritabanı anlık görüntüsü seçin:
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
Veritabanını alternatif konuma geri yükleme
$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
Veritabanını belirli bir zamandaki durumuna geri yükleme
Mevcut log aralıklarını sorgulayın ve geri dönen bir aralık içinde bir UTC zamanını seçin.
dd-MM-yyyy-HH:mm:ss biçimini kullanın:
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
Önceki veritabanı geri yükleme örnekleri de --no-recovery-mode kullanır. Göndermeden önce o ayarı gözden geçirin.
Veritabanını diskler olarak geri yükleme
$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
Veritabanını diskler olarak, günlükleri dosyalar olarak geri yükleme
$pit öğesini, veritabanı PITR örneğinde olduğu gibi, veritabanı log aralıklarından geçerli bir UTC zamanına ayarlayın. Disk eki yapılandırmasını oluşturun, ardından log dosyalarının hedefini belirleyin:
$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
Konfigürasyon oluşturmanın başarılı olduğunu doğruladıktan sonra, oluşturulan eşlemeleri düzenleyin:
$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
Anlık görüntü geri yüklemeyi inceleyin ve gönderin
Her seçilen senaryo için, çıktısını kullanmadan önce az backup recoveryconfig show işleminin başarılı olduğunu doğrulayın. Oluşturulan dosya ve birim eşlemelerini inceleyin. Sadece farklı hedef yol gerektiren kaynak hacimleri yeniden eşleyin. Örnek sürücü harflerini gerçek yollarla değiştirin:
$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
Önceki yeniden eşleme isteğe bağlıdır. Seçtiğiniz senaryo için amaçlanan eşlemeleri, veritabanı disk ve log dosyası yapılandırmaları dahil olmak üzere koruyun.
Dosya sistemi çatışmasını çözmek için disk bağlantısının kesilmesi gerekiyorsa, oluşturulan yapılandırmaya yalnızca açıkça onaylanmış disk kimlikleri ekleyin:
$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
Mevcut disklerin ayrılması, hedef iş yüklerini bozabilir. Geri yüklemeyi göndermeden önce her disk kimliğini ve tam kurtarma yapılandırmasını doğrulayın. İsteğe bağlı disk ayırma örneğini, işlem zorunlu ve onaylanmışsa uygulayın.
Seçilen işlem için yalnızca yapılandırma dosyasını gönderin:
az backup restore restore-azurewl @vaultArgs --recovery-config $configFile
Geri dönen iş adını az backup job show ile takip edin. Durdurma koruması ve kayıt kaldırma komutları için bkz. SQL örneği snapshot yedeklemelerini Yönet.
Sonraki adım
- Azure CLI kullanılarak yedeklenen SQL veritabanlarını yönetin.
İlgili içerik
- REST API aracılığıyla Azure Backup kullanarak Azure VM'lerindeki SQL server veritabanlarını yedekleyin.
- REST API ile Azure VM'lerindeki SQL Server veritabanlarını geri yükleyin.
- Azure portalı, Azure CLI, REST API ile Azure VM'lerindeki SQL server veritabanlarını yönetin.