还原 Azure VM 上的 SQL Server 数据库

本文介绍如何还原 Azure 虚拟机 (VM) 上运行的、已由 Azure 备份服务备份到 Azure 备份恢复服务保管库的 SQL Server 数据库。

本文介绍如何还原 SQL Server 数据库。 有关详细信息,请参阅备份 Azure VM 上的 SQL Server 数据库

注意

若要详细了解支持的配置和场景,请参阅 SQL 备份支持矩阵

还原到某个时间点或恢复点

Azure 备份可以还原 Azure VM 上运行的 SQL Server 数据库,如下所述:

  • 使用事务日志备份还原到特定的日期或时间(精确到秒)。 Azure 备份可自动确定相应的完整备份、差异备份和日志链备份,这些是根据所选时间进行还原所必需的。
  • 还原特定的完整备份或差异备份,这样就可以还原到特定的恢复点。

还原先决条件

在还原数据库之前,请注意以下事项:

  • 可将数据库还原到同一 Azure 区域中的 SQL Server 实例。
  • 目标服务器必须注册到与源服务器相同的保管库。 如果要将备份还原到其他保管库,请启用跨订阅还原
  • 如果在服务器上运行多个实例,则所有实例都应启动并运行。 否则,服务器将不会出现在目标服务器列表中,从而无法将数据库还原到该服务器。 有关详细信息,请参阅故障排除步骤
  • 若要将 TDE 加密的数据库还原到另一个 SQL Server,需先将证书还原到目标服务器
  • 应使用还原为文件选项还原启用了 CDC 的数据库。
  • 强烈建议使用还原为文件选项还原“master”数据库,然后再使用 T-SQL 命令进行还原。
  • 对于所有系统数据库(模型数据库、msdb 数据库),请在触发还原操作之前停止 SQL Server 代理服务。
  • 关闭任何可能尝试与其中任何数据库建立连接的应用程序。

还原数据库

若要进行还原,需要以下权限:

  • 在其中执行还原的保管库中的“备份操作员”权限。
  • 对已备份的源 VM 的参与者(写入) 访问权限。
  • 对目标 VM 的参与者(写入)访问权限:
    • 若要还原到同一 VM,则此项将是源 VM。
    • 若要还原到备用位置,则此项将是新的目标 VM。

按如下所述进行还原:

  1. 在 Azure 门户中,转到“备份中心”,然后单击“还原” 。

    Screenshot showing the start the restore process.

  2. 选择“Azure VM 中的 SQL”作为数据源类型,然后是想要还原的数据库,接着单击“继续”。

    Screenshot showing to select the datasource type.

  3. 在“还原配置”中,指定要将数据还原到何处(或如何还原):

    • 备用位置:将数据库还原到备用位置,同时保留原始源数据库。

    • 覆盖数据库:将数据还原到原始源所在的同一 SQL Server 实例。 此选项会覆盖原始数据库。

      重要

      如果选定的数据库属于 Always On 可用性组,则 SQL Server 不允许覆盖数据库。 仅“备用位置”可用。

    • 作为文件还原:不是作为数据库还原,而是以后使用 SQL Server Management Studio 在包含备份文件的计算机上,还原可作为数据库恢复的备份文件。

还原到备用位置

  1. 在“还原配置”菜单中的“还原位置”下,选择“备用位置”。

  2. 选择要将数据库还原到其中的 SQL Server 名称和实例。

  3. 在“还原数据库名称”框中,输入目标数据库的名称。

  4. 如果适用,请选择“当选定的 SQL 实例上已存在同名的 DB 时覆盖”。

  5. 选择“还原点”,并选择是还原到特定时间点,还是还原到特定恢复点

    Screenshot showing to select Restore Point.

    Screenshot showing restore to point in time.

  6. 在“高级配置”菜单中:

    • 若要使数据库在还原后保持不可运行状态,请启用“使用 NORECOVERY 还原”。

    • 若要更改目标服务器上的还原位置,请输入新的目标路径。

      Enter target paths

  7. 选择“确定”以触发还原。 在“通知”区域中或在保管库的“备份作业”视图下跟踪还原进度。

    注意

    时间点还原仅适用于采用完整和批量日志记录恢复模式的数据库日志备份。

还原并覆盖

  1. 在“还原配置”菜单中的“还原位置”下,选择“覆盖数据库”>“确定”。

    Select Overwrite DB

  2. 在“选择还原点”中选择“日志(时间点)”,以还原到特定的时间点。 或者选择“完整和差异”以还原到特定的恢复点

    注意

    时间点还原仅适用于采用完整和批量日志记录恢复模式的数据库日志备份。

还原为文件

