如何在数据库重启后清除错误 15404(除了重启)

cro*_*sek 9 sql-server sql-server-agent jobs active-directory

每隔一段时间(例如~几个月),SQL Server 代理每小时作业将开始报告错误 15404 并继续这样做直到被干预。

[298] SQLServer 错误:15404,无法获取有关 Windows NT 组/用户“DOMAIN_NAME\SomeDomainAccount”的信息,错误代码 0x6e。[SQLSTATE 42000] (ConnIsLoginSysAdmin)

有时,在手动重新启动 SQL Server 引擎和 SQL Server 代理服务后会立即发生第一次失败。可以通过重新启动机器来清除问题。

作业所有者是错误消息中列出的名称,并且是 SQL Server 管理员。

SQL Server 引擎服务帐户看起来是一个服务帐户(我相信它是默认安装帐户(比通用 NetworkService 好一个档次,以防止引擎/代理实例之间的干扰):

   NT Service\MSSQL$INSTNAME
Run Code Online (Sandbox Code Playgroud)

如果作业总是失败,那将是一回事,但由于作业在重新启动后成功,这让我认为像这样的服务帐户应该可以正常工作,并且存在一些 A/D 计时问题或可能存在错误。当 IT 被问及 A/D 配置时,回答通常是“没有任何变化”。

  • 重新启动引擎和代理服务可能会导致作业开始失败。
  • 机器重新启动即可解决问题。
  • 随后立即重新启动引擎和代理不再导致作业失败。

链接: 如何解决 SQL Server 8198 错误

小智 4

这不是解决方案,但您可以通过将作业所有者设置为 SQL 帐户来解决该问题。

每次启动作业时,SQL Server 都会验证作业所有者的身份并检查其是否有权执行该作业。如果所有者是 Windows 帐户,则引擎需要查询 Active Directory。如果由于任何原因失败,作业将不会运行。这可能是因为 AD 服务器繁忙、宕机或与网络断开,或者 SQL Server 服务帐户没有权限。

由于它在重新启动后立即起作用,这让我认为它可能与缓存的凭据有关。Windows 将保存它查找到的凭据以供以后使用。该缓存在重新启动时会被清除。也许有什么东西正在破坏缓存。