Compartir a través de

为链接准备环境 - Azure SQL 托管实例

适用于:Azure SQL 托管实例

本文介绍如何为托管实例链接准备环境,以便在安装到 Windows 或 Linux 的 SQL Server和 Azure SQL 托管实例之间执行复制操作。

注意

可以使用可下载的脚本自动为托管实例链接准备环境。 有关详细信息,请参阅自动执行链接设置博客

先决条件

若要创建 SQL Server 和 Azure SQL 托管实例之间的链接,需要满足以下先决条件:

  • 一个有效的 Azure 订阅。 如果没有订阅,请创建一个试用帐户
  • 支持的 SQL Server 版本,安装了所需的服务更新。
  • Azure SQL 托管实例。 开始创建(如果没有)。
  • 确定要用作初始主数据库的服务器,以确定应从何处创建链接。
    • 仅从 SQL Server 2022 CU10 开始支持配置 SQL 托管实例主数据库到 SQL Server 辅助数据库的链接。

注意

创建要与链接功能一起使用的 SQL 托管实例时,请考虑到 SQL Server 使用的任何内存中 OLTP 功能的内存要求。 有关详细信息,请参阅 Azure SQL 托管实例资源限制概述

权限

对于SQL Server,应具有 sysadmin 权限。

对于 Azure SQL 托管实例,你应是 SQL 托管实例参与者的一位成员,或具有自定义角色的以下权限:

Microsoft.Sql/ 资源 必要的权限
Microsoft.Sql/managedInstances /read、/write
Microsoft.Sql/managedInstances/hybridCertificate /action
Microsoft.Sql/managedInstances/databases /read、/delete、/write、/completeRestore/action、/readBackups/action、/restoreDetails/read
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /read、/write、/delete、/setRole/action
Microsoft.Sql/managedInstances/endpointCertificates /read
Microsoft.Sql/managedInstances/hybridLink /read、/write、/delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write、/delete、/read

准备 SQL Server 实例

若要准备 SQL Server 实例,需要验证:

  • 是否至少使用了支持的最低版本。
  • 是否已启用可用性组功能。
  • 是否添加了在启动时应用的正确跟踪标志。
  • 数据库处于完整恢复模式并已备份。

要使这些更改生效,需要重启 SQL Server。

安装服务更新

确保 SQL Server 版本已安装相应的服务更新,如版本可支持性表中所列。 如果需要安装任何更新,则必须在更新期间重启 SQL Server 实例。

若要检查 SQL Server 版本,请在 SQL Server 上运行以下 Transact-SQL (T-SQL) 脚本:

-- Run on SQL Server
-- Shows the version and CU of the SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';

master 数据库中,创建数据库主密钥

master 数据库中创建数据库主密钥(如果尚不存在)。 在下面的脚本中插入密码替代 <strong_password>,并将其保存在机密且安全的地方。 在 SQL Server上运行此 T-SQL 脚本:

-- Run on SQL Server
-- Create a master key
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';

为确保你有数据库主密钥,请在 SQL Server 上使用以下 T-SQL 脚本:

-- Run on SQL Server
USE master;
GO
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%';

启用可用性组

链接功能依赖于默认情况下禁用的 Always On 可用性组功能。 有关详细信息,请参阅启用 Always On 可用性组

注意

对于 Linux 上的 SQL Server,请参阅启用 Always On 可用性组

若要确认是否启用了可用性组功能,请在 SQL Server 上运行以下 T-SQL 脚本:

-- Run on SQL Server
-- Is the availability groups feature enabled on this SQL Server
DECLARE @IsHadrEnabled sql_variant = (select SERVERPROPERTY('IsHadrEnabled'))
SELECT
    @IsHadrEnabled as 'Is HADR enabled',
    CASE @IsHadrEnabled
        WHEN 0 THEN 'Availability groups DISABLED.'
        WHEN 1 THEN 'Availability groups ENABLED.'
        ELSE 'Unknown status.'
    END
    as 'HADR status'

重要

对于 SQL Server 2016 (13.x),如果需要启用可用性组功能,则需要完成准备 SQL Server 2016 先决条件 - Azure SQL 托管实例链接中记录的额外步骤。 对于链接支持的 SQL Server 2019 (15.x) 及更高版本,不需要执行这些额外步骤。