若要将备份数据作为 .bak 文件而不是数据库还原,请选择“作为文件还原”。 将文件转储到指定的路径后,可将这些文件放在要将其作为数据库还原到的任何计算机上。 由于可将这些文件移到任何计算机上,因此现在可以跨订阅和区域进行数据还原。

  1. 在“还原位置及还原方式”下,选择“作为文件还原” 。

  2. 选择要将备份还原到的 SQL Server 名称。

  3. 在“服务器上的目标路径”中,输入在步骤 2 中选择的服务器上的文件夹路径。 此位置是服务要将全部所需备份文件转储到的位置。 通常,如果将网络共享路径或已装载的 Azure 文件共享的路径指定为目标路径,会使同一网络中的其他计算机或其上装载的同一 Azure 文件共享更加轻松地访问这些文件。

    注意

    若要在目标注册 VM 装载的 Azure 文件共享上还原数据库备份文件,请确保 NT AUTHORITY\SYSTEM 有权访问该文件共享。 你可以执行以下步骤,以授予对 VM 上装载的 AFS 的读/写权限:

    • 运行 PsExec -s cmd 进入 NT AUTHORITY\SYSTEM shell
      • 执行 cmdkey /add:<storageacct>.file.core.chinacloudapi.cn /user:AZURE\<storageacct> /pass:<storagekey>
      • 使用 dir \\<storageacct>.file.core.chinacloudapi.cn\<filesharename> 验证访问权限
    • 从备份保管库启动“作为文件还原”操作,以还原到 \\<storageacct>.file.core.chinacloudapi.cn\<filesharename>(路径)
      可以从 Sysinternals 页下载 PsExec。
  4. 选择“确定”

    Select Restore As Files

  5. 选择“还原点”,并选择是还原到特定时间点,还是还原到特定恢复点

  6. 使用还原为文件执行 SQL 数据库时间点还原时,它将存储从完整备份所选时间点的所有恢复点。 然后,可以使用 SQL Server Management Studio 在包含这些文件的任何计算机上将其作为数据库还原。

    Restored Backup Files in Destination Path

还原到特定时间点

如果已选择“日志(时间点)”作为还原类型,请执行以下操作:

  1. 在“还原日期/时间”下,打开日历。 在“日历”中,包含恢复点的日期以粗体显示,当前日期已突出显示。

  2. 选择包含恢复点的日期。 不能选择没有恢复点的日期。

    Open the calendar

  3. 选择日期后,时间线图会显示连续范围内的可用恢复点。

  4. 在时间线图表中指定恢复时间,或选择一个时间。 然后选择“确定”。

部分还原为文件

Azure 备份服务将确定在作为文件还原期间要下载的文件链。 但在某些情况下,你可能不想再次下载整个内容。

例如,如果有每周完整、每日差异和日志备份策略,并且已下载特定差异的文件。 你发现这不是正确的恢复点,并决定下载第二天的差异。 现在只需要差异文件,因为已经有了开始的完整文件。 通过 Azure 备份提供的“部分还原为文件”功能,现在可以从下载链中排除完整文件,仅下载差异部分。

排除备份文件类型

ExtensionSettingsOverrides.json 是一个 JSON(JavaScript 对象表示法)文件,其中包含适用于 SQL 的 Azure 备份服务的多个设置的替代。 对于“部分还原为文件”操作,必须添加新的 JSON 字段 RecoveryPointTypesToBeExcludedForRestoreAsFiles。 此字段包含一个字符串值,该值表示下一个还原为文件操作中应排除哪些恢复点类型。

  1. 在要将文件下载到的目标计算机中,转到“C:\Program Files\Azure Workload Backup\bin”文件夹

  2. 创建名为“ExtensionSettingsOverrides.JSON”的新 JSON 文件(如果尚不存在)。

  3. 添加以下 JSON 键值对

    {
    "RecoveryPointTypesToBeExcludedForRestoreAsFiles": "ExcludeFull"
    }
    
  4. 不需要重新启动任何服务。 Azure 备份服务将尝试排除该文件中提到的还原链中的备份类型。

RecoveryPointTypesToBeExcludedForRestoreAsFiles 只接受特定值,这些值表示还原期间要排除的恢复点。 对于 SQL,这些值为:

  • ExcludeFull(如果还原点链中存在其他备份类型,如差异备份和日志备份,则将下载它们)
  • ExcludeFullAndDifferential(如果还原点链中存在其他备份类型,如日志备份,则将下载它们)
  • ExcludeFullAndIncremental(如果还原点链中存在其他备份类型,如日志备份,则将下载它们)
  • ExcludeFullAndDifferentialAndIncremental(如果还原点链中存在其他备份类型,如日志备份,则将下载它们)

还原到特定还原点

如果已选择“完整和差异”作为还原类型,请执行以下操作:

  1. 在列表中选择一个恢复点,然后选择“确定”完成还原点过程。

    Choose a full recovery point

    注意

    默认情况下,将显示过去 30 天的恢复点。 通过选择“筛选器”并选择自定义范围,可以显示 30 天之前的恢复点。

还原包含大量文件的数据库

如果数据库中文件的总字符串大小超过特定的限制,Azure 备份会将数据库文件列表存储在不同的 PIT 组件中,因此在执行还原操作期间无法设置目标还原路径。 文件将还原到 SQL 默认路径。

Restore Database with large file

