将 Azure SQL 托管实例中的数据库还原到之前的某个时间点

适用于:Azure SQL 托管实例

可以使用时间点还原来创建一个数据库作为另一个数据库在过去某个时间点的副本。 本文介绍如何对 Azure SQL 托管实例中的数据库执行时间点还原。

注意

已弃用 Create or Update v02.01.2022。 从 2023 年 1 月开始,针对所有数据库还原操作使用 Create or Update v5.0.2022 替换 API 调用。

概述

时间点还原在恢复方案中很有用,例如,对于错误或故障引起的事件、数据无法正确加载或关键数据被删除的情况。 此外,还可以使用它来测试和审核数据库部署。 Azure 备份文件保留 7 到 35 天,具体取决于数据库设置。

在以下情况下,可以使用时间点还原来还原数据库:

  • 从现有数据库进行还原
  • 从已删除数据库还原数据库
  • 将数据库还原到同一托管实例或另一托管实例
  • 将数据库还原到同一订阅中的托管实例或不同订阅中的托管实例

下表显示了 SQL 托管实例的时间点还原方案:

方案 Azure 门户 Azure CLI PowerShell
将现有数据库还原到同一托管实例
将现有数据库还原到另一托管实例
将已删除的数据库还原到同一托管实例
将已删除的数据库还原到另一托管实例
将现有数据库还原到另一订阅中的托管实例
将已删除的数据库还原到另一订阅中的托管实例

权限

若要恢复数据库,必须具备以下角色之一:

  • 订阅中 SQL Server 参与者角色或 SQL 托管实例参与者角色(具体取决于恢复目标)的成员
  • 订阅所有者

若要将数据库还原到其他目标订阅,但你不属于 SQL 托管实例参与者角色,那么你还应具有以下权限:

  • 源 SQL 托管实例上的 Microsoft.Sql/managedInstances/databases/readBackups/action。
  • 目标 SQL 托管实例上的 Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。

有关详细信息,请参阅 Azure RBAC:内置角色

限制

以下限制适用于 SQL 托管实例中的时间点还原:

  • 不能使用时间点还原来恢复整个 SQL 托管实例部署。 仅使用时间点还原来复制托管在 SQL 托管实例上的数据库。

  • 时间点还原的限制取决于是将数据库还原到同一订阅中的托管实例,还是还原到另一订阅中的托管实例。

警告

请注意托管实例的存储大小。 根据要还原的数据的大小,托管实例的存储可能会耗尽。 如果托管实例中没有足够的存储空间用于还原的数据,请使用其他方法。

还原到同一订阅

如果从一个托管实例还原到同一 Azure 订阅中的另一个托管实例,两个托管实例必须位于同一区域中。 目前不支持跨区域还原。

恢复到其他订阅

跨订阅还原时间点还原备份具有以下限制:

  • 两个订阅必须在同一区域中。
  • 两个订阅必须在同一租户中。
  • 只能在主实例上使用还原操作。
  • 只能从主要区域还原备份。 跨订阅时间点还原不支持从异地复制的次要区域还原数据库。
  • 执行还原操作的用户必须分配有 SQL 托管实例参与者角色或具有以下明确的权限:
    • 源 SQL 托管实例上的 Microsoft.Sql/managedInstances/databases/readBackups/action。
    • 目标 SQL 托管实例上的 Microsoft.Sql/managedInstances/crossSubscriptionPITR/action。
  • 如果你要创建自己的密钥 (BYOK),该密钥必须存在于这两个订阅中。

还原现有数据库

可以使用 Azure 门户、PowerShell 或 Azure CLI 还原同一订阅中的现有数据库。 如果要使用 PowerShell 或 Azure CLI 还原到同一订阅中的不同实例,请确保指定目标 SQL 托管实例资源的属性。 默认情况下,数据库会还原到同一实例。

如果是还原到其他订阅,基于创建或更新 v5.0.2022 API 调用的还原操作必须包含 restorePointInTimecrossSubscriptionTargetManagedInstanceIdcrossSubscriptionSourceDatabaseId/crossSubscriptionRestorableDroppedDatabaseId

若要还原现有数据库,可以转到 Azure 门户中的“数据库”页,然后选择“还原”来实现。