如果未启用可用性组功能,请按照以下步骤启用它:

  1. 打开“SQL Server 配置管理器”。

  2. 在左侧窗格中,选择“SQL Server 服务”。

  3. 右键单击 SQL Server 服务,然后选择“属性”。

    SQL Server 配置管理器的屏幕截图,其中包括用于打开服务属性的选项。

  4. 转到“AlwaysOn 可用性组”选项卡。

  5. 选中“启用 AlwaysOn 可用性组”复选框,然后选择“确定”。

    显示 Always On 可用性组属性的屏幕截图。

    • 如果使用 SQL Server 2016 (13.x),且禁用“启用 Always On 可用性组”选项并显示消息 This computer is not a node in a failover cluster.,请按照准备 SQL Server 2016 先决条件 - Azure SQL 托管实例链接中所述的额外步骤进行操作。 完成这些其他步骤后,请再次返回并重试此步骤。
  6. 在对话框中选择“确定”

  7. 重启 SQL Server 服务。

启用启动跟踪标志

为了优化链接的性能,建议在启动时启用以下跟踪标志:

  • -T1800:当可用性组中主要副本和次要副本的日志文件托管在具有不同扇区大小(如 512 字节和 4 KB)的磁盘上时,此跟踪标志可以优化性能。 如果主要副本和次要副本的磁盘扇区大小均为 4 KB,则不需要此跟踪标志。 有关详细信息,请参阅 KB3009974
  • -T9567:在自动种子设定期间,此跟踪标志可对可用性组的数据流启用压缩。 压缩会增大处理器的负载,但可以显著减少种子设定期间的传输时间。

注意

对于 Linux 上的 SQL Server,请参阅启用跟踪标志

若要在启动时启用这些跟踪标志,请执行以下步骤:

  1. 打开“SQL Server 配置管理器”。

  2. 在左侧窗格中,选择“SQL Server 服务”。

  3. 右键单击 SQL Server 服务,然后选择“属性”。

    SQL Server 配置管理器的屏幕截图。

  4. 转到“启动参数”选项卡。在“指定启动参数”中,输入 -T1800,然后选择“添加”以添加启动参数。 然后输入 -T9567 并选择“添加”以添加其他跟踪标志。 选择“应用”以保存所做的更改。

    启动参数属性的屏幕截图。

  5. 选择“确定”以关闭“属性”窗口。

有关详细信息,请参阅启用跟踪标志的语法

重启 SQL Server 并验证配置

在确保你使用的 SQL Server 版本是受支持的版本,启用了 Always On 可用性组功能并添加了启动跟踪标志后,请重启 SQL Server 实例以应用所有这些更改:

  1. 打开“SQL Server 配置管理器”。

  2. 在左侧窗格中,选择“SQL Server 服务”。

  3. 右键单击“SQL Server 服务”,然后选择“重启”。

    SQL Server 重启命令调用的屏幕截图。

重启后,在 SQL Server 上运行以下 T-SQL 脚本以验证 SQL Server 实例的配置:

-- Run on SQL Server
-- Shows the version and CU of SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';
GO
-- Shows if the Always On availability groups feature is enabled
SELECT SERVERPROPERTY ('IsHadrEnabled') as 'Is Always On enabled? (1 true, 0 false)';
GO
-- Lists all trace flags enabled on SQL Server
DBCC TRACESTATUS;

SQL Server 版本应属于已应用相应服务更新的受支持版本,应启用 Always On 可用性组功能,并且应启用跟踪标志 -T1800-T9567。 以下屏幕截图是已正确配置的 SQL Server 实例的预期结果示例:

显示 S S M S 中预期结果的屏幕截图。

配置网络连接

要使链接正常工作,SQL Server 与 SQL 托管实例之间必须建立了网络连接。 所选的网络选项取决于 SQL Server 实例是否位于 Azure 网络上。

Azure 虚拟机上的 SQL Server

将 SQL Server 部署到托管 SQL 托管实例的同一 Azure 虚拟网络中的 Azure 虚拟机是最简单的方法,因为这两个实例之间会自动建立网络连接。 有关详细信息,请参阅快速入门:配置 Azure VM 以连接到 Azure SQL 托管实例

如果 Azure 虚拟机实例上的 SQL Server 与托管实例位于不同的虚拟网络中,则需要在这两个虚拟网络之间建立连接。 要使该方案可行,不一定要将虚拟网络置于同一订阅中。

可通过两个选项连接虚拟网络:

对等互连使用 Azure 主干网络,因此是首选;这样的话,从连接角度来看,对等互连虚拟网络中的虚拟机与同一虚拟网络中的虚拟机之间的延迟没有明显差别。 支持同一区域中网络之间的虚拟网络对等互连。 2020 年 9 月 22 日之后创建的子网中托管的实例支持全局虚拟网络对等互连。 有关详细信息,请参阅常见问题 (FAQ)

Azure 之外的 SQL Server

如果 SQL Server 实例是在 Azure 外部托管的,请使用以下任一选项在 SQL Server 与 SQL 托管实例之间建立 VPN 连接:

提示

建议在复制数据时使用 ExpressRoute 以获得最佳网络性能。 为用例预配具有足够带宽的网关。

环境之间的网络端口

无论连接机制如何,都必须满足网络流量在环境之间流动的要求:

承载托管实例的子网上的网络安全组 (NSG) 规则需要允许:

  • 入站端口 5022 和端口范围 11000-11999,用于接收来自源 SQL Server IP 的流量
  • 出站端口 5022,用于将流量发送到目标 SQL Server IP

托管 SQL Server 的网络上的所有防火墙,主机 OS 需要允许:

  • 入站端口 5022 已打开,以接收来自 MI 子网 /24(例如 10.0.0.0/24)的源 IP 范围的流量
  • 出站端口 5022 和端口范围 11000-11999 已打开,以将流量发送到 MI 子网(例如 10.0.0.0/24)的目标 IP 范围

显示在 SQL Server 和托管实例之间建立链接的网络需求的屏幕截图。

下表描述了每个环境的端口操作:

环境 要执行的操作
SQL Server(在 Azure 之中) 在网络防火墙端口 5022 上允许流入和流出 SQL 托管实例的整个子网 IP 范围的流量。 如有必要,请在 SQL Server 主机操作系统 (Windows/Linux) 防火墙上执行相同操作。 若要允许在端口 5022 上进行通信,请在托管 VM 的虚拟网络中创建网络安全组 (NSG) 规则。
SQL Server(在 Azure 之外) 在网络防火墙端口 5022 上允许流入和流出 SQL 托管实例的整个子网 IP 范围的流量。 如有必要,请在 SQL Server 主机操作系统 (Windows/Linux) 防火墙上执行相同操作。
SQL 托管实例 在 Azure 门户中创建 NSG 规则以在端口 5022 和 端口范围 11000-11999 上允许来自托管 SQL Server 的 IP 地址和网络的入站和出站流量。

在 SQL Server 实例的 Windows 主机操作系统上使用以下 PowerShell 脚本在 Windows 防火墙中打开端口:

New-NetFirewallRule -DisplayName "Allow TCP port 5022 inbound" -Direction inbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
New-NetFirewallRule -DisplayName "Allow TCP port 5022 outbound" -Direction outbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP

下图显示了本地网络环境的示例,指示环境中的所有防火墙都需要具有开放端口,包括托管 SQL Server 的操作系统防火墙,以及任何企业防火墙和/或网关:

显示在 SQL Server 和托管实例之间建立链接的网络基础结构的屏幕截图。

重要

  • 需要在网络环境(包括主机服务器)的每个防火墙以及网络上的任何企业防火墙或网关中打开端口。 在企业环境中,可能需要向网络管理员显示本部分中的信息,以帮助在企业网络层中打开其他端口。
  • 虽然可以选择在 SQL Server 端自定义终结点,但无法更改或自定义 SQL 托管实例的端口号。
  • 承载托管实例的子网和 SQL Server 的 IP 地址范围不得重叠。

将 URL 添加到允许列表

根据网络安全设置,可能需要将 SQL 托管实例 FQDN 的 URL 以及 Azure 使用的一些资源管理终结点添加到允许列表中。

下表列出了应添加到允许列表的资源:

  • SQL 托管实例的完全限定域名 (FQDN)。 例如:managedinstance1.6d710bcf372b.database.chinacloudapi.cn
  • Microsoft Entra 颁发机构
  • Microsoft Entra 终结点资源 ID
  • 资源管理器终结点
  • 服务终结点

按照配置 SSMS 部分中的步骤访问 SQL Server Management Studio (SSMS) 中的“工具”界面,并标识你的云中你需要添加到允许列表的资源的特定 URL。

测试网络连接