使用 SSMS 从 .bak 文件恢复数据库

在从 Azure 门户还原时,可以使用“还原为文件”操作以 .bak 格式还原数据库文件。 了解详细信息

完成将 .bak 文件还原到 Azure 虚拟机后,可以通过 SSMS 使用 TSQL 命令触发还原。

若要将数据库文件还原到源服务器上的原始路径,请从 TSQL 还原查询中删除 MOVE 子句。

示例

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'

注意

目标服务器上不应有相同的数据库文件(还原并替换)。 此外,还可以在目标服务器上启用即时文件初始化,以减少文件初始化所用的时间

若要从目标还原服务器重定位数据库文件,可以使用 MOVE 子句来构建 TSQL 命令。

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'  MOVE N'<LogicalName1>' TO N'<TargetFilePath1OnDisk>',  MOVE N'<LogicalName2>' TO N'<TargetFilePath2OnDisk>' GO

示例

  USE [master] 
  RESTORE DATABASE [test] FROM  DISK = N'J:\dbBackupFiles\test.bak' WITH  FILE = 1,  MOVE N'test' TO N'F:\data\test.mdf',  MOVE N'test_log' TO N'G:\log\test_log.ldf',  NOUNLOAD,  STATS = 5 
  GO

如果数据库有两个以上的文件,则可以向还原查询添加其他 MOVE 子句。 还可以使用 SSMS 通过 .bak 文件进行数据库恢复。 了解详细信息

注意

对于大型数据库恢复,建议使用 TSQL 语句。 如果要重定位特定的数据库文件,请查看在“还原为文件”操作期间创建的 JSON 格式的数据库文件列表。

跨区域还原

作为还原选项之一,跨区域还原 (CRR) 允许你在某个次要区域(Azure 配对区域)中还原 Azure VM 上托管的 SQL 数据库。

要载入此功能,请阅读“准备阶段”部分

若要查看是否启用了 CRR,请按照配置跨区域还原中的说明进行操作

查看次要区域中的备份项

如果启用了 CRR,则可以查看次要区域中的备份项。

  1. 在门户中,转到“恢复服务保管库”>“备份项”。
  2. 选择“次要区域”以查看次要区域中的项。

注意

只有支持 CRR 功能的备份管理类型才会显示在列表中。 目前,只允许将次要区域数据还原到次要区域。

Backup items in secondary region

Databases in secondary region

在次要区域中进行还原

次要区域还原用户体验将类似于主要区域还原用户体验。 在“还原配置”窗格中配置详细信息以配置还原时,系统会提示你仅提供次要区域参数。 保管库应位于次要区域,并且应将 SQL 服务器注册到次要区域中的保管库。

Where and how to restore

Trigger restore in progress notification

注意

  • 在触发还原后并处于数据传输阶段时,无法取消还原作业。
  • 在跨区域中执行存储操作所需的角色/访问级别是订阅中的“备份操作员”角色和源及目标虚拟机上的“参与者(写入)”访问权限 。 若要查看备份作业,至少需要在订阅中具有备份读取者权限。
  • 次要区域中可用的备份数据的 RPO 为 12 小时。 因此,打开 CRR 时,次要区域的 RPO 为 12 小时 + 日志频率持续时间(可以设置为至少 15 分钟)。

了解跨区域还原最低角色要求

监视次要区域还原作业

  1. 在 Azure 门户中,转到“备份中心”>“备份作业”。

  2. 为值 CrossRegionRestore 筛选操作,以便查看次要区域中的作业。

    Screenshot showing the filtered Backup jobs.

跨订阅还原

Azure 备份现在允许你从还原点将 SQL 数据库还原到任何订阅(根据以下 Azure RBAC 要求)。 默认情况下,Azure 备份会还原到提供还原点的同一订阅。

通过跨订阅还原 (CSR),可以灵活地还原到租户下的任何订阅和保管库(如果还原权限可用)。 默认情况下,将在所有恢复服务保管库(现有和新创建的保管库)上启用 CSR。

注意

  • 可以从恢复服务保管库触发跨订阅还原。
  • CSR 仅支持基于流式处理的备份,不支持基于快照的备份。
  • 不支持将跨区域还原 (CRR) 与 CSR 一起使用。

Azure RBAC 要求

操作类型 备份操作员 恢复服务保管库 备用操作员
还原数据库或还原为文件 Virtual Machine Contributor 已备份的源 VM 可考虑具有以下权限的自定义角色而不是内置角色:

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Virtual Machine Contributor 将在其中还原数据库或创建文件的目标 VM。 可考虑具有以下权限的自定义角色,而不是内置角色:

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Backup Operator 目标恢复服务保管库

默认情况下,在恢复服务保管库上启用 CSR。 若要更新恢复服务保管库还原设置,请转到“属性”>“跨订阅还原”,然后进行所需的更改。

Screenshot shows how to modify the Cross Subscription Restore settings on a Recovery Services vault for SQL database.

后续步骤

管理和监视 Azure 备份服务备份的 SQL Server 数据库。