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

适用于: Azure SQL 托管实例

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

可以在恢复方案中使用时间点还原,例如,解决错误导致的事件、错误加载了数据或删除了重要数据等问题。 还可以使用时间点还原进行测试或审核。 备份文件保留 7 到 35 天,具体取决于数据库设置。

时间点还原可以通过以下方式还原数据库:

  • 从现有数据库还原。
  • 从已删除的数据库还原。
  • 还原到同一个或其他 SQL 托管实例。

限制

SQL 托管实例的时间点还原具有以下限制:

  • 从一个 SQL 托管实例还原到另一个实例时,这两个实例必须在同一订阅和区域中。 目前不支持跨区域和跨订阅的还原。
  • 无法对整个 SQL 托管实例执行时间点还原。 本文仅介绍可行的操作:对 SQL 托管实例上托管的数据库执行时间点还原。

警告

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

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

将现有的数据库还原到 SQL 托管实例的同一实例 将现有的数据库还原到另一个 SQL 托管实例 将已删除的数据库还原到同一个 SQL 托管实例 将已删除的数据库还原到另一个 SQL 托管实例
Azure 门户
Azure CLI
PowerShell

还原现有数据库

使用 Azure 门户、Powershell 或 Azure CLI 将现有数据库还原到同一个 SQL 托管实例。 若要将数据库还原到另一个 SQL 实例,请使用 PowerShell 或 Azure CLI,这样可指定目标 SQL 托管实例和资源组的属性。 如果不指定这些参数,数据库将默认还原到现有 SQL 托管实例。 目前不支持通过 Azure 门户还原到另一个 SQL 托管实例。

  1. 登录到 Azure 门户

  2. 转到你的 SQL 托管实例,选择要还原的数据库。

  3. 在数据库页上选择“还原”:

    使用 Azure 门户还原数据库

  4. 在“还原”页上,选择要将数据库还原到的日期时间点。

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

还原已删除的数据库

可以使用 PowerShell 或 Azure 门户还原已删除的数据库。 若要将已删除的数据库还原到同一个实例,请使用 Azure 门户或 PowerShell。 若要将已删除的数据库还原到另一个实例,请使用 PowerShell。

门户

若要使用 Azure 门户恢复托管数据库,请打开 SQL 托管实例概述页面,然后选择“删除的数据库”。 选择要还原的已删除数据库,然后键入要使用从备份还原的数据创建的新数据库的名称。

还原已删除的 Azure SQL 实例数据库的屏幕截图

../../sql-database

PowerShell

若要将数据库还原到同一个实例,请更新参数值,然后运行以下 PowerShell 命令:

$subscriptionId = "<Subscription ID>"
Get-AzSubscription -SubscriptionId $subscriptionId
Select-AzSubscription -SubscriptionId $subscriptionId

$resourceGroupName = "<Resource group name>"
$managedInstanceName = "<SQL 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

若要将数据库还原到另一个 SQL 托管实例,还需指定目标资源组和目标 SQL 托管实例的名称:

$targetResourceGroupName = "<Resource group of target SQL Managed Instance>"
$targetInstanceName = "<Target SQL 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 

覆盖现有数据库

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

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

删除原始数据库

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

还可通过直接连接到 SQL 托管实例、启动 SQL Server Management Studio (SSMS),然后运行以下 Transact-SQL (T-SQL) 命令来删除数据库:

DROP DATABASE WorldWideImporters;

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

在 Azure 门户上,选择 SQL 托管实例中的数据库,然后选择“删除”。

使用 Azure 门户删除数据库

更改新数据库名称,使之与原始数据库名称匹配

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

ALTER DATABASE WorldWideImportersPITR MODIFY NAME = WorldWideImporters;

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

后续步骤

了解自动备份