您可以使用時間點還原,將一或多組區塊 Blob 還原至先前的狀態。 本文說明如何啟用儲存體帳戶的時間點還原,以及如何執行還原作業。
若要深入了解時間點還原,請參閱區塊 Blob 的時間點還原。
注意
只有標準效能層級的一般用途 v2 儲存體帳戶可支援時間點還原。 只有經常性存取和非經常性存取層中的資料可以使用時間點還原進行還原。
警告
時間點還原僅支援對區塊 Blob 執行還原作業。 容器的作業無法還原。 如果您藉由呼叫刪除容器作業來刪除儲存體帳戶中的容器,則無法使用還原作業還原該容器。 如果您稍後想要還原,請刪除個別的 Blob,而不是刪除整個容器。 此外,Microsoft 建議啟用容器和 Blob 的虛刪除,以防止意外刪除。 如需詳細資訊,請參閱容器的虛刪除和 Blob 的虛刪除。
啟用和設定時間點還原之前,請先啟用其儲存體帳戶的必要條件:虛刪除、變更摘要和 Blob 版本設定。 如需啟用上述各項功能的詳細資訊,請參閱下列文章:
若要使用 Azure 入口網站設定時間點還原,請遵循下列步驟:
- 瀏覽至您的儲存體帳戶。
- 在 [資料管理] 下,選擇 [資料保護]。
- 選取 [開啟時間點還原]。 選取此選項後,也會啟用 Blob、版本設定和變更摘要的虛刪除。
- 設定時間點還原的還原點上限 (以天為單位)。 此數值必須至少為一天,並且小於為 Blob 虛刪除指定的保留期間。
- 儲存您的變更。
下圖顯示為時間點還原設定的儲存體帳戶,其還原點設為七天前,Blob 虛刪除的保留期間設為 14 天。
若要使用 PowerShell 來設定時間點還原,請先安裝 Az.Storage 模組 2.6.0 版或更新版本。 然後,呼叫 AzStorageBlobRestorePolicy 命令,以啟用儲存體帳戶的時間點還原。
下列範例會啟用虛刪除,並設定虛刪除保留期間、啟用變更摘要和版本設定,然後啟用時間點還原。 執行此範例時,請記得將角括弧中的值取代為您自己的值:
# Set resource group and account variables.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
# Enable blob soft delete with a retention of 14 days.
Enable-AzStorageBlobDeleteRetentionPolicy -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-RetentionDays 14
# Enable change feed and versioning.
Update-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EnableChangeFeed $true `
-IsVersioningEnabled $true
# Enable point-in-time restore with a retention period of 7 days.
# The retention period for point-in-time restore must be at least
# one day less than that set for soft delete.
Enable-AzStorageBlobRestorePolicy -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-RestoreDays 7
# View the service settings.
Get-AzStorageBlobServiceProperty -ResourceGroupName $rgName `
-StorageAccountName $accountName
若要使用 Azure CLI 設定時間點還原,請先安裝 Azure CLI 2.2.0 版或更新版本。 然後,呼叫 az storage account blob-service-properties update 命令以啟用時間點還原,以及儲存體帳戶所需的其他資料保護設定。
下列範例會啟用虛刪除,並將虛刪除保留期間設定為 14 天、啟用變更摘要和版本設定,並啟用還原期間為 7 天的時間點還原。 執行此範例時,請記得將角括弧中的值取代為您自己的值:
az storage account blob-service-properties update \
--resource-group <resource_group> \
--account-name <storage-account> \
--enable-delete-retention true \
--delete-retention-days 14 \
--enable-versioning true \
--enable-change-feed true \
--enable-restore-policy true \
--restore-days 7
選擇還原點
還原點是還原資料的日期和時間。 Azure 儲存體一律會使用 UTC 日期/時間值作為還原點。 不過,Azure 入口網站可讓您以本地時間指定還原點,然後將該日期/時間值轉換為 UTC 日期/時間值,以執行還原作業。
當您使用 PowerShell 或 Azure CLI 執行還原作業時,您應以 UTC 日期/時間值指定還原點。 如果還原點是以本地時間值 (而非 UTC 時間值) 指定的,則在某些情況下,還原作業可能仍會如預期運作。 例如,如果您的本地時間是 UTC 減去五個小時,則指定本地時間值,將會導致還原點比您提供的值早五個小時。 若未對要在那五小時期間內還原的資料進行任何變更,則無論提供的時間值為何,還原作業都會產生相同的結果。 建議您為還原點指定 UTC 時間,以免發生非預期的結果。
您可以還原儲存體帳戶中的所有容器,也可以還原一或多個容器中某個範圍內的 Blob。 Blob 的範圍會按照字典順序定義。 每個還原作業最多可支援十個字典範圍。 範圍的開頭包括在內,但不包括範圍的結尾。
為開始範圍和結束範圍指定的容器模式至少須包含三個字元。 用來分隔容器名稱與 Blob 名稱的正斜線 (/) 不會計入此最小值中。 如何建構還原範圍的幾個範例:
- 若要在還原範圍中包含名為 myContainer 的整個容器,請使用 start range myContainer 和 end range myContainer-0。 這會顯示如何將 '-0' 新增為結束範圍值的容器名稱尾碼,包括還原容器中的所有內容。
- 若要包含整個虛擬目錄階層,例如容器 myContainer 內的目錄 myFolder,請使用 start range myContainer/myFolder/ 和 end range myContainer/myFolder0。 將 '0' 新增為結尾範圍的虛擬目錄名稱尾碼,包含還原時具有 'myContainer/myFolder/' 前置詞的所有檔案。
字典範圍中不支援萬用字元。 任何萬用字元都會被視為標準字元。
您可以在傳至還原作業的範圍中明確指定 $root 和 $web 容器中的 Blob,以還原這些 Blob。 $root 和 $web 容器只有在明確指定時,才會還原。 其他系統容器無法還原。
只有區塊 Blob 才會還原。 分頁 Blob 和附加 Blob 不包含在還原作業中。 若要進一不了解附加 Blob 的相關限制,請參閱區塊 Blob 的時間點還原。
重要
當您執行還原作業時,Azure 儲存體會對要在作業執行期間還原的範圍內 Blob 封鎖資料作業。 在主要位置中會封鎖讀取、寫入和刪除作業。 因此,在還原作業執行期間,在 Azure 入口網站中列出容器之類的作業可能不會如預期執行。
如果儲存體帳戶是異地複寫的,則在還原作業執行期間,從次要位置讀取的作業可以繼續進行。
還原一組資料所需的時間,取決於在還原期間所進行的寫入和刪除作業數目 (在花費最多一小時取得還原作業之後)。 例如,假設有一個帳戶包含一百萬個物件,而且每日會新增 3,000 個物件及刪除 1,000 個物件,則大約需要二到三小時才能還原至過去 30 天的時間點。 具有少量變更的還原最多需要一小時來完成。 對於具有此變動率的帳戶,不建議採用保留期間和還原時間超過過去 90 天的方式。
還原帳戶中的所有容器
您可以還原儲存體帳戶中的所有容器,使其回復為先前在指定時間點的狀態。
若要使用 Azure 入口網站還原儲存體帳戶中的所有容器和 Blob,請遵循下列步驟:
瀏覽至儲存體帳戶的容器清單。
在工具列上選擇 [還原容器],然後選擇 [全部還原]。
在 [還原所有容器] 窗格中,藉由提供日期和時間來指定還原點。
勾選方塊,確認您要繼續進行。
選取 [還原] 以開始執行還原作業。
若要使用 PowerShell 還原儲存體帳戶中的所有容器和 Blob,請呼叫 Restore-AzStorageBlobRange 命令,並以 UTC 日期/時間值提供還原點。 根據預設,Restore-AzStorageBlobRange 命令會以非同步方式執行,並傳回 PSBlobRestoreStatus 類型的物件,可用來檢查還原作業的狀態。
下列範例會以非同步方式將儲存體帳戶中的容器還原為 12 小時前的狀態,並檢查還原作業的一些屬性:
# Specify -TimeToRestore as a UTC value
$restoreOperation = Restore-AzStorageBlobRange -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-TimeToRestore (Get-Date).ToUniversalTime().AddHours(-12)
# Get the status of the restore operation.
$restoreOperation.Status
# Get the ID for the restore operation.
$restoreOperation.RestoreId
# Get the restore point in UTC time.
$restoreOperation.Parameters.TimeToRestore
若要同步執行還原作業,請在命令中加上 -WaitForComplete 參數。 當 -WaitForComplete 參數存在時,PowerShell 會顯示一則內含作業還原識別碼的訊息,並在還原作業完成之前封鎖執行。 請記住,還原作業所需的時間長度取決於要還原的資料量,大型還原作業最多可能要一小時才能完成。
Restore-AzStorageBlobRange -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-TimeToRestore (Get-Date).AddHours(-12) -WaitForComplete
若要使用 Azure CLI 還原儲存體帳戶中的所有容器和 Blob,請呼叫 az storage blob restore 命令,並以 UTC 日期/時間值提供還原點。
下列範例會以非同步方式將儲存體帳戶中的所有容器還原為其在指定日期和時間的 12 小時前的狀態。 若要檢查還原作業的狀態,請呼叫 az storage account show:
az storage blob restore \
--resource-group <resource_group> \
--account-name <storage-account> \
--time-to-restore 2021-01-14T06:31:22Z \
--no-wait
若要檢查還原作業的屬性,請呼叫 az storage account show,並展開 blobRestoreStatus 屬性。 下列範例說明如何檢查 status 屬性。
az storage account show \
--name <storage-account> \
--resource-group <resource_group> \
--expand blobRestoreStatus \
--query blobRestoreStatus.status \
--output tsv
若要同步執行 az storage blob restore 命令並在還原作業完成前阻止執行,請省略 --no-wait 參數。
還原區塊 Blob 的範圍
您可以在單一容器內或跨多個容器,還原一或多個字典式的 Blob 範圍,讓這些 Blob 回復為過去在指定時間點的狀態。
若要使用 Azure 入口網站還原一或多個容器中的 Blob 範圍,請遵循下列步驟:
瀏覽至儲存體帳戶的容器清單。
選取要還原的一或多個容器。
在工具列上選擇 [還原容器],然後選擇 [還原所選項目]。
在 [還原選取的容器] 窗格中,藉由提供日期和時間來指定還原點。
指定要還原的範圍。 使用正斜線 (/) 將容器名稱與 Blob 前置詞分隔。
根據預設,[還原選取的容器] 窗格會指定包含容器中所有 Blob 的範圍。 如果您不想要還原整個容器,請刪除此範圍。 預設範圍如下圖所示。
勾選方塊,確認您要繼續進行。
選取 [還原] 以開始執行還原作業。
下圖顯示一組範圍的還原作業。
影像中顯示的還原作業會執行下列動作:
- 還原 container1 的完整內容。
- 還原 container2 中字典範圍 blob1 到 blob5 內的 Blob。 此範圍會還原具有 blob1、blob11、blob100、blob2 等名稱的 Blob。 範圍的結尾包括在內,因此會還原名稱開頭為 blob4 的 Blob,但不會還原名稱開頭為 blob5 的 Blob。
- 還原 container3 和 container4 中的所有 Blob。 由於範圍的結尾不包括在內,所以此範圍不會還原 container5。
若要還原單一範圍的 Blob,請呼叫 Restore-AzStorageBlobRange 命令,並為 -BlobRestoreRange 參數指定容器和 Blob 名稱的字典範圍。 例如,若要還原單一容器 container1 中的 Blob,您可以指定始於 container1、終於 container2 的範圍。 在開始和結束範圍中指定的容器不一定要存在。 由於範圍的結尾不包括在內,即使儲存體帳戶包含名為 container2 的容器,也只會還原名為 container1 的容器:
$range = New-AzStorageBlobRangeToRestore -StartRange container1 `
-EndRange container2
若要指定容器中的 Blob 子集以進行還原,請使用正斜線 (/) 來分隔容器名稱與 Blob 前置詞模式。 例如,下列範圍會選取單一容器中名稱開頭為字母 d 到 f 的 Blob:
$range = New-AzStorageBlobRangeToRestore -StartRange container1/d `
-EndRange container1/g
接著,在 Restore-AzStorageBlobRange 命令中提供範圍。 為 -TimeToRestore 參數提供 UTC DateTime 值,以指定還原點。 下列範例會將指定範圍內的 Blob 還原為 3 天前的狀態:
# Specify -TimeToRestore as a UTC value
Restore-AzStorageBlobRange -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-BlobRestoreRange $range `
-TimeToRestore (Get-Date).AddDays(-3)
根據預設,Restore-AzStorageBlobRange 命令會以非同步方式執行。 當您以非同步方式起始還原作業時,PowerShell 會立即顯示作業的屬性資料表:
Status RestoreId FailureReason Parameters.TimeToRestore Parameters.BlobRanges
------ --------- ------------- ------------------------ ---------------------
InProgress 459c2305-d14a-4394-b02c-48300b368c63 2020-09-15T23:23:07.1490859Z ["container1/d" -> "container1/g"]
若要還原多個範圍的區塊 Blob,請為 -BlobRestoreRange 參數指定範圍陣列。 下列範例會指定兩個範圍,以將 container1 和 container4 的完整內容還原為 24 小時前的狀態,並將結果儲存至變數:
# Specify a range that includes the complete contents of container1.
$range1 = New-AzStorageBlobRangeToRestore -StartRange container1 `
-EndRange container2
# Specify a range that includes the complete contents of container4.
$range2 = New-AzStorageBlobRangeToRestore -StartRange container4 `
-EndRange container5
$restoreOperation = Restore-AzStorageBlobRange -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-TimeToRestore (Get-Date).AddHours(-24) `
-BlobRestoreRange @($range1, $range2)
# Get the status of the restore operation.
$restoreOperation.Status
# Get the ID for the restore operation.
$restoreOperation.RestoreId
# Get the blob ranges specified for the operation.
$restoreOperation.Parameters.BlobRanges
若要同步執行還原作業,並在作業完成前封鎖執行,請在命令中加上 -WaitForComplete 參數。
若要還原某個範圍的 Blob,請呼叫 az storage blob restore 命令,並為 --blob-range 參數指定容器和 Blob 名稱的字典範圍。 若要指定多個範圍,請提供每個不同範圍的 --blob-range 參數。
例如,若要還原單一容器 container1 中的 Blob,您可以指定始於 container1、終於 container2 的範圍。 在開始和結束範圍中指定的容器不一定要存在。 由於範圍的結尾不包括在內,即使儲存體帳戶包含名為 container2 的容器,也只會還原名為 container1 的容器。
若要指定容器中的 Blob 子集以進行還原,請使用正斜線 (/) 來分隔容器名稱與 Blob 前置詞模式。 下面顯示的範例會以非同步方式還原容器中名稱開頭為字母 d 到 f 的 Blob 範圍。
az storage blob restore \
--account-name <storage-account> \
--time-to-restore 2021-01-14T06:31:22Z \
--blob-range container1 container2
--blob-range container3/d container3/g
--no-wait
若要同步執行 az storage blob restore 命令並在還原作業完成前阻止執行,請省略 --no-wait 參數。
下一步