我正在使用脚本创建SQL Server复制。当我尝试执行时,出现以下错误:
作业失败。无法确定作业L3BPT2M-Atlas-14的所有者(STAR\moorer7)是否具有服务器访问权限(原因: 无法获取关于Windows NT组/用户“STAR\moorer7”的信息,错误代码为0x5。[SQLSTATE 42000](错误15404))。
这是由定义复制的脚本创建的作业。
我该如何调试?
我正在使用脚本创建SQL Server复制。当我尝试执行时,出现以下错误:
作业失败。无法确定作业L3BPT2M-Atlas-14的所有者(STAR\moorer7)是否具有服务器访问权限(原因: 无法获取关于Windows NT组/用户“STAR\moorer7”的信息,错误代码为0x5。[SQLSTATE 42000](错误15404))。
这是由定义复制的脚本创建的作业。
我该如何调试?
Active Directory 拒绝访问您的 SQL Agent。代理应该在一个被 STAR 域控制器认可的帐户下运行。
对我来说,这些作业在 DOMAIN\Administrator 用户下运行,但出现错误信息 "The job failed. Unable to determine if the owner (DOMAIN\administrator) of job Agent history clean up: distribution has server access (reason: Could not obtain information about Windows NT group/user 'DOMAIN\administrator', error code 0x5. [SQLSTATE 42000] (Error 15404)).
为了解决这个问题,我将每个失败的作业所有者更改为 sa
。之后完美解决。这些作业涉及复制清理,但我不确定它们是手动添加还是作为复制设置的一部分添加-因为我没有参与其中,所以我不确定。
我们在虚拟机的测试环境中遇到了类似的错误。如果由于从模板进行VM克隆而导致机器名称更改,您可能会遇到此错误。
如果计算机名称从OLD更改为NEW。
一个作业使用这个存储过程:
msdb.dbo.sp_sqlagent_has_server_access @login_name = 'OLD\Administrator'
使用这个:
EXECUTE master.dbo.xp_logininfo 'OLD\Administrator'
select text from sys.messages where message_id = 15404;
Could not obtain information about Windows NT group/user '%ls', error code %#lx.
IS_ROLEMEMBER()
函数时遇到了此错误。该函数在SQL Server 2012之前是无效的。因此,我最终使用了其他方法。select 1
from sys.database_principals u
inner join sys.database_role_members ur
on u.principal_id = ur.member_principal_id
inner join sys.database_principals r
on ur.role_principal_id = r.principal_id
where r.name = @role_name
and u.name = @username
虽然有点啰嗦,但这样做可以完成任务。
我刚刚解决了这个问题。在我的情况下,它是由于域控制器不可访问,因为两个 DNS 服务器都是 Google DNS 导致的。
我将以下检查项目添加到此问题的清单中:
我刚刚遇到了这个错误,结果发现我的AD管理员删除了整个公司中每个SQL Server实例使用的服务帐户。谢天谢地,AD有自己的回收站。
请尝试运行Active Directory用户和计算机实用程序(%SystemRoot%\ system32 \ dsa.msc),并检查您所依赖的帐户是否仍然存在。