SQL Server作业报“Unable to determine if the owner (xxxxxx) of job xxx has server access”「终于解决」

SQL Server作业报“Unable to determine if the owner (xxxxxx) of job xxx has server access”「终于解决」案例描述: 今天遇到一个很有意思的SQL Server作业报错告警,作业出错的详细信息如下: Date 2021/6/23 12:34:00<!–CRLF–>Log Job Histo

SQL Server作业报“Unable to determine if the owner (xxxxxx) of job xxx has server access”

案例描述:

 

今天遇到一个很有意思的SQL Server作业报错告警,作业出错的详细信息如下:

Date        2021/6/23 12:34:00
Log        Job History (YourSQLDba_BlockingSQL_Alert)
 
Step ID        
Server        xxxxx
Job Name        YourSQLDba_BlockingSQL_Alert
Step Name        
Duration        00:00:06
Sql Severity    0
Sql Message ID    0
Operator Emailed    
Operator Net sent    
Operator Paged    
Retries Attempted    0
 
Message
The job failed.  Unable to determine if the owner (xxxxx) of job YourSQLDba_BlockingSQL_Alert has server access (reason: Could not obtain information about Windows NT group/user "xxxxxxx", error code 0x251e. [SQLSTATE 42000] (Error 15404)).

 

案例分析:

 

       关于错误代码0x251E, 这个代表Bad DNS packet.(DNS_ERROR_BAD_PACKET)

 

 

其实这个案例是这样的:因为一个DC服务器宕机了,SQL Server作业(Job)的Owner是一个域账号(NT账号),在作业运行时会验证权限,由于DC服务器挂了,无法访问DC获取相关信息、验证权限时报错。如果这里的作业Owner为sa的话,就不会遇到这个错误。所以我一直推荐将作业的Owner设置sa,避免这样的麻烦。那么这台SQL Server数据库成了一个特例,因为我一直用域账号(NT账号)管理数据库,sa账号默认是禁用的。所以有时候创建作业的时候不可避免忘记了修改作业的Owner。

 

其实不光DC服务器宕机,当域账号被锁时也会有这样的错误。之前我在博客“Could not obtain information about Windows NT group/user “xxxxxxxx”, error code 0x5里面就介绍过这样的案例,如果作业的Owner是一个域账号的话,如果域账号被锁的话,那么作业也会报错。域账号被锁时,对应的错误代码为0x5,表示访问拒绝(ERROR_ACCESS_DENIED)。

 

 

解决方法比较简单,修改作业的owner为sa即可。可以使用下面脚本批量生成操作脚本。当然问题的根源还是域服务器DC宕机了。

 

--==================================================================================================================
--      ScriptName          :           change_jobs_owner.sql
--      Author              :           潇湘隐者    
--      CreateDate          :           2015-12-18
--      Description         :           将数据库作业的OWNER改为sa或某个账号
--      Note                :           Azure SQL不支持.
/******************************************************************************************************************
        Parameters          :                                   参数说明
********************************************************************************************************************
            @login_name     :           作业的Owner,例如sa
********************************************************************************************************************
   Modified Date    Modified User     Version                Modified Reason
********************************************************************************************************************
    2015-12-18           Kerry       V01.00.00          新建该脚本。
*******************************************************************************************************************/
--==================================================================================================================
 
DECLARE  @login_name   NVARCHAR(32);
 
SET @login_name="sa";
 
SELECT  "EXEC msdb.dbo.sp_update_job @job_name=N""" +j.name + """, @owner_login_name=N""" + RTRIM(LTRIM(@login_name)) + """;" AS CommadText
FROM msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.syscategories c ON j.category_id = c.category_id
INNER JOIN sys.syslogins l ON l.sid = j.owner_sid
WHERE l.name !="sa"
ORDER BY j.name;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6079.html

(0)
上一篇 2023-04-17
下一篇 2023-04-17

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注