升级或修补复制的数据库

适用于:SQL Server - 仅限 Windows

SQL Server 支持从以前版本的 SQL Server 升级复制的数据库;在升级节点时,不需要停止其他节点上的活动。

先决条件

请务必遵守有关拓扑中支持哪些版本的规则:

  • 分发服务器可以是任何版本,只要它大于或等于发布服务器版本(在许多情况下,分发服务器是与发布服务器相同的实例)。

  • 发布服务器的版本可以是低于或等于分发服务器版本的任何版本。

  • 订阅版本取决于出版物的类型。

    • 用于事务发布的订阅服务器版本可以是两个发布服务器版本中的任何一个版本。 例如:SQL Server 2012 (11.x) 发布服务器可以包含 SQL Server 2014 (12.x) 和 SQL Server 2016 (13.x) 订阅服务器;SQL Server 2016 (13.x) 发布服务器可以包含 SQL Server 2014 (12.x) 和 SQL Server 2012 (11.x) 订阅服务器。

    • 合并发布的订阅服务器可以是等于或低于发布服务器版本的所有版本,只要这些版本在生命周期支持周期内受到支持。

升级路径

SQL Server 的升级路径因部署模式而异。 SQL Server 一般情况下提供两个升级路径:

  • 并行升级:部署并行环境,将数据库随关联的实例级别对象(例如登录名、作业等)一起迁移到新环境。

  • 就地升级:替换 SQL Server 位并升级数据库对象,使 SQL Server 安装介质升级现有的 SQL Server 安装。 对于运行可用性组 (AG) 或故障转移群集实例的环境,将就地升级与滚动升级相结合来尽量减少故障时间。

并排升级复制拓扑的常用方法是将发布服务器-订阅服务器对分批迁移到新的并行环境,而不是迁移整个拓扑。 此分阶段方法有助于控制停机时间,并最大程度地减少对依赖于复制的业务的影响。

本文的大部分内容都适用于升级 SQL Server 版本。 但是,在使用服务包或累积更新修补 SQL Server 时,也应使用就地升级过程。

备注

升级复制拓扑涉及多个步骤。 建议在于实际生产环境中运行升级之前,尝试在测试环境中升级复制拓扑的副本。 通过这种方式,在实际升级过程中不需要使用任何操作文档,便能顺利升级,且不会发生成本高昂的长时间停机。 在升级复制拓扑时,可以对生产环境使用 AG 和/或 FCI 来显著减少故障时间。 此外,建议先备份所有数据库,包括 msdbmaster、分发数据库和参与复制的用户数据库,然后再尝试升级。

如果故障转移群集实例中有分发数据库,请确保所有参与节点使用同一内部版本。 我们不建议其中一个节点安装的 SQL Server 版本低于 SQL Server 2016(13.x)SP2-CU3 或 SQL Server 2017(14.x)CU6,而另一个节点安装的 SQL Server 版本高于 SQL Server 2016(13.x)SP2-CU3 或 SQL Server 2017(14.x)CU6。 从 SQL Server 2016 (13.x) SP2-CU3 和 SQL Server 2017 (14.x) CU6 开始,支持在 AG 中使用分发数据库,以及分发数据库中的新对象(表、存储过程)。 如果分发数据库位于故障转移群集实例中,并且你要执行分阶段迁移(并且你无法将所有节点升级到同一版本的 SQL Server),则对于较短的迁移时间段,建议执行帐户任务,例如在具有更高版本的 SQL Server 的节点上添加新的订阅服务器、订阅、发布服务器或发布。

复制矩阵

事务和快照复制兼容性矩阵

