修复:将累积更新应用于包含可用性组的 SQL Server 实例后,会发生错误

症状

请考虑以下情况:

  • 你有一个 SQL Server 2022 实例,其中部署了包含的可用性组。
  • 在包含的可用性组的上下文中) (登录名和作业创建服务器级对象。

在这种情况下,在此实例上安装累积更新SQL Server后,会发生以下错误之一。

错误 1

SQL Server 代理作业失败,并显示以下错误消息:

无法开始执行步骤 2 (原因:JobOwner <JobOwner> 没有权限将代理 <#> 用于子系统 SSIS) 。  步骤失败。

你将看到SQL Server 代理错误日志记录的错误消息,类似于以下消息:

<时间戳> - ! [298] SQLServer 错误:208,对象名称“syssubsystems”无效。 [SQLSTATE 42S02]
<时间戳> - ! [517] SQL 错误编号 208,严重性为 16

在此阶段, syssubsystems 包含的可用性组数据库中缺少 msdb 表,并且存在于实例级 msdb 数据库中。 若要修复这些错误并允许作业成功运行,可以通过连接到侦听器并在表中创建表和行,将实例级 syssubsystemsmsdb 手动复制到包含的可用性组的数据库。

错误 2

创建包含的可用性组后,每五秒就会看到以下错误消息:

激活的 proc '[dbo]。[sp_syspolicy_events_reader]“在队列”<AGName>_AG_SYNC_CONTAINED_msdb.dbo.syspolicy_event_queue“上运行,输出以下内容:”无法作为数据库主体执行,因为主体“##MS_PolicyEventProcessingLogin##”不存在,这种类型的主体无法模拟,或者您没有权限。

错误 3

数据库邮件停止工作后,尝试运行sysmail存储过程将报告类似于以下错误消息:

对象 '[dbo]。[sp_syspolicy_events_reader]“在数据库”master“中不存在,或者对于此操作无效。

错误 4

创建包含的可用性组后,如果连接到包含的可用性组侦听器并创建SQL Server登录主体,在使用登录主体进行连接时,会在 SQL Server Management Studio (SSMS) 收到以下错误:

连接到<侦听器>时出错
无法检索此请求的数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)
执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
对对象“xp_msver”、“mssqlsystemresource”、架构“sys”的 EXECUTE 权限被拒绝。 (Microsoft SQL Server,错误:229)

发生此错误的原因是,未向角色 public 授予 EXECUTExp_msver 包含可用性组 (AG) master 的扩展存储过程的权限。

解决方案

以下针对SQL Server的累积更新中修复了此问题:

2022 SQL Server累积更新 4

关于SQL Server的累积更新

SQL Server的每个新累积更新都包含上一版本中的所有修补程序和安全修补程序。 建议为 SQL Server 版本安装最新版本:

SQL Server 2022 的最新累积更新

状态

Microsoft 目前正在调查这些问题。 本文将随着我们找到更多信息或指南而更新。 在此之前,在安装包含可用性组的安装累积更新之前,可以采取以下必要的预防措施:

  • 编写服务器级对象和SQL Server 代理对象的脚本。
  • 删除包含的可用性组。
  • 应用累积更新。
  • 重新创建包含的可用性组。

Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。

References

了解 Microsoft 用于描述软件更新 的术语