你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将数据库从 Azure SQL 托管实例还原到 SQL Server 2022

适用于:Azure SQL 托管实例

本文介绍如何将数据库备份从 Azure SQL 托管实例还原到 SQL Server 2022。

概述

SQL 托管实例和 SQL Server 2022 之间的数据库格式一致,这使你可以轻松地将数据库从托管实例复制或移动到托管在本地、Azure 中的虚拟机或其他云中的 SQL Server 2022 企业版、开发人员版或标准版。

将数据库从托管实例还原到 SQL Server 2022 实例可以解锁以下方案:

  • 确保 SQL 托管实例和基于 SQL Server 的产品之间的数据库移动性。
  • 向客户和其他符合条件的参与方提供数据库副本。
  • 刷新 SQL 托管实例之外的环境。

默认情况下,在所有现有实例和任何新部署的实例上都可以将仅复制完整备份数据库从 SQL 托管实例还原到 SQL Server 2022。

重要

将仅复制完整备份数据库从 SQL 托管实例还原到 SQL Server 2022 的功能将在 SQL Server 2022 主要支持结束前可用。

在 SQL 托管实例上进行备份

首先,创建用于从实例访问存储帐户的凭据,对数据库进行仅复制备份,然后存储备份。

可以使用托管标识或共享访问签名 (SAS) 令牌来创建凭据。

托管标识是 Microsoft Entra ID(以前称为 Azure Active Directory)的一项功能,它在 Microsoft Entra ID 中为 Azure 服务实例(如 Azure SQL 托管实例)提供自动托管标识(系统分配的托管标识)。

可以使用此标识授权对其他 Azure 资源(包括存储帐户)的数据访问请求。 Azure SQL 托管实例等服务具有系统分配的托管标识,还可以具有一个或多个用户分配的托管标识。 可以使用系统分配的托管标识或用户分配的托管标识来授权请求。

在 Azure 存储管理员将备份文件写入存储帐户之前,必须授予托管标识写入数据的权限。 向实例的托管标识授予权限的方式与向任何其他 Microsoft Entra 用户授予权限的方式相同。 例如:

  1. 在 Azure 门户中,在存储帐户的“访问控制(IAM)”窗格上,选择“添加角色分配”。

  2. 选择“存储 Blob 数据参与者”内置 Azure 基于角色的访问控制 (RBAC) 角色。 这将为必要的 Azure Blob 存储容器提供对托管标识的读/写访问权限。

    可以授予更精细的权限,而不是向托管标识授予“存储 Blob 数据参与者”Azure RBAC 角色。 要了解详细信息,请参阅在 Azure Data Lake Storage Gen2 中设置 ACL

  3. 在下一页上,为“将访问权限分配到”选择“托管标识”。

  4. 选择“选择成员”,然后在“托管标识”下拉列表中选择相应的托管标识。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色

现在,创建用于托管标识身份验证的数据库范围的凭据非常简单。

请注意,在以下示例中,Managed Identity 是一个硬编码字符串,你需要将泛型存储帐户名称替换为实际存储帐户的名称:

CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<containername>] 
WITH IDENTITY = 'MANAGED IDENTITY'  

接下来,通过运行以下示例 T-SQL 命令,对数据库进行 COPY_ONLY 备份:

BACKUP DATABASE [SampleDB]
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<containername>/SampleDB.bak'
WITH COPY_ONLY

还原到 SQL Server

使用 RESTORE DATABASE T-SQL 命令的 WITH MOVE 选项将数据库还原到 SQL Server,并为目标服务器上的文件提供显式文件路径。

若要将数据库还原到 SQL Server,请使用适合环境的文件路径运行以下示例 T-SQL 命令:

RESTORE DATABASE [SampleDB]
FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<containername>/SampleDB.bak'
WITH
MOVE 'data_0' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\SampleDB_data_0.mdf',
MOVE 'log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\SampleDBlog.ldf',
MOVE 'XTP' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\SampleDB_xtp.xtp'

备注

若要还原静态加密的数据库(通过使用透明数据加密 - (TDE)),SQL Server 的目标实例必须有权访问用于通过适用于 Azure Key Vault 的 SQL Server 连接器保护源数据库的相同密钥。 有关详细信息,请查看使用 AKV 设置 SQL Server TDE

注意事项

将数据库还原到 SQL Server 时,请考虑以下事项:

  • 必须使用 WITH MOVE 限定符,并为数据文件提供显式路径。
  • 使用服务托管的 TDE 密钥加密的数据库无法还原到 SQL Server。 只有在数据库是使用客户管理的密钥加密的,并且目标服务器可以访问用于加密该数据库的相同密钥时,才能将加密的数据库还原到 SQL Server。 有关详细信息,请参阅使用 Azure Key Vault 设置 SQL Server TDE
  • 将来可能会向 Azure SQL 托管实例引入一些需要更改数据库格式的功能,从而导致备份与 SQL Server 2022 不兼容。 访问此类功能需要显式选择加入。

后续步骤