或者,若要还原数据库,可以按照以下步骤执行操作:

  1. 登录 Azure 门户

  2. 转到计划将数据库还原到的目标 SQL 托管实例。

  3. 在“概述”页面上,选择“+ 新建数据库”,打开“创建 Azure SQL 托管数据库”页面。

    Screenshot that shows the SQL Managed Instance overview pane in the Azure portal, with adding a new database selected.

  4. 在“创建 Azure SQL 托管数据库”页面的“基本信息”选项卡上,在“项目详细信息”下提供订阅和资源组详细信息。 然后,在“数据库详细信息”下提供计划还原的数据库的新名称。 确认下拉列表中列出了正确的托管实例。 然后选择“下一步: 数据源 >”

    Screenshot of the Azure portal that shows the Basics tab of the Create Azure SQL Managed Database page.

  5. 在“数据源”选项卡上,选择“使用现有数据”下的“时间点还原”。 提供包含源数据库的订阅、资源组和托管实例。 从“托管数据库”下拉列表中,选择要还原的数据库,然后选择要从中还原数据库的时间点。 源实例和目标实例可以是两个相同的实例,也可以是两个不同的实例。 选择“下一步: 其他设置 >”

    Screenshot of the Azure portal that shows the data source tab of the Create Azure SQL Managed Database page, with point-in-time restore selected.

  6. 在“其他设置”选项卡上,可以选中该框以从源数据库继承保留策略,也可以选择“配置保留期”以打开“配置策略”页面,并为还原的数据库设置所需的保留策略。 完成后,选择“查看 + 创建”。

    Screenshot of the Azure portal that shows the additional settings tab of the Create Azure SQL Managed Database page.

  7. 在“查看 + 创建”上,验证成功后,选择“创建”以还原数据库。

此操作会启动还原过程,期间会创建一个新数据库,并在其中填充原始数据库在指定时间点的数据。 有关恢复过程的详细信息,请参阅恢复时间

还原已删除的数据库

可以使用 Azure 门户、Azure PowerShell 或 Azure CLI 来还原已删除的数据库。

若要使用 Azure 门户还原已删除的托管数据库,请执行以下步骤:

  1. 在 Azure 门户中,转到源托管实例。

  2. 在左侧菜单的“数据管理”下,选择“备份”。

  3. 在“显示数据库”下,选择“已删除”。

  4. 对于要还原的数据库,选择“还原”。

    Screenshot that shows available databases in the portal, with the Restore button highlighted to restore a deleted database.

  5. 在“创建 Azure SQL 托管数据库”中,输入或选择要将数据库还原到的目标托管实例的详细信息。 选择“数据源”选项卡。

  6. 在“数据源”中,输入或选择源数据库的详细信息。 选择“其他设置”选项卡。

  7. 在“其他设置”中,配置保留设置。 选择“查看 + 创建” 选项卡。

  8. 在“查看 + 创建”中,选择“创建”以还原已删除的数据库。

覆盖现有数据库

若要覆盖现有数据库,必须执行以下操作:

  1. 删除要覆盖的原始数据库。
  2. 将从时间点还原的数据库重命名为已删除的数据库的名称。

删除原始数据库

可以使用 Azure 门户、PowerShell 或 Azure CLI 删除数据库。

另一种删除数据库的方法是,在 SQL Server Management Studio (SSMS) 中直接连接到托管实例,然后使用 DROP Transact-SQL (T-SQL) 命令:

DROP DATABASE WorldWideImporters;

使用以下方法之一连接到托管实例中的数据库:

  1. 在Azure 门户中,选择托管实例中的数据库。

  2. 在命令栏中,选择“删除”。

    Screenshot that shows how to delete a database by using the Azure portal.

更改新数据库名称以匹配原始数据库名称

使用 SQL Server Management Studio (SSMS) 直接连接到你的托管实例。 然后运行以下 T-SQL 查询。 该查询会将已还原数据库的名称更改为要覆盖的已删除数据库的名称。

ALTER DATABASE WorldWideImportersPITR MODIFY NAME = WorldWideImporters;

使用以下方法之一连接到托管实例中的数据库:

后续步骤

了解自动备份