导入或导出 Azure SQL 数据库但不允许 Azure 服务访问服务器

适用于:Azure SQL 数据库

本文介绍如何在“允许 Azure 服务和资源访问此服务器”设置为“关闭”的情况下导入或导出 Azure SQL 数据库。 本操作说明文章使用 Azure 虚拟机运行 SqlPackage 来执行导入或导出操作。

允许 Azure 服务和资源访问此服务器”设置显示在 Azure 门户的资源菜单“网络”中的“安全”菜单下的“例外”部分中。 有关此设置的详细信息,请参阅 Azure SQL 数据库网络访问控制

登录到 Azure 门户

登录到 Azure 门户

创建 Azure 虚拟机

通过选择“部署到 Azure”按钮来创建 Azure 虚拟机。

借助此模板,可以使用 Windows 版本(最新补丁版本)适用的其他一些选项来部署简单的 Windows 虚拟机。 这在资源组位置部署 A2 大小 VM,并返回 VM 的完全限定的域名。

图像显示标记为“部署到 Azure”的按钮。

有关包括 Azure 快速启动模板的详细信息,请参阅部署简单的 Windows VM

连接到虚拟机

以下步骤说明如何使用远程桌面连接连接到虚拟机。

  1. 部署完成后,转到虚拟机资源。

  2. 选择“连接” 。

    此时会显示远程桌面协议文件(.rdp 文件)窗体,其中包含虚拟机的公共 IP 地址和端口号。

    Azure 门户“连接到 VM”的屏幕截图,其中突出显示了“下载 RDP”。

    注意

    有多种方法可以连接到 VM。 本教程使用远程桌面协议 (RDP) 连接到虚拟机,但如果在环境中部署了 Bastion,则使用 Azure Bastion 的较新解决方案是一种很好的选择。 也可使用 SSH 连接到虚拟机

  3. 选择“下载 RDP 文件”。

  4. 关闭“连接到虚拟机”窗体。

  5. 若要连接到 VM,请打开下载的 RDP 文件。

  6. 出现提示时,选择“连接”。

    • 在 Mac 上,需要一个 RDP 客户端,例如 Mac 应用商店提供的这个远程桌面客户端
  7. 输入在创建虚拟机时指定的用户名和密码,然后选择“确定”。

  8. 你可能会在登录过程中收到证书警告。 选择“是”或“继续”以继续连接。

安装 SqlPackage

下载并安装最新版本的 SqlPackage。 有关详细信息,请参阅 SqlPackage

创建防火墙规则以允许 VM 访问数据库

首先,将虚拟机的公共 IP 地址添加到服务器的防火墙。 以下步骤针对虚拟机的公共 IP 地址创建服务器级 IP 防火墙规则,并启用从虚拟机的连接。

  1. 在左侧菜单中选择“SQL 数据库”,然后在“SQL 数据库”页上选择你的数据库。 此时会打开数据库的概述页,其中显示了完全限定的服务器名称(例如:sql-svr.database.chinacloudapi.cn),并提供了其他配置的选项。

    Azure 门户的数据库概述页的屏幕截图,其中突出显示了服务器名称。

  2. 请复制此完全限定的服务器名称,以便在连接到服务器及其数据库时使用。

  3. 在工具栏上选择“设置服务器防火墙”。

  4. 在“网络”页上的“公共访问”选项卡中的“防火墙设置”部分中,选择“添加客户端 IPv4 地址”。 这会将虚拟机的公共 IP 地址添加到新的服务器级 IP 防火墙规则。 服务器级 IP 防火墙规则可以针对单个 IP 地址或一系列 IP 地址打开端口 1433。

  5. 选择“保存” 。 此时会针对虚拟机的公共 IP 地址创建服务器级 IP 防火墙规则,在服务器上打开端口 1433。

使用 SqlPackage 导出数据库

若要使用 SqlPackage 命令行实用工具导出 Azure SQL 数据库,请参阅导出参数和属性。 SqlPackage 实用工具随附了最新版本的 SQL Server Management StudioSQL Server Data Tools;你也下载最新版本的 SqlPackage

有关创建 BACPAC 文件的详细信息和步骤,请参阅导出到 BACPAC 文件