SQL Server 和 SQL 托管实例之间必须有双向网络连接,链接才能正常工作。 在 SQL Server 端打开端口并在 SQL 托管实例端配置 NSG 规则后,使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 测试连接。

通过在 SQL Server 和 SQL 托管实例上创建临时 SQL 代理作业来测试网络,以检查两个实例之间的连接。 在 SSMS 中使用网络检查器时,系统会自动为你创建作业,并在测试完成后将其删除。 如果使用 T-SQL 测试网络,则需要手动删除 SQL 代理作业。

注意

目前不支持通过 Linux 上 SQL Server 上的 SQL Server 代理执行 PowerShell 脚本,因此目前无法从 Linux 上 SQL Server 上的 SQL Server 代理作业执行 Test-NetConnection

若要使用 SQL 代理测试网络连接,需要满足下面的要求:

  • 执行测试的用户必须具有为 SQL Server 和 SQL 托管实例创建作业的权限(作为 sysadmin 或属于 msdb 的 SQLAgentOperatorrole)。
  • SQL Server 代理服务必须在 SQL Server 上运行。 由于代理在 SQL 托管实例上默认处于启用状态,因此无需采取其他操作。

若要在 SSMS 中测试 SQL Server 与 SQL 托管实例之间的网络连接,请执行以下步骤:

  1. 连接到 SSMS 中将用作主要副本的实例。

  2. 在“对象资源管理器”中,展开数据库,然后右键单击要链接到次要副本的数据库。 选择“任务”>“Azure SQL 托管实例链接”>“测试连接”,以打开“网络检查器”向导:

    S S M S 中对象资源管理器的屏幕截图,在数据库链接右键单击菜单中选择了测试连接。

  3. 在“网络检查器”向导的“简介”页上,选择“下一步”

  4. 如果满足“先决条件”页上的所有要求,请选择“下一步”。 否则,请解决任何未满足的先决条件,然后选择“重新运行验证”

  5. 在“登录”页上,选择“登录”以连接到将作为次要副本的其他实例。 选择下一步

  6. 检查“指定网络选项”页上的详细信息,并在必要时提供 IP 地址。 选择下一步

  7. 在“摘要”页上,查看向导执行的操作,然后选择“完成”以测试两个副本之间的连接。

  8. 查看“结果”页,验证两个副本之间是否存在连接,然后选择“关闭”以完成。

注意

仅当源环境和目标环境之间有已经过验证的网络连接时,才继续执行后续步骤。 否则,请先排查网络连接问题,然后再继续。

迁移受 TDE 保护的数据库的证书(可选)

如果要将受透明数据加密 (TDE) 保护的 SQL Server 数据库迁移到托管实例,则在使用此链接之前,必须将本地或 Azure VM SQL Server 实例中的相应加密证书链接到托管实例。 有关详细步骤,请参阅将受 TDE 保护的数据库的证书迁移到 Azure SQL 托管实例

使用服务托管的 TDE 密钥加密的 SQL 托管实例数据库无法链接到 SQL Server。 只有在数据库是使用客户管理的密钥加密的,并且目标服务器可以访问用于加密该数据库的相同密钥时,才能将加密的数据库链接到 SQL Server。 有关详细信息,请参阅使用 Azure Key Vault 设置 SQL Server TDE

注意

SQL Server 2022 CU 14 开始,Linux 上的 SQL Server 支持 Azure Key Vault。

安装 SSMS

SQL Server Management Studio (SSMS) 是使用托管实例链接的最简单方法。 下载 SSMS 19.0 更高版本,并将其安装到客户端计算机。

安装完成后,打开 SSMS 并连接到受支持的 SQL Server 实例。 右键单击用户数据库,并验证菜单中是否显示“Azure SQL 托管实例链接”选项。

显示上下文菜单中 Azure SQL 托管实例链接选项的屏幕截图。

配置 SSMS

你需要修改 SQL Server Management Studio (SSMS) 设置才能使用中国云。

若要更新 SSMS 设置,请执行以下步骤:

  1. 打开 SSMS。
  2. 从菜单中选择“工具”,然后选择“选项”。
  3. 展开“Azure 服务”并选择“Azure 云”。
  4. 在“选择 Azure 云”下,使用下拉列表选择“AzureChinaCloud”

SSMS UI、选项页、Azure 服务的屏幕截图,其中突出显示 Azure 云。

要使用链接,请:

要了解有关该链接的详细信息,请参阅以下内容:

对于其他复制和迁移方案,请考虑: