排查常见的 SQL Server 累积更新安装问题

本文提供一般步骤来排查在将累积更新(CU)或 Service Pack(SP)应用到Microsoft SQL Server 实例时可能会遇到的问题。 它还提供有关如何解决以下错误消息或条件的信息:

  • Wait on Database Engine recovery handle failed 运行升级脚本时,消息和错误 9123417
  • 由于 Windows Installer 缓存中缺少 MSI 或 MSP(更新)文件而发生的安装错误。
  • The Database Engine system data directory in the registry is not validthe User Log directory in the registry is not valid 消息。
  • Network path was not found 如果在 AlwaysOn 故障转移群集实例(FCI)或 AlwaysOn 可用性组上禁用远程注册表服务或管理员共享,则会收到其他错误消息。

累积更新和 Service Pack 安装信息

本部分提供有关 CU 和 SP 安装的信息。

  • 对于Microsoft SQL Server 2016 及更低版本:

    • 在安装 CU 之前,请确保 SQL Server 实例处于该 CU 的正确 SP 级别。 例如,在为 SQL Server 2016 实例应用 SP2 之前,不能对 SQL 2016 SP2 应用 CU17。
    • 始终可以为给定的 SP 基线应用最新的 CU,而无需为该服务包应用以前的 CU。 例如,若要为 SQL Server 2016 SP2 实例应用 CU17,可以跳过将以前的更新应用到 CU14、CU15 和 CU16(如果未安装)并直接应用 CU17。
  • 对于 Microsoft SQL Server 2017 及更高版本,始终可以应用可用的最新 CU。 (SQL Server 2017 及更高版本不存在任何 Service Pack。

  • 在应用 CU 或 SP 之前,请确保更新的实例已正确安装。 无法安装 SQL Server 程序文件和数据文件:

    • 可移动磁盘驱动器。
    • 使用压缩的文件系统。
    • 系统文件所在的目录。
    • 故障转移群集实例上的共享驱动器。
  • 如果在将 CU 或 SP 应用到实例后添加 数据库引擎功能 ,则应在应用任何新的 CU 或 SP 之前将新功能更新为与程序实例相同的级别。

一般故障排除方法

按照以下步骤隔离错误:

  1. 从设置过程的“失败”屏幕中选择“详细信息”。
  2. %programfiles%\Microsoft SQL Server\nnn\Setup Bootstrap\Log 文件夹中,检查“产品功能发现”部分下的Summary.txt,以确定列出的任何功能是否报告失败。 如果这样做,你可以专注于解决影响该功能的问题。
  3. 转到名为 yyyyMMdd_HHmmss(例如20220618_174947)的子文件夹,该子文件夹对应于所关注的报告失败时间。 目标是在必要时检查特定于功能的文件、ERRORLOG 文件和 Details.txt 文件。
  4. 转到 \MSSQLSERVER 子文件夹,找到特定于失败功能的日志文件。 例如, sql_engine_core_inst_Cpu64_1.log。 对于升级脚本失败,请检查 与升级失败时间对应的SQLServer_ERRORLOG_date_time.txt 文件。
  5. 打开 Details.txt 日志文件,然后搜索关键字“Failed”。并非每个故障都被视为关键。

有关详细信息,请参阅 查看和读取 SQL Server 安装程序日志文件

在接下来的几个部分中,检查与你的情况对应的方案,然后按照关联的故障排除步骤进行操作。 如果没有匹配的方案,请查找日志文件中的更多指针。

错误 912 和 3417 和“等待数据库引擎恢复句柄失败”

T-SQL 升级脚本随每个 SQL Server 累积更新一起提供。 在 SQL Server 二进制文件替换为最新版本后运行它们。 如果这些 T-SQL 脚本由于某种原因而未运行,安装程序将报告“等待数据库引擎恢复句柄失败”错误。 安装程序在最新的 SQL Server 错误日志中记录错误 9123417 。 错误 912 和 3417 分别与数据库脚本升级失败和恢复 master 数据库的失败相关联。 错误 912 之前的消息通常提供有关运行升级脚本时发生故障的根本原因的信息。

与 912 和 3417 一起可能会引发各种错误。 有关常见方案和相关解决方案摘要的详细信息,请参阅 应用更新时排查升级脚本失败问题。

Windows 缓存中缺少安装程序文件而导致的设置错误

将 Windows Installer 技术用于安装过程的 SQL Server 等应用程序将关键文件存储在 Windows Installer 缓存中。 默认安装程序缓存位置为 C:\Windows\Installer。 卸载和更新应用程序需要这些文件。 它们对该计算机是唯一的。 如果应用程序被意外删除或遭到入侵,则依赖于这些文件的应用程序的更新将不起作用。 若要解决此问题,请使用还原缺少的 Windows Installer 缓存文件中所述的以下方法之一:

由于注册表中的数据或日志位置不正确,安装程序失败

安装 CU 或 SP 时,如果默认数据和日志文件夹无效,可能会收到类似于以下消息的错误:

“注册表中的用户数据目录无效。 验证实例配置单元下的 DefaultData 密钥是否指向有效的目录。

“注册表中的用户日志目录无效。 验证实例配置单元下的 DefaultLog 密钥指向有效目录。

“安装 SQL Server 数据库引擎 服务实例功能时出错。 注册表中的数据库引擎系统数据目录无效。

若要解决此问题,请执行以下步骤:

  1. 使用 SQL Server Management Studio(SSMS)连接到 SQL Server 实例。
  2. 右键单击对象资源管理器中的 SQL Server 实例,然后选择“属性>数据库设置”。
  3. 在“数据库默认位置”下,确保数据和日志中的文件夹正确。
  4. 在SQL Server 配置管理器中,选择“SQL Server 服务”,双击受影响的 SQL Server 服务,选择“高级”选项卡,并确保数据路径的值正确。 该值灰显,无法修改。 但是,如果要更正,请按照错误中的方法 2 操作,指出安装 SQL Server 累积更新或 Service Pack 以修改 SQLDataRoot 注册表项时,注册表中的数据或日志目录无效。
  5. 重试 CU 或 SP 安装。

Windows Server 故障转移群集 (WSFC) 节点配置错误

若要顺利运行和维护 SQL Server 故障转移群集实例(FCI),请遵循安装故障转移群集故障转移群集实例管理和维护之前所述的最佳做法。 如果在应用 CU 或 SP 时遇到错误,请检查以下条件:

  • 确保 远程注册表 服务处于活动状态,并在 WSFC 群集的所有节点上运行。
  • 如果 SQL Server 的服务帐户不是 Windows 群集中的管理员,请确保在所有节点上启用管理共享(C$ 等)。 有关详细信息,请参阅 管理共享缺失时可能出现的问题概述。 如果未正确配置这些共享,在尝试安装 CU 或 SP 时,你可能会注意到以下一个或多个症状:
    • 更新需要很长时间才能运行或未响应。 安装日志不会显示任何进度。
    • 安装程序日志包含如下消息:

      The network path was not found. System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.

其他信息