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

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

  • Wait on 数据库引擎 recovery handle failed 运行升级脚本时,会出现消息和错误 912 和 3417 。
  • 由于 Windows Installer 缓存中缺少 MSI 或 MSP(更新)文件而发生的安装错误。
  • The 数据库引擎 system data directory in the registry is not valid 或 the 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 以及“Wait on 数据库引擎 recovery handle failed”

T-SQL 升级脚本随每个 SQL Server 累积更新一起提供。 在 SQL Server 二进制文件替换为最新版本后运行它们。 如果这些 T-SQL 脚本由于某种原因而无法运行,安装程序将报告“等待数据库引擎恢复句柄失败”错误。 安装程序在最新的 SQL Server 错误日志中记录错误 912 和 3417 。 错误 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 服务,选择“高级”选项卡,并确保 数据路径 的值正确。 该值灰显,无法修改。 但是,如果要更正,请按照 安装 SQL Server 累积更新或 Service Pack 时,注册表中的数据或日志目录无效错误 中的 方法 2 修改 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.

其他信息