发布者 分发服务器 订阅服务器
Azure SQL 托管实例AUTD Azure SQL 托管实例AUTD Azure SQL 数据库
Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
Azure SQL 托管实例2022 Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
Azure SQL 数据库
Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2022 (16.x) SQL Server 2022 (16.x) Azure SQL 数据库
Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2019 (15.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
Azure SQL 数据库
Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2017 (14.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2016 (13.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2014 (12.x) Azure SQL 托管实例AUTD
Azure SQL 托管实例2022
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2012 (11.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)

2022 适用于使用 SQL Server 2022 更新策略配置的 Azure SQL 托管实例AUTD 适用于使用 Always-up-to-date 更新策略配置的 Azure SQL 托管实例

合并复制兼容性矩阵

发布者 分发服务器 订阅服务器
SQL Server 2022 (16.x) SQL Server 2022 (16.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2019 (15.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2017 (14.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2016 (13.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2014 (12.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2012 (11.x) SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2022 (16.x)
SQL Server 2019 (15.x)
SQL Server 2017 (14.x)
SQL Server 2016 (13.x)
SQL Server 2014 (12.x)
SQL Server 2012 (11.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)
SQL Server 2008 R2 (10.50.x)
SQL Server 2008 (10.0.x)

升级注意事项

升级前运行日志读取器代理进行事务复制

在升级 SQL Server 之前,必须确保日志读取器代理处理已发布表中的所有已提交事务。 若要确保所有事务都已处理,请对包含事务发布的每个数据库执行以下步骤:

  1. 确保针对数据库运行了日志读取器代理。 默认情况下,该代理会连续运行。

  2. 停止已发布表上的用户活动。

  3. 日志读取器代理和分发代理支持事务读取和提交操作的批大小。

  4. 执行 sp_replcmds 以验证是否处理了所有事务。 此过程的结果集应为空。

  5. 执行 sp_replflush 以关闭与 sp_replcmds 的连接

  6. 将服务器升级为最新版 SQL Server。

  7. 如果在升级后不自动启动 SQL Server 代理和日志读取器代理,请重新启动它们。

升级后运行代理进行合并复制

升级后,请为每一个合并发布运行快照代理,并为每一个订阅运行合并代理,以更新复制元数据。 无需应用新快照,因为不需要重新初始化订阅。 升级后首次运行合并代理时,将更新订阅元数据。 这表明发布服务器升级时订阅数据库可以保持在线状态和活动状态。

合并复制将发布和订阅元数据存储在发布和订阅数据库中的多个系统表中。 运行快照代理将更新发布元数据,而运行合并代理将更新订阅元数据。 只需生成发布快照即可。 如果合并发布使用参数化筛选器,则每一个分区也都有快照。 无需更新这些已分区快照。

从 SQL Server Management Studio、复制监视器或命令行运行代理。 有关运行快照代理的详细信息,请参阅下列文章:

有关运行合并代理的详细信息,请参阅下列文章:

在使用合并复制的拓扑中升级 SQL Server 之后,如果要使用新功能,请更改所有发布的发布兼容级别。

升级到 Standard、Workgroup 或 Express 版本

在从一个版本的 SQL Server 升级到另一个版本之前,请验证当前正在使用的功能是否在要升级到的版本中受支持。 有关详细信息,请参阅 SQL Server 2022 版本和支持的功能中有关复制的部分。

升级复制拓扑的步骤

这些步骤体现了升级复制拓扑中的服务器的顺序。 无论是运行事务复制还是合并复制,以上步骤都适用。 但是,这些步骤不包括点对点复制、排队更新订阅,也不包括即时更新订阅。

就地升级

  1. 升级分发服务器。
  2. 升级发布服务器和订阅服务器。 可以按任意顺序升级这二者。

备注

对于 SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x),必须同时升级发布服务器和订阅服务器才能与复制拓扑矩阵保持一致。 SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x) 发布服务器或订阅者不能拥有 SQL Server 2016 (13.x) (或更高版本) 发布服务器或订阅服务器。 如果无法同时升级,请使用中间升级将 SQL Server 实例升级到 SQL Server 2014 (12.x),然后将其再次升级到 SQL Server 2016 (13.x) (或更高版本)。

并行升级

  1. 升级分发服务器。
  2. 在新的 SQL Server 实例上重新配置配置分发
  3. 升级发布服务器。
  4. 升级订阅服务器。
  5. 重新配置所有“发布服务器-订阅服务器”对,包括订阅服务器的重新初始化。

分发服务器并行迁移到 Windows Server 的步骤

并行升级是可用于参与故障转移群集的 SQL Server 实例的唯一升级路径。 可以在独立 SQL Server 实例或故障转移群集实例(FCI)中执行以下步骤。

  1. 将新的 SQL Server 实例(独立版或 FCI)、版次和版本设置为 Windows Server 上具有不同 Windows 群集和 SQL Server FCI 名称或独立主机名的分发服务器。 需要使目录结构与旧分发服务器保持一致,以确保在新环境中的同一路径中找到复制代理可执行文件、复制文件夹和数据库文件路径。 这减少了迁移/升级后所需的任何步骤。

  2. 确保同步了复制,然后关闭所有复制代理。

  3. 关闭当前的 SQL Server 分发服务器实例。 如果这是独立实例,则关闭服务器。 如果这是 SQL Server FCI,则在群集管理器中使整个 SQL Server 角色脱机(包括网络名称)。

  4. 删除旧版(当前分发服务器实例)环境的 DNS 和 Active Directory 计算机对象条目。

  5. 更改新服务器的主机名,以匹配旧服务器的主机名。

    1. 如果这是 SQL Server FCI,请使用与旧实例相同的虚拟服务器名称重命名新的 SQL Server FCI。
  6. 使用 SAN 重定向、存储副本或文件复制从前一个实例复制数据库文件。

  7. 使新 SQL Server 实例联机。

  8. 重启所有复制代理,并验证代理是否成功运行。

  9. 验证复制是否正在按预期的方式工作。

  10. 使用 SQL Server 安装介质,将 SQL Server 实例就地升级为新版 SQL Server。

备注

为了减少停机时间,建议将分发服务器的 并行迁移 作为一个活动执行,并将 就地升级到 SQL Server 作为另一个活动。 这样,就可以采用分阶段方法,降低风险,并最大限度地减少停机时间。

合并复制的 Web 同步

合并复制的 Web 同步选项要求将 SQL Server 复制侦听器(replisapi.dll)复制到用于同步的 Internet Information Services (IIS) 服务器上的虚拟目录。 配置 Web 同步时,“配置 Web 同步向导”会将该文件复制到虚拟目录。 若要升级安装在 IIS 服务器上的 SQL Server 组件,必须将 replisapi.dll 从 COM 目录手动复制到 IIS 服务器上的虚拟目录。 有关配置 Web 同步的详细信息,请参阅 配置 Web 同步

从早期版本还原复制的数据库

在从早期版本还原复制数据库的备份时,若要确保保留复制设置:请还原到与创建备份的服务器和数据库同名的服务器和数据库。