將 Azure SQL 受控執行個體中的資料庫還原至先前的時間點
適用於:Azure SQL 受控執行個體
您可以使用時間點還原來建立資料庫,而此資料庫是特定稍早時間點的資料庫複本。 此文章說明如何在 Azure SQL 受控執行個體中執行資料庫的時間點還原。
概觀
時間點還原適用於復原情節,例如錯誤或失敗所造成的事件、未正確載入資料時,或刪除重要資料時。 您也可以直接使用它來測試和稽核資料庫部署。 根據您的資料庫設定,Azure 備份檔案會保留 7 到 35 天。
在下列情節中,您可以使用時間點還原來還原資料庫:
- 從現有的資料庫
- 從已刪除的資料庫
- 到相同的受控執行個體或不同的受控執行個體
- 到相同訂用帳戶中的受控執行個體,或不同訂用帳戶中的受控執行個體
下表顯示 SQL 受控執行個體的時間點還原情節:
案例 |
Azure 入口網站 |
Azure CLI |
PowerShell |
將現有的資料庫還原至相同的受控執行個體 |
Yes |
.是 |
Yes |
將現有的資料庫還原至不同的受控執行個體 |
Yes |
.是 |
Yes |
將已刪除的資料庫還原至相同的受控執行個體 |
Yes |
.是 |
Yes |
將已刪除的資料庫還原至不同的受控執行個體 |
Yes |
.是 |
Yes |
將現有的資料庫還原至另一個訂用帳戶中的受控執行個體 |
Yes |
.是 |
Yes |
將已刪除的資料庫還原至另一個訂用帳戶中的受控執行個體 |
Yes |
.是 |
Yes |
權限
若要復原資料庫,您必須是:
若要將資料庫還原至不同的目標訂用帳戶,如果您不在 SQL 受控執行個體參與者角色中,則也應該具有下列權限:
- 來源 SQL 受控執行個體上的 Microsoft.Sql/managedInstances/databases/readBackups/action。
- 目標 SQL 受控執行個體上的 Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
如需詳細資訊,請參閱 Azure RBAC:內建角色。
限制
這些限制適用於 SQL 受控執行個體中的時間點還原:
您無法使用時間點還原來復原整個 SQL 受控執行個體部署。 僅使用時間點還原來建立裝載於 SQL 受控執行個體的資料庫複本。
時間點還原的限制取決於您要將資料庫還原至相同訂用帳戶中的受控執行個體,還是還原至不同訂用帳戶中的受控執行個體。
在 Azure SQL 受控執行個體上啟用服務端點原則時,將服務端點原則放在子網路上可防止從不同子網路的執行個體中進行時間點還原。
警告
請留意受控執行個體的儲存體大小。 根據要還原的資料大小,您可能會耗盡受控執行個體的儲存體。 如果受控執行個體中的儲存體空間不足,無法供已還原的資料使用,則請使用不同的方式。
還原至相同的訂用帳戶
如果您從一個受控執行個體還原至相同 Azure 訂用帳戶中的另一個受控執行個體,則這兩個受控執行個體都必須位於相同的區域中。 目前不支援跨區域還原。
還原到不同的訂閱
跨訂用帳戶來還原時間點還原備份具有下列限制:
- 這兩個訂用帳戶必須位於相同的區域。
- 這兩個訂用帳戶必須位於相同的租用戶。
- 訂用帳戶類型必須是 Enterprise 合約、雲端解決方案提供者、Microsoft 認證合作夥伴或隨用隨付。
- 您只能在主要執行個體上使用還原動作。
- 您只能從主要區域還原備份。 跨訂用帳戶時間點還原不支援從異地複寫次要區域還原資料庫。
- 採取還原動作的使用者必須具有 SQL 受控執行個體參與者角色指派,或具有下列明確權限:
- 來源 SQL 受控執行個體上的 Microsoft.Sql/managedInstances/databases/readBackups/action。
- 目標 SQL 受控執行個體上的 Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
- 如果您攜帶您自己的金鑰 (BYOK),則金鑰必須存在於這兩個訂用帳戶中。
還原現有的資料庫
您可以使用 Azure 入口網站、PowerShell 或 Azure CLI,以還原相同訂用帳戶中的現有資料庫。 如果您使用 PowerShell 或 Azure CLI 來還原至相同訂用帳戶中的不同執行個體,則請務必指定目標 SQL 受控執行個體資源的屬性。 資料庫預設會還原至相同的執行個體。
如果您還原至不同的訂用帳戶,則作為還原動作基礎的 Create 或 Update v5.0.2022 API 呼叫必須包含 restorePointInTime
、crossSubscriptionTargetManagedInstanceId
以及 crossSubscriptionSourceDatabaseId
或 crossSubscriptionRestorableDroppedDatabaseId
。
若要還原現有的資料庫,作法是移至 Azure 入口網站中的資料庫頁面,然後選取 [還原]。
或者,若要還原資料庫,您可以遵循下列步驟:
登入 Azure 入口網站。
移至您打算將資料庫還原至其中的目標 SQL 受控執行個體。
在 [概觀] 頁面上,選擇 [+ 新增資料庫] 以開啟 [建立 Azure SQL 受控資料庫] 頁面。
在 [建立 Azure SQL 受控資料庫] 頁面 [基本] 索引標籤的 [專案詳細資料] 下方,提供訂用帳戶和資源群組詳細資料。 然後,在 [資料庫詳細資料] 下方,提供您打算還原的資料庫的新名稱。 確認下拉式清單中列出正確的受控執行個體。 然後選取 [下一步: 資料來源 >]
在 [資料來源] 索引標籤上,選擇 [使用現有資料] 下方的 [時間點還原]。 提供訂用帳戶、資源群組和含有來源資料庫的受控執行個體。 從 [受控資料庫] 下拉式清單中,選擇您想要還原的資料庫,然後選擇您想要從中還原資料庫的時間點。 來源和目標執行個體可以是相同的執行個體或兩個不同的執行個體。 選取 [下一步: 其他設定 >]
在 [其他設定] 索引標籤上,您可以核取從來源資料庫繼承保留原則的方塊,或者,您也可以選取 [設定保留] 以開啟 [設定原則] 頁面,然後針對已還原的資料庫設定需要的保留原則。 完成後,選取 [檢閱 + 建立]。
驗證成功時,在 [檢閱 + 建立] 上,選取 [建立] 以還原資料庫。
此動作會啟動還原程序,該程序會建立新的資料庫,並將原始資料庫於指定時間點的資料填入其中。 如需復原程序的詳細資訊,請參閱復原時間。
使用 Azure PowerShell 來還原資料庫。 如需詳細資訊,請檢閱安裝 Azure PowerShell 模組。 如需詳細資訊,請參閱 Restore-AzSqlInstanceDatabase。
使用您的值來替代參數,以執行下列其中一個程式碼選項。
將資料庫還原至相同的受控執行個體:
$subscriptionId = "<subscription ID>"
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$databaseName = "<source database>"
$pointInTime = "2018-06-27T08:51:39.3882806Z"
$targetDatabase = "<name of the new database to create>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName `
-Name $databaseName `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName $targetDatabase `
若要將資料庫還原至另一個受控執行個體,請同時指定目標資源群組和目標受控執行個體的名稱:
$targetResourceGroupName = "<resource group of the target managed instance>"
$targetInstanceName = "<name of the target managed instance>"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName `
-Name $databaseName `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName $targetDatabase `
-TargetResourceGroupName $targetResourceGroupName `
-TargetInstanceName $targetInstanceName
若要將資料庫還原至另一個訂用帳戶,請將內容設定為目標訂用帳戶 (Set-AzContext
),然後務必提供必要參數 -TargetSubscriptionID
的值:
Set-AzContext -SubscriptionID "targetSubscriptionID"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-SubscriptionId "sourceSubscriptionID" `
-ResourceGroupName "sourceRGName" `
-InstanceName "sourceManagedInstanceName" `
-Name "sourceDatabaseName" `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName "targetDatabaseName" `
-TargetInstanceName "targetManagedInstanceName" `
-TargetResourceGroupName "targetResourceGroupName" `
-TargetSubscriptionId "targetSubscriptionId"
使用 Azure CLI,以將資料庫還原至某個時間點。 如需詳細資訊,請參閱 安裝 Azure CLI。 如需可用參數的詳細說明,請參閱在 SQL 受控執行個體中還原資料庫的 CLI 文件。
使用您的值來替代參數,以執行下列其中一個程式碼選項。
將資料庫還原至相同的受控執行個體:
az sql midb restore -g mygroupname --mi myinstancename |
-n mymanageddbname --dest-name targetmidbname --time "2018-05-20T05:34:22"
若要將資料庫還原至不同的受控執行個體,請同時指定目標資源群組和受控執行個體的名稱:
az sql midb restore -g mygroupname --mi myinstancename -n mymanageddbname |
--dest-name targetmidbname --time "2018-05-20T05:34:22" |
--dest-resource-group mytargetinstancegroupname |
--dest-mi mytargetinstancename
若要還原至另一個訂用帳戶,請務必將內容 (az account set
) 設定為目標訂用帳戶:
az account set -s "targetSubscriptionId" `
az sql midb restore -s sourcesubscriptionid -g sourcegroup
--mi sourceinstance -n sourcemanageddb --dest-name targetDbName
--dest-mi targetMI --dest-resource-group targetRG --time "2022-05-20T05:34:22"
還原已刪除的資料庫
您可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI 來還原已刪除的資料庫。
使用 Azure 入口網站來還原已刪除的受控資料庫:
在 Azure 入口網站中,移至您的來源受控執行個體。
在左側功能表的 [資料管理] 下方,選取 [備份]。
在 [顯示資料庫] 下方,選取 [已刪除]。
若要還原資料庫,請選取 [還原]。
在 [建立 Azure SQL 受控資料庫] 中,輸入或選取要將資料庫還原至其中的目標受控執行個體詳細資料。 選取 [資料來源] 索引標籤。
在 [資料來源] 中,輸入或選取來源資料庫的詳細資料。 選取 [其他設定] 索引標籤。
在 [其他設定] 中,設定保留設定。 選取 [檢閱 + 建立] 索引標籤。
在 [檢閱 + 建立] 中,選取 [建立] 以還原已刪除的資料庫。
若要還原已刪除的受控資料庫,請執行下列其中一個 PowerShell 程式碼選項,並將參數取代為您的值:
將已刪除的資料庫還原至相同的受控執行個體:
$subscriptionId = "<subscription ID>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$deletedDatabaseName = "<source database name>"
$targetDatabaseName = "<target database name>"
$deletedDatabase = Get-AzSqlDeletedInstanceDatabaseBackup -ResourceGroupName $resourceGroupName `
-InstanceName $managedInstanceName -DatabaseName $deletedDatabaseName
Restore-AzSqlinstanceDatabase -FromPointInTimeBackup -Name $deletedDatabase.Name `
-InstanceName $deletedDatabase.ManagedInstanceName `
-ResourceGroupName $deletedDatabase.ResourceGroupName `
-DeletionDate $deletedDatabase.DeletionDate `
-PointInTime UTCDateTime `
-TargetInstanceDatabaseName $targetDatabaseName
若要將資料庫還原至不同的受控執行個體,您也可以指定目標資源群組和目標受控執行個體的名稱:
$targetResourceGroupName = "<resource group of target managed instance>"
$targetInstanceName = "<target managed instance name>"
Restore-AzSqlinstanceDatabase -FromPointInTimeBackup -Name $deletedDatabase.Name `
-InstanceName $deletedDatabase.ManagedInstanceName `
-ResourceGroupName $deletedDatabase.ResourceGroupName `
-DeletionDate $deletedDatabase.DeletionDate `
-PointInTime UTCDateTime `
-TargetInstanceDatabaseName $targetDatabaseName `
-TargetResourceGroupName $targetResourceGroupName `
-TargetInstanceName $targetInstanceName
若要將資料庫還原至另一個訂用帳戶,請將內容設定為目標訂用帳戶 (Set-AzContext
),然後務必提供必要參數 -TargetSubscriptionID
和 -DeleteDate
的值:
Set-AzContext -SubscriptionID "targetSubscriptionID"
Restore-AzSqlInstanceDatabase -FromPointInTimeBackup `
-SubscriptionId "sourceSubscriptionID" `
-ResourceGroupName "sourceRGName" `
-InstanceName "sourceManagedInstanceName" `
-Name "sourceDatabaseName" `
-PointInTime $pointInTime `
-TargetInstanceDatabaseName "targetDatabaseName" `
-TargetInstanceName "targetManagedInstanceName" `
-TargetResourceGroupName "targetResourceGroupName" `
-TargetSubscriptionId "targetSubscriptionId" `
-DeletionDate "deletion_date"
將已刪除的資料庫還原至相同的訂用帳戶:
az sql midb restore -g resourcegroup --mi instancename
-n databasename --dest-name databasename --dest-mi instancename
--dest-resource-group resourcegroup --time "2023-02-23T11:54:00" --deleted-time "deletion_date"
若要將已刪除的資料庫還原至另一個訂用帳戶,請務必將內容 (az account set
) 設定為目標訂用帳戶,然後指定 az sql midb restore
命令的 -s 參數來識別來源訂用帳戶:
az account set -s "targetSubscriptionId"
az sql midb restore -s sourcesubscriptionid -g sourcegroup
--mi sourceinstance -n sourcemanageddb --dest-name targetDbName
--dest-mi targetMI --dest-resource-group targetRG
--time "2022-05-20T05:34:22" --deleted-time "deletion_date"
覆寫現有的資料庫
若要覆寫現有的資料庫,您必須執行下列動作:
- 卸除您想要覆寫的原始資料庫。
- 將從時間點還原的資料庫重新命名為您已卸除資料庫的名稱。
卸除原始資料庫
您可以使用 Azure 入口網站、PowerShell 或 Azure CLI 來卸除資料庫。
另一個卸除資料庫的選項是在 SQL Server Management Studio (SSMS) 中直接連線至受控執行個體,然後使用 DROP
Transact-SQL (T-SQL) 命令:
DROP DATABASE WorldWideImporters;
使用下列其中一種方法來連線至您受控執行個體中的資料庫:
在 Azure 入口網站中,選取受控執行個體中的資料庫。
在命令列中,選取 [刪除]。
若要從受控執行個體中刪除現有資料庫,請執行下列 PowerShell 程式碼,並將參數取代為您的值:
$resourceGroupName = "<resource group name>"
$managedInstanceName = "<managed instance name>"
$databaseName = "<source database name>"
Remove-AzSqlInstanceDatabase -Name $databaseName -InstanceName $managedInstanceName -ResourceGroupName $resourceGroupName
若要從受控執行個體中刪除現有資料庫,請執行下列 Azure CLI 程式碼,並將參數取代為您的值:
az sql midb delete -g mygroupname --mi myinstancename -n mymanageddbname
變更新的資料庫名稱,使其符合原始資料庫名稱
使用 SQL Server Management Studio (SSMS),以直接連線至您的受控執行個體。 然後執行下列 T-SQL 查詢。 查詢會將已還原的資料庫名稱變更為您想要覆寫的已卸除資料庫名稱。
ALTER DATABASE WorldWideImportersPITR MODIFY NAME = WorldWideImporters;
使用下列其中一種方法來連線至您受控執行個體中的資料庫:
後續步驟
深入了解自動備份。