我们建议在大多数生产环境中使用 SqlPackage 实用工具来实现缩放和提高性能。 如需 SQL Server 客户顾问团队编写的有关使用 BACPAC 文件进行迁移的博客,请参阅 Migrating from SQL Server to Azure SQL Database using BACPAC Files(使用 BACPAC 文件从 SQL Server 迁移到 Azure SQL 数据库)。

此示例演示如何通过 Active Directory 通用身份验证,使用 SqlPackage 来导出数据库。 请将占位符替换为环境特定的值。

SqlPackage /a:Export /tf:testExport.bacpac /scs:"Data Source=<servername>.database.chinacloudapi.cn;Initial Catalog=MyDB;" /ua:True /tid:"apptest.partner.onmschina.cn"

使用 SqlPackage 导入数据库

若要使用 SqlPackage 命令行实用程序导入 SQL Server 数据库,请参阅导入参数和属性。 SqlPackage 包含最新的 SQL Server Management StudioSQL Server Data Tools。 也下载最新版本的 SqlPackage

在大多数生产环境中,建议使用 SqlPackage 而不是 Azure 门户来实现缩放和性能。 有关 SQL Server 客户咨询团队使用 BACPAC 文件进行迁移的博客,请参阅使用 BACPAC 文件从 SQL Server 迁移到 Azure SQL 数据库

以下 SqlPackage 命令可将 AdventureWorks2022 数据库从本地存储导入到 Azure SQL 数据库。 它将创建名为 myMigratedDatabase 的新数据库,其中包含“高级”服务层级和 P6 服务目标。 根据你的环境更改这些值。

SqlPackage /a:import /tcs:"Data Source=<serverName>.database.chinacloudapi.cn;Initial Catalog=myMigratedDatabase>;User Id=<userId>;Password=<password>" /sf:AdventureWorks2022.bacpac /p:DatabaseEdition=Premium /p:DatabaseServiceObjective=P6

重要

若要从公司防火墙后连接到 Azure SQL 数据库,该防火墙必须打开端口 1433。

此示例演示如何通过 Active Directory 通用身份验证,使用 SqlPackage 来导入数据库。

SqlPackage /a:Import /sf:testExport.bacpac /tdn:NewDacFX /tsn:apptestserver.database.chinacloudapi.cn /ua:True /tid:"apptest.partner.onmschina.cn"

性能注意事项

许多因素(例如数据形状)会影响导出速度,因此预期的速度不可预测。 SqlPackage 可能需要花费相当长的时间,尤其是针对大型数据库运行时。

为了获得最佳性能,请尝试以下策略:

  1. 确保数据库上没有运行其他工作负荷。 在导出之前创建一个副本可能是确保没有其他工作负荷运行的最佳解决方法。
  2. 提高数据库服务级别目标 (SLO) 以更好地处理导出工作负荷(主要为读取 I/O)。 如果数据库当前位于 GP_Gen5_4,则使用“业务关键”层也许可为读取工作负荷提供帮助。
  3. 确保有尤其适合大型表的聚集索引。
  4. 虚拟机 (VM) 应与数据库位于同一区域,以帮助避免网络约束。
  5. 在上传到 Blob 存储之前,应在 VM 中提供足够大小的 SSD 来生成临时项目。
  6. VM 应采用足够高的核心和内存配置,可以处理特定的数据库。

存储导入或导出的 BACPAC 文件

可将 BACPAC 文件存储在 Azure BlobAzure 文件存储中。

若要实现最佳性能,请使用 Azure 文件存储。 SqlPackage 在文件系统中运行,因此它可以直接访问 Azure 文件存储。

若要降低成本,请使用成本低于高级 Azure 文件共享的 Azure Blob。 但是,它要求在执行导入或导出操作之前,在 Blob 与本地文件系统之间复制 BACPAC 文件。 因此,该过程需要更长时间。

若要上传或下载 .BACPAC 文件,请参阅使用 AzCopy 和 Blob 存储传输数据以及使用 AzCopy 和文件存储传输数据

根据具体的环境,可能需要配置 Azure 存储防火墙和虚拟网络