每隔一段时间(例如〜几个月),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
如果作业总是失败,那将是一回事,但由于作业在重新启动后成功,这让我认为像这样的服务帐户应该正在工作,并且存在一些 A/D 计时问题或可能存在错误。当 IT 被问及 A/D 配置时,回答通常是“没有任何改变”。
- 重新启动引擎和代理服务可能会导致作业开始失败。
- 机器重新启动可以解决问题。
- 随后立即重新启动引擎和代理不再导致作业失败。
不是解决方案,但您可以通过将作业所有者设为 SQL 帐户来解决此问题。
每次启动作业时,SQL Server 都会验证作业所有者的身份并检查它是否具有执行作业的权限。如果所有者是 Windows 帐户,则引擎需要查询 Active Directory。如果由于任何原因失败,作业将不会运行。这可能是因为 AD 服务器繁忙、关闭或与网络断开,或者 SQL Server 服务帐户没有权限。
由于它在重新启动后立即工作,这让我认为它可能与缓存的凭据有关。Windows 将保存它查找的凭据以供以后使用。该缓存在重新启动时被清除。也许某些东西正在破坏缓存。
我遇到了一个实例从域 A 移动到域 B 的问题,并且到处检查权限并在所有地方授予完全控制权。更改了服务帐户,工作所有权,创建了新工作......没有任何效果。发现服务用户 B\sqlservice 和 A\sqlservice 与 SQL Server 上的登录名存在相同的名称删除 A\sqlservice 登录名后,一切都开始正常工作。这意味着一些窗口指针是错误的