你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure SQL 托管实例
本文介绍如何使用 SQL Server Management Studio (SSMS)、PowerShell 或 Azure CLI,通过 托管实例链接,在 SQL Server 和 Azure SQL 托管实例之间扩展包含多个数据库的 Always On 可用性组。
本文介绍了 多数据库链接模式,即通过一个链接复制同一可用性组中的所有数据库。 单一数据库链接模式为每个链路复制一个数据库。
注释
支持在 SQL Server 和 Azure SQL 托管实例 之间将多个数据库在 Always On 可用性组中关联,目前处于预览阶段。
Overview
当你在 SQL Server 和 Azure SQL 托管实例 之间扩展 Always On 可用性组时,你会创建一个链接,将一个可用性组中的多个数据库复制到目标副本。 该链路使用分布式可用性组,几乎实时地将当前主副本的变更复制到次级副本上的只读数据库副本。 这可确保辅助副本上的只读副本与主副本保持同步更新。
你可以使用现有的可用性组,或者从独立数据库开始。 当你在SSMS中选择独立数据库时,向导会在初始主数据库上创建一个单节点可用性组,并通过一个链接复制所选数据库。
SQL Server 或 Azure SQL 托管实例 都可以作为初始的主程序。 从 SQL 托管实例 创建链接需要 SQL Server 2022 或 SQL Server 2025,并配备所需的累积更新和相应的 SQL 托管实例 更新策略。 本文中的创建示例从SQL Server开始。 它们不介绍从 SQL 托管实例创建的过程。 对于配置了匹配更新策略的实例,支持在 SQL Server 与 Azure SQL 托管实例 之间进行角色互换故障转移。
可支持性
在预览期间,通过多数据库链路扩展可用性组,以下要求适用。 支持Windows和Linux上的SQL Server。 您必须安装所需的累积更新(CU)。 早期版本不支持这个功能。
| SQL Server 版本 | 所需的更新 | 支持的版本 |
|---|---|---|
| SQL Server 2022 (16.x) | CU27或更高版本 | 企业与开发者 |
| SQL Server 2025 (17.x) | CU9或更高版本 | 企业与开发者 |
考虑以下情况:
- 标准版不被支持,因为基本可用性组只支持一个数据库。
- SQL Server 2019及更早版本不支持多数据库链接模式,因为它们缺乏SQL Server 2022引入的必要技术。
- 要创建从 SQL 托管实例到 SQL Server 的链接,或将角色反向切换回 SQL Server,你的 SQL 托管实例必须使用与 SQL Server 版本相匹配的更新策略。 对于单向复制和从 SQL Server 切换,目标更新策略必须与你的 SQL Server 版本一致或更高。
- SQL Server 2022 支持复制到配置为 SQL Server 2022、SQL Server 2025 和 Always-up-to-date 策略的实例。
- SQL Server 2025 支持复制到配置为使用 SQL Server 2025 和 Always-up-to-date 策略的实例,但不支持配置为使用 SQL Server 2022 策略的实例。 如果策略不匹配,则在完成切换后,你将无法进行数据复制,也无法回切到 SQL Server。
有关支持单数据库链接的 SQL Server 的版本和版本类型,请参见 托管实例链接版本支持情况。
Caution
你可用性组中的每个 SQL Server 副本必须使用相同的支持 SQL Server 版本,安装了所需的累积更新或更高版本,并且启用了多数据库链接模式。 不要把支持多数据库链接模式的副本和早期版本或禁用该功能的副本混用。 混合这些配置会导致 SQL Server 行为变得不可预测。
先决条件
要在SQL Server和Azure SQL 托管实例之间扩展可用性组,你需要以下先决条件:
- 一个处于活动状态的 Azure 订阅。 如果没有帐户,请创建一个免费帐户。
- 支持的 SQL Server 版本和版本,并安装了所需的服务更新。 你可以使用现有的 Always On 可用性组,或者使用由 SSMS 放入新的单节点可用性组中的独立数据库。 不支持受限可用性组。
- Azure SQL 托管实例 配合适合你场景的更新策略。 当 SQL 托管实例 作为初始主实例时,或在角色互换时,需要使用匹配的策略。 如果你还没有 SQL 托管实例,请开始使用。
- SQL Server Management Studio (SSMS) 22.10.2 或更高版本。
- 脚本配置的话,可以用 Azure PowerShell 搭配 Az 模块版本 16.3.0 或更高版本,以及 Az.SQL 7.1.0 或更高版本,或者 Azure CLI 版本 2.90.0 或更高版本。 你也可使用 Azure Cloud Shell。 确认安装的模块或CLI是否符合这些版本要求。
- 妥善准备的环境。
- 对于多节点可用性组,需要已配置的可用性组侦听器。 配置链路时使用监听者的 IP 地址,而不是单个 SQL Server 副本的 IP 地址。 使用监听器后,链路在本地可用性组故障切换后仍能继续工作。
- 启用多数据库链接模式后,任何 SQL Server 副本上都没有现有的链接。 开始之前,移除所有使用旧单数据库链接模式的链接。
- 目标托管实例上有足够的可用数据库容量和存储空间,以覆盖你可用性组中的所有数据库。 查看资源限制。
Permissions
对于 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 | /读取、/写入、/删除 |
| Microsoft.Sql/managedInstances/serverTrustCertificates | /写入、/删除、/读取 |
启用多数据库链路模式
预览期间默认禁用多数据库链接模式支持。 使用内置sys.sp_multidb_milink的存储过程,在可用性组中的每个 SQL Server 副本上启用该功能,或者在你计划创建单节点组的 SQL Server 实例上启用。
Warning
在启用或禁用多数据库链接模式之前,先移除所有现有链接。 在链接处于激活状态时更改设置可能导致 SQL Server 行为不可预测。 不要混用单数据库和多数据库链接。 切换模式时,先移除链接,修改每个 SQL Server 副本的设置,然后再创建新的链接。
在每个 SQL Server 副本上执行以下命令以启用多数据库链接模式:
EXEC sys.sp_multidb_milink 1;
这个设置会在SQL Server重启后持续存在,所以你只需要在每个副本上启用一次。
要检查设置,可以在每个副本上运行无参数的存储过程。 启用0和禁用时,它会返回1:
EXEC sys.sp_multidb_milink;
如果存储过程不可用,请核实该副本是否安装了受支持的 SQL Server 版本及累积更新。
要禁用多数据库链接模式,首先移除所有链接,然后对每个 SQL Server 副本执行以下命令:
EXEC sys.sp_multidb_milink 0;
准备可用性组数据库
将你想复制的每个 SQL Server 数据库设置为完整的恢复模型,然后创建一个完整的备份。 无论是现有的可用性组数据库还是独立数据库,都需要进行这些准备。 请使用链路配置指南中的 SSMS备份流程 。
Caution
如果你的数据库使用透明数据加密(TDE),在创建链接前,先在目标端准备好加密证书或密钥。 没有它们,链接就无法复制加密数据库。
对于 SQL Server 数据库,将 TDE 证书迁移到 SQL 托管实例。 对于与SQL Server关联的加密SQL 托管实例数据库,使用由客户管理、可访问目标SQL Server的密钥。 查看该链接的 TDE 准备情况,以了解各个方向的要求。
该链接会复制所选可用性组内的所有数据库。 你不能选择子集,所以在创建链接前请先查看目标SQL管理实例的可用容量。 目标节点不能包含与你想复制的数据库名称相同的数据库。 允许使用不同名称的现有数据库,但受实例容量限制限制。
该链接仅支持复制用户数据库。 不支持复制系统数据库。 若要复制存储的 master 实例级对象,或者 msdb,请在目标实例上编写脚本并运行 T-SQL 脚本。
配置监听器和证书
对于多节点可用性组,配置链路时使用监听者的IP地址,无论是在SSMS还是脚本中。 侦听器将连接定向到当前主副本。 不要使用单个 SQL Server 副本的 IP 地址作为链接的合作伙伴端点。 没有监听器,链路在本地可用性组故障切换后无法继续工作。 对于单节点可用性组(包括使用 SSMS 向导为独立数据库创建的可用性组),请使用该 SQL Server 实例的 IP 终结点。
SSMS 向导在 Azure SQL 托管实例与当前的 SQL Server 主副本之间交换证书,且仅限于该主副本。 它不会配置其他 SQL Server 副本的证书信任。 您必须手动复制并配置所需的证书,覆盖到其他所有 SQL Server 副本上,以确保链路在本地可用性组故障切换后仍能继续工作。 这一手动步骤适用于SSMS和脚本配置。 请参阅建立实例间的信任,了解证书交换步骤。
为脚本化链接创建做好准备
使用SSMS来获得推荐的设置体验。 向导自动化了许多配置步骤。 如果你不需要脚本自动化,跳过本节,继续到扩展可用性组的SSMS标签页。
脚本设置是一个高级选项,需要有配置可用性组、端点和证书信任的经验。 只有在你使用PowerShell或Azure CLI并以SQL Server作为初始主文件时,才应完成这些步骤。
该清单涵盖现有可用组和独立数据库。 准备好数据库、信任和终端后,复用现有可用组或在第四步创建一个可用组。 然后创建分布式可用性组。 PowerShell 和 Azure CLI 链接创建命令不会帮你创建可用性组。
对于适合您环境的脚本,请使用SSMS链接向导,并在摘要页面选择脚本。 审查生成的脚本并单独执行。
- 在每个 SQL Server 副本或独立 SQL Server 实例上启用多数据库链接模式,并准备数据库。
- 在实例之间建立信任。 遵循证书创建、公钥交换、根证书导入和证书链验证步骤。 对于多节点组,证书要求应用于每个 SQL Server 副本,而不仅仅是当前的主副本。
- 保护数据库镜像端点。 如果你的可用性组已经有端点,建议用 Alter现有端点 ,而不是新建一个。 为创建链接命令保留已配置的端点端口。
- 准备可用性组。 如果你已经有一个包含所有想复制数据库的可用性组,可以重复使用它,跳过创建新组。 如果你从独立数据库开始,首先在SQL Server上创建一个可用性组。 在 SQL Server 初始主标签页中,使用单节点
CREATE AVAILABILITY GROUP示例,但用完整的CLUSTER_TYPE = NONE数据库列表替换FOR DATABASE [<DatabaseName>],例如FOR DATABASE [DB01], [DB03], [DB05], [DB07]。 将<AGNameOnSQLServer>设置为你想为新组指定的名称。 在继续创建分布式可用性组之前,先运行此脚本。 不要对现有组运行,也不要更改现有组的集群配置。 -
在 SQL Server 上创建分布式可用性组。 使用SQL Server初始主标签页,从分布式可用性组创建步骤开始。 将
<AGNameOnSQLServer>设置为你在上一步重用或创建的可用性组。 对于多节点组,请将<SQLServerIP>设为侦听器的 IP 地址。 对于单节点组,使用SQL Server实例的端点。 在下面的创建命令中,将<DAGName>保留为链接名称,将<AGNameOnSQLMI>保留为托管实例可用性组名称。 - 在 SQL Server 上核实可用性组。 确认始终在线可用性组和分布式可用性组都存在。 然后返回扩展可用性组,选择PowerShell或Azure CLI,并在本文章中运行多数据库创建命令,而不是其他指南的单一数据库命令。
扩展可用性组
为了保留初始化所需的日志记录,建议在创建链接之前,先在受支持的 SQL Server 生成版本上启用跟踪标志 12381,尤其是在处理大型数据库或在多数据库链接模式下处理多个数据库时。 不过,该标志并非必需,且有其他缓解措施,详见 故障排除错误1412。 启用该标志后,日志备份可以继续,但保留的日志记录无法重复使用。 监控 SQL Server 日志增长情况和可用磁盘空间,并在所有正在创建的链接完成播种后立即禁用该标志。
使用SSMS自动创建链接,或者选择PowerShell或Azure CLI进行高级脚本配置。 以下示例使用SQL Server作为初始主服务器。 你也可以从SQL 托管实例开始,配合匹配的更新策略,但这里不涵盖创建流程。
对于脚本配置,完成脚本设置步骤,重用或创建包含所有你想复制数据库的可用性组,然后在运行PowerShell或Azure CLI创建命令前创建分布式可用性组。 或者,如果你从独立数据库开始,本节的SSMS过程会自动创建单节点可用性组,作为链路建立的一部分。
对于多数据库链接模式,在脚本中明确指定 MultiDatabase 并提供 可用性组中的所有数据库名称 。 如果-LinkMode省略,PowerShell默认为SingleDatabase。 在 PowerShell 中使用 --link-mode MultiDatabase,或在 Azure CLI 中使用 -LinkMode MultiDatabase。
Warning
除非每个 SQL Server 副本都已安装所需的累积更新,并已通过 MultiDatabase 存储过程启用多数据库链接模式,否则不要创建使用 sys.sp_multidb_milink 链接模式的链接。 在不支持该模式的 SQL Server 构建中使用此模式可能导致 SQL Server 行为异常。 先审查 可支持 性并 启用多数据库链接模式 。
- SSMS
- PowerShell
- Azure CLI
使用SSMS中的New SQL 托管实例链接向导,创建从现有可用性组或独立数据库到Azure SQL 托管实例的链接。
打开SSMS,连接到SQL Server。 对于多节点可用性组,请通过侦听器的 IP 地址进行连接。 对于独立数据库或单节点组,连接SQL Server实例。
在 对象资源管理器 中,右键点击你想复制的数据库,将鼠标悬停在 Azure SQL 托管实例 链接上,选择“新......”以打开 New SQL 托管实例 链接向导。
在向导的“简介”页上,选择“下一步”。
在 “指定链接选项 ”页面,确认启用多数据库链接模式,并为你的链接提供名称。 模式复选框是只读的:它反映了
sys.sp_multidb_milinkSQL Server 上的设置。 你不能通过勾选复选框来启用该模式。 如果该模式未启用,请检查 SQL Server 版本和累计更新,并在所有副本上启用该功能后再继续。 链接名称使用小写字母。 除了开头或结尾外,允许使用连字符。 选择“下一步”。在“要求”页上,向导将验证建立与辅助副本的链接的要求。 在验证所有要求后选择“下一步”,或解决未满足的任何要求,然后选择“重新运行验证”。
在 “选择数据库” 页面,选择现有的可用性组或独立数据库:
- 选择 AG01 以复制其所有数据库,如 DB01、 DB03、 DB05和 DB07。
- 或者选择独立的 DB10 和 DB11。 启用多数据库链路模式后,SSMS 在当前 SQL Server 实例上创建一个单节点可用性组,将两个数据库放入其中,并通过一个链路复制它们。
查看选择,然后选择 “下一步”。
在 “指定二级副本 ”页面,选择 添加二级副本。 如果 SQL 托管实例是你的辅助实例,请登录 Azure,并选择订阅、资源组和辅助 SQL 托管实例,以连接到该实例。
检查端点设置,并按照 配置SSMS链路中描述的剩余验证步骤完成。
在“摘要”页上,再次查看你的配置。 可选地,选择 脚本 生成脚本。 准备好创建链接后,选择“完成”。
完成所有步骤后,“结果”页会在已成功完成的操作旁边显示复选标记。 现在可以关闭窗口。
多数据库模式通过一个链接复制你可用性组中的数据库。 这种方法不同于单一数据库模式中选择多个数据库,后者为每个数据库创建独立链接。
验证复制
创建链接或添加数据库后,数据会从当前主副本复制到当前的次要副本。 SQL Server 或 Azure SQL 托管实例 都可以作为初始的主程序。 角色互换后,数据会向相反方向复制。 根据数据库大小和网络速度,每个数据库可能在次级副本上初始处于 恢复 状态。 完成初始播种后,数据库将恢复到次要副本,可以立即用于处理只读工作负载。
在任一副本上,使用 SSMS 中的 对象资源管理器 查看每个已复制数据库的 已同步 状态。 展开 Always On 高可用性 和 可用性组,查看为该链接创建的分布式可用性组。
当 SQL Server 为主副本时,如果在受支持的版本上启用了 trace flag 12381,则可在做种期间继续进行事务日志备份。 如果您暂停日志备份以防止过早截断,请在初始同步完成后恢复日志备份。 对于每个没有日志备份计划的数据库,只有在初始做种完成后才进行第一次 事务日志备份 ,而非做种过程中。 正在创建的所有链接的种子设定完成后,如果你启用了该标志,请将其禁用;在 SQL Server 保持主副本期间,定期执行 SQL Server 事务日志备份。 当 Azure SQL 托管实例 是主实例时,它会自动备份事务日志。 当 SQL Server 为辅助副本时,你无需为这些数据库手动执行 SQL Server 日志备份。
种子设定期间过早的日志截断会导致 SQL 托管实例错误日志中出现 错误 1408 和 1412。 在支持此功能的构建版本中,跟踪标志 12381 可防止此类截断。 在为所有正在创建的链接完成设定基线后,将其禁用,并在启用期间监控事务日志的使用情况、增长率和可用磁盘空间。 只要所需记录仍保留,日志备份就可以继续。 这种保留不能取代做种后的常规日志备份。 参见 防止日志过早截断。
添加数据库
使用 SSMS 向导从当前主副本添加数据库,无论当前主副本是 SQL Server 还是 SQL 托管实例。 向导会自动完成必要的更改。 高级自动化建议使用PowerShell或Azure CLI。 添加数据库在主端只需操作一次。
在添加数据库之前,请确认现有链接是否使用多数据库链接模式,并且目标节点有足够的数据库容量和存储空间,且没有与新数据库冲突的现有数据库名称。 当 SQL Server 是主服务器时,将所有未进入可用性组的新数据库设置为完整恢复模型,并使用 SSMS 备份过程创建完整备份。
添加带有SSMS的数据库
使用 将数据库添加到 Azure SQL 托管实例链接 向导,将数据库添加到现有的多数据库链接:
在SSMS中连接到当前的主节点。 在对象资源管理器中,展开“始终在线高可用性”和“可用性组”。
右键点击你的链接的分布式可用性组,将鼠标悬停在 Azure SQL 托管实例 链接上,选择添加数据库......。
依次完成简介和Azure 登录,然后在选择链接页面上选择多数据库链接。
在 “选择数据库” 页面,选择你想添加的数据库。 你只能添加带有 “准备好状态 ”的数据库。 链接中已有的数据库显示为 已包含在所选链接中。 在继续之前,先解决任何资格问题。
完成 验证 与审查 摘要。 选择 完成 来执行变更,或者选择 脚本 生成脚本而不执行变更,这样你可以单独审查、定制和运行。 如果你在向导中执行变更,关闭前请查看 结果 。
添加带有脚本的数据库
在当前的主节点上执行添加操作。 按照当时的说明操作。
当 SQL Server 是主服务器时
使用 T-SQL 将每个数据库添加到可用性组。 该链接会将新增内容同步到 SQL 托管实例。 SQL 托管实例无需进一步操作。 对于此次添加,不要运行 PowerShell 或 Azure CLI 更新。
当 SQL 托管实例 是主程序时
使用PowerShell或Azure CLI更新SQL 托管实例上的链接。 该链接会自动将新增的数据库传播到可用组。 在 SQL Server 上无需执行单独步骤。 提供 完整的预定会员名单,包括你希望保留的所有现有数据库和新数据库。 所提供的名单替换了当前的会员。 省略某个数据库会将其从该链接的成员中移除。
例如,要在已包含 DB09、DB07、DB05 和 DB03 的链接中添加 DB09 时,请在列表中保留这四个名称,并将 DB01 也添加到列表中。 用你的值替换资源和数据库名称。
| PowerShell 变量 | Azure CLI 变量 | Description |
|---|---|---|
$ResourceGroup |
ResourceGroupName |
包含SQL管理实例的资源组。 |
$ManagedInstanceName |
ManagedInstanceName |
托管链接的SQL管理实例名称。 |
$DAGName |
DAGName |
现有链路名称,与创建时使用的分布式可用性组名称相匹配。 |
$DatabaseNames |
DatabaseNames |
需保留的现有数据库和需新增的数据库的完整列表。 该示例保留 DB01、 DB03、 DB05和 DB07,并添加 DB09。 |
- PowerShell
- Azure CLI
在PowerShell中使用 Update-AzSqlInstanceLink 。 重用创建时的 $ResourceGroup、$ManagedInstanceName 和 $DAGName,或者将它们设置为你要更新的资源组、实例和链接:
# Include every existing database to retain and each new database to add.
$DatabaseNames = @("DB01", "DB03", "DB05", "DB07", "DB09")
Update-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName -Database $DatabaseNames
对每个新增数据库重复复制 验证步骤 。 只有在 SQL Server 是主节点时,才遵循手动日志备份步骤。
删除数据库
在当前主副本上使用 SSMS 向导,自动完成两侧的删除。 删除数据库需要先将其从 SQL 托管实例 上的链接和可用性组中移除。 只拆一侧并不能完成手术。
Warning
如果你在 SQL 托管实例 的链接中移除数据库,但保留在可用性组,那么该可用性组就会变得不健康。 双方都必须完全切除。 对于脚本化删除,请按照适用于你当前主副本的部分操作。
移除带有SSMS的数据库
无论 SQL Server 还是 SQL 托管实例 充当主实例,以下步骤均适用:
在SSMS中连接到当前的主节点。 在对象资源管理器中,展开“始终在线高可用性”和“可用性组”。
右键点击该链接的分布式可用性组,将鼠标悬停在 Azure SQL 托管实例 链接上,然后选择“移除数据库......”。
在“从 Azure SQL 托管实例 Link 中删除数据库”向导中,依次完成简介和Azure 登录步骤,然后在选择链接页上选择该链接。
在 选择数据库中,选择要删除的数据库。 例如,选择 DB05 将其从链接中移除,然后选择 “下一步”。
完成 验证,审核 摘要,然后选择 完成 执行移除,或先用 脚本 检查生成的命令。 关闭向导前,请检查 Results,确认操作已成功完成。
移除带有脚本的数据库
两个实例都删除数据库。 当前的主节点决定先更新哪个实例。
PowerShell 和 Azure CLI 示例使用以下变量:
| PowerShell 变量 | Azure CLI 变量 | Description |
|---|---|---|
$ResourceGroup |
ResourceGroupName |
包含SQL管理实例的资源组。 |
$ManagedInstanceName |
ManagedInstanceName |
托管链接的SQL管理实例名称。 |
$DAGName |
DAGName |
现有链路名称,与创建时使用的分布式可用性组名称相匹配。 |
$DatabaseNames |
DatabaseNames |
保留数据库的完整列表,不包括需要删除的。 示例包括排除DB05和保留 DB01、 DB03、 DB07DB09和 。 |
当 SQL Server 是主服务器时
- 用 T-SQL 把数据库从可用性组中移除。
- 使用PowerShell或Azure CLI将数据库从SQL 托管实例链接中移除,如本节所示。
在 SQL 托管实例 步骤中,提供要保留的完整数据库列表,只省略你想删除的数据库。 例如,如果链接包含 DB01、 DB03、 DB05、 DB07和 DB09,以下命令会移除 DB05 并保留其他四个。 用你的值替换资源和数据库名称。
- PowerShell
- Azure CLI
使用 Update-AzSqlInstanceLink。 重用创建时的 $ResourceGroup、$ManagedInstanceName 和 $DAGName,或者将其设置为你想要更新的资源组、实例和链接:
# Include only the databases to retain, excluding DB05.
$DatabaseNames = @("DB01", "DB03", "DB07", "DB09")
Update-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName -Database $DatabaseNames
当 SQL 托管实例 是主程序时
- 使用PowerShell或Azure CLI将数据库从SQL 托管实例链接中移除,如本节所示。
- 在 SQL Server 上使用 T-SQL 将数据库从其可用性组中移除。 只有完成这一步,移除才算完成。
在 SQL 托管实例步骤中,提供要保留的完整数据库列表,仅省略你想要删除的数据库。 例如,如果链接包含 DB01、 DB03、 DB05、 DB07和 DB09,以下命令会移除 DB05 并保留其他四个。 用你的值替换资源和数据库名称。
- PowerShell
- Azure CLI
使用 Update-AzSqlInstanceLink。 重用创建时的 $ResourceGroup、$ManagedInstanceName 和 $DAGName,或者将它们设置为要更新的资源组、实例和链接:
# Include only the databases to retain, excluding DB05.
$DatabaseNames = @("DB01", "DB03", "DB07", "DB09")
Update-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName -Database $DatabaseNames
确认被移除的数据库不再属于链接或可用性组。 从复制中移除数据库并不等同于删除其保留的副本。 在决定是否删除不再需要的副本之前,请仔细查看两个实例的数据库。
故障转移或直接切换到 Azure
使用 SSMS 或脚本中的现有故障转移过程,在 SQL Server 和 Azure SQL 托管实例 之间互换角色。 角色互换要求SQL管理实例使用与你SQL Server版本匹配的更新策略。 对于单向复制并切换到 Azure SQL 托管实例,其更新策略必须与你的 SQL Server 版本相同或更高。 如果策略不匹配,此后你将无法复制数据或故障回复到 SQL Server。 回顾支持的组合。 有关迁移和切换指南,请参见 “带链接的迁移”。
监视复制并排查复制问题
使用以下动态管理视图(DMV)和 SQL Server 上的目录视图来检查主可用性组、副本连接性以及每个数据库的复制健康状况:
| View | 信息 |
|---|---|
| sys.availability_groups | 可用性组,不包括内部数据库级复制组。 |
| sys.dm_hadr_availability_replica_states | 主组和内部各个数据库复制组的角色、连接状态和同步运行状况。 |
| sys.dm_hadr_database_replica_states | 数据库级复制状态和同步健康。 |
sys.dm_hadr_internal_availability_groups |
为多个数据库链接模式下的单个数据库创建的内部复制组。 |
sys.dm_hadr_internal_availability_replicas |
在多数据库链路模式下,属于内部各数据库复制组的副本。 |
SELECT * FROM sys.availability_groups;
SELECT * FROM sys.dm_hadr_availability_replica_states;
SELECT * FROM sys.dm_hadr_database_replica_states;
SELECT * FROM sys.dm_hadr_internal_availability_groups;
SELECT * FROM sys.dm_hadr_internal_availability_replicas;
如果内部复制 DMV 不可用,或执行 sys.sp_multidb_milink存储过程时报告其不可用,请验证该副本上安装的 SQL Server 版本和累积更新。 关于一般的连接性和复制故障排除,请参见“Troubleshoot the 托管实例 link”。
局限性
通过多数据库链路扩展可用性组时,请考虑以下限制:
- 链接名称必须使用小写字母。 允许使用连字符,但名字不能以连字符开头或结尾。
- 当处于多数据库模式的链接处于活动状态时,请勿将任何 SQL Server 副本降级到低于 SQL Server 2022 CU27 或 SQL Server 2025 CU9 的版本(视适用情况而定)。 降级到不足要求的 CU 可能引发不可预测的问题,即使没有备用切换。
- 不支持受限可用性组。
- 单数据库链接和多数据库链接不能共存于同一 SQL Server 实例上。
- 你不能在原地更改链接的模式。 要在单数据库和多数据库链接模式之间切换,先移除所有现有链接,在每个 SQL Server 副本上更改模式,然后在新模式下重新创建链接。
- 当你为现有的可用性组创建链接时,该组内的所有数据库都必须被复制。 你不能只选择该组数据库中的一部分。
- 目标SQL管理实例剩余的数据库容量限制了你可复制的数据库数量。 通用用途和业务关键层最多支持每个实例 100 个数据库,而新一代通用用途层最多支持每个实例 500 个数据库。 现有数据库也计入这些限额。 例如,一个数据库限制为100个且已有10个数据库的实例,容量可增加90个。 更多信息请参见 资源限制。
- 在 SQL Server 上,将超出目标 SQL 管理实例可用容量的数据库添加到可用性组可以成功,但复制到 SQL 托管实例 则失败。 此状态可能导致链接处于不一致状态,需要手动从可用性组中移除未复制的数据库。
- 添加数据库会通过链接传播,但移除一侧的数据库不会自动移除另一侧的数据库。 如果你从可用性组中移除数据库,其副本仍会留在 SQL 托管实例 上。 如果你在 SQL 托管实例 的链接中移除数据库,数据库仍会留在可用性组中,无需通过链接复制,需要手动清理。
- 通过SSMS向现有链路添加数据库时,只能添加处于 “准备好” 状态的数据库。 你不能添加属于其他可用性组的数据库,或名称已在目标位置存在的数据库。