• 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;
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    Byobu(tmux)的使用与定制
    Centos 编译安装Python 2.6
    how to set up the remote accout who to connection and management mysql server
    CentOS安装python2.6以及MySQLpython
    byobu "屏风" 简介 ,以及在CentOS下安装及日常使用
    /bin/rm: cannot remove `libtoolT': No such file or directory
    MySQLpython EnvironmentError: mysql_config not found | InfoEntropy
    几个逼真的页面 watch out
    Emerge详细解释
    微软Internet TV初体验
  • 原文地址:https://www.cnblogs.com/kerrycode/p/14923410.html
Copyright © 2020-2023  润新知