本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文


正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行。在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知。如果有什么不正确的,你必须查看数据库邮件日志。在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志。你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已。一旦你理解错误日志,在处理SQL Server代理问题时将节省大量的时间。
SQL Server代理错误日志
SQL Server代理维护自己的ErrorLog(与数据库ErrorLog分开)。数据库ErrorLog位于XX\MSSQL\Log目录下面。数据库Errorlog默认命名为ERRORLOG(没有文件扩展名),数据库代理Errorlog默认命名为SQLAGENT.OUT。这篇文章我们将花费大部分的时间来理解数据库代理Errorlog,但是你同样需要理解数据库Errorlog。
回顾SQL Server代理错误日志
当你第一次浏览上面提到的\MSSQL\目录,然后试图查看Log目录,你可能会得到一个请求来提升你的特权以获得对应目录的权限。默认情况下,SQL Server和SQL Server代理服务帐户有读/写目录的权限,但你(使用用户帐户)是没有权限的。如果你是本地管理员,你可以给自己赋权,然后直接查看日志文件。一个权限的例子,如图5.1所示,显示默认存在的安全设置。不要删除服务帐户对这个目录的权限,否则SQL Server和/或SQL Server代理可能无法正常运行。

图5.1 SQL Server日志路径属性
一旦你在\MSSQL\LOG目录,你将看到SQL Server和SQL Server代理的日志文件。默认情况下,以前的日志文件(每次启动服务时创建)也保存在目录。SQLAGENT.OUT文件是当前的SQL Server代理日志文件,因此这个文件就是你想要打开的。默认情况下,当你试图打开这个文件时,会要求选择你想用来打开此文件的程序。通常记事本足够查看此类文件,但如果你有一个更好的,选择你喜欢的文本文件查看器与文件关联(选择记事本,如图5.2所示)。

图5.2 关联记录本打开.OUT文件
一旦选择好,SQLAGENT.OUT文件将打开,如图5.3所示

图5.3 SQL Server代理错误日志
你可以很容易地看到,应该有一个更好的方式来查看Errorlog。SSMS有一个日志文件查看器,我们在第四篇的数据库邮件中简单的使用过。展开SQL Server代理文件夹,然后错误日志文件夹,你会看到一个列表中包含当前SQL Server代理错误日志和最近几个错误日志。双击当前日志(或右键单击并选择“查看代理日志”),你会看到SQL Server日志文件查看器,当前的SQL Server代理错误日志(如图5.4所示)。

图5.4 日志文件查看器查看当前代理错误日志
这和图5.3中用记事本的是同一个日志文件,但有更多的组织和管理。第一件你注意到的事情就是事件分为信息、警告、错误类别。使用筛选器按钮(图5.5),你可以添加自己的标准来限制在SQL Server代理错误日志视图(你可能注意到日志文件查看器中可以查看任何SQL Server中的错误日志)。

图5.5 日志文件查看器筛选设置
日志文件内容
信息性消息,通常在SQL Server代理日志的开头。让我们简单查看下信息的含义。
[393] 正在等待SQL Server恢复数据库…
这意味着SQL Server代理服务启动,但尚未能够配置和运行因为msdb数据库尚不可用。对于SQL Server代理主要的配置设置存储在msdb库。少量的设置保存在Windows的系统注册表。msdb恢复前SQL server代理无法使用。消息前面的数字是SQL Server代理内部的错误编号。本人从没见过公开文档记录SQL Agent的错误编号。
[100] Microsoft SQLServerAgent 版本 10.50.1600.1 (内部版本号 x86 unicode 零售): 进程 ID 5280
这是一条非常有用的信息。SQL Server代理版本号(即版本、服务包、和修补程序)。在此例中,它是SQL Server 2008 R2,采用sp1更新包。你可以在SQLServerCentral找到版本号。
接下来的事情是,这是一个SQL Server x86版本(即32位),这是一个标准的零售版本的产品。最后,对SQL Server代理服务的Windows进程ID标识。如果你使用Windows故障排除工具(即使是简单的任务管理器),你会看到一个进程ID,这将帮助你把SQL Server代理服务关联到Windows信息。在图5.6中

图5.6 任务管理器中的进程
[101] SQL Server USER-67NP5R8LGK\SQL08R2 版本 10.50.1600 (连接限制: 0)
这一消息标识SQL服务器的名称(USER-67NP5R8LGK\SQL08R2),以及SQL Server的版本号。注意“0连接限制”--即是没有特定的配置,因此允许无限的连接(直到耗尽内存)。
[102] SQL Server ODBC 驱动程序版本 10.50.1600
[103] 驱动程序使用的 NetLib 是 DBNETLIB.DLL;本地主机服务器是 USER-67NP5R8LGK\SQL08R2
这两则消息表明使用ODBC的版本号(SQL Server代理使用ODBC连接回SQL服务器本地副本,事实上,它是用当地的DBNETLIB.DLL为连接。
[310] 检测到 4 个处理器和 3018 MB RAM
[339] 本地计算机是 USER-67NP5R8LGK,运行的是 Windows NT 6.1 (7601) Service Pack 1
接下来的两行显示的SQL服务器CPU和内存配置,以及Windows版本。
[432] 子系统缓存中有 12 个子系统
这是第二篇(SQL Server代理作业步骤和子系统)讨论过的SQL Server代理子系统。作业下有各种类型可以运行子系统(如CmdExec、ActiveX 脚本)以及一些支持复制,分析服务的子系统,你可以在msdb.dbo.syssubsystems表中查看子系统清单。
[364] 尚未启动 Messenger 服务 - 将不发送 NetSend 通知
虽然这个归类为一个错误,在大部分系统上你可以安全地忽略。Net send通知,已经从SQL Server的几个版本中取消,并且相关的Windows服务默认不是开启的。如果你还在使用Net send消息,看到了这样的错误,你需要更改Windows Messenger服务为自动启动。
[129] SQLAgent$SQL08R2 在 Windows NT 服务控制下启动
这个消息表明,SQL Server代理作为服务启动,而不是在命令提示符窗口。
[260] 无法启动邮件会话(原因: 没有定义邮件配置文件)
[355] 邮件系统初始化失败;请检查配置设置
这些消息表明在数据库邮件配置中出错。回顾第四篇数据库邮件,查看是否有类似的问题。
[396] 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
这条警告表明一个SQL Server代理设置没有配置,可能阻止某些作业运行。你可以设置作业在CPU“空闲”时运行(在第一篇提到过)。然而,在这个系统中空闲的定义还没有被设置。在SSMS配置此选项,右击SQL Server代理,选择属性,然后单击高级选项卡。配置空闲CPU条件如图5.7所示

图5.7 设置空闲CPU条件
你可以想象,在你的SQL Server代理错误日志还会有许多其他的错误,你应该定期检查日志。请牢记,代理日志不是用来排查作业故障的,你需要查看每个失败作业步骤的历史记录。我们在后续章节会做更多的故障排除。
配置SQL Server代理错误日志
您可以在SSMS中配置一些SQL Server代理错误日志的属性,另一些属性需要使用注册表编辑器(这是不支持的,所以不建议在生产系统)。
右击SSMS中SQL Server代理->错误日志,你会看到一组选项。首先是“配置”,选择该选项,你会看到类似图5.8。你可以更改SQL Server代理错误日志文件的存放位置(不推荐),同样可以更改代理日志级别。这些设置不能凭直观分辨–如果你勾选“错误”,你会看到错误和信息性消息。如果你勾选“警告”,你会看到警告和信息性消息。如果你只勾选信息,在错误日志中你看不到任何错误或警告消息。
对话框中另一选项是,写入OEM错误日志,意味着写一个非Unicode的错误日志文件。理论上你可以通过它节省空间,但也不推荐。

图5.8 配置SQL Server代理错误日志
退出图5.8,右击错误日志,另一个选项是“回收”。此选项会关闭现有的SQL Server代理错误日志并开始一个新的日志文件,重命名当前SQLAGENT.OUT文件为SQLAGENT.1(所有旧的文件后缀数字递增,如SQLAGENT.1变成SQLAGENT.2)。如果你要将当前的日志文件发送给SQL Server产品支持,这样操作将非常有用。
SQL Server代理一些其他配置需在注册表中设置(事实上,上面所做操作的设置都会更改注册表中对应的键值)。记住不建议直接修改注册表,所以更改这些设置要你自己承担风险。然而,如果你想查看可用的设置(一些SQL Server代理设置只能在注册表中修改),你可以在注册表中SQL Server实例下查看可用的注册表键设置。例如,在我的机器上,注册表键位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\SQLServerAgent,如图5.9所示

图5.9 SQL Server代理注册表项
如果你的SQL Server代理配置真的有问题时,可能需要描述(或导出)这些设置给产品支持。
下一篇
SQL Server代理错误日志包含很多有用信息(SQL Server代理,SQL Server和Windows服务器)。你可以使用错误日志解决SQL Server代理服务中的错误,并了解日志中常见的信息。本文还介绍了如何解决SQL Server代理中一些最常见的错误。
有了前面的SQL Server代理基础知识,第六篇将深入挖掘SQL Server代理作业步骤和工作流。

第五篇 SQL Server代理理解代理错误日志的更多相关文章

  1. 2. SQL Server数据库状态监控 - 错误日志

    原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯 ...

  2. 【译】第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  3. 第五篇 SQL Server安全架构和安全

    本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...

  4. 【译】第五篇 SQL Server安全架构和安全

    本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...

  5. 第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

  6. 第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  7. 第八篇 SQL Server代理使用外部程序

    本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这一系列的上一篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Ser ...

  8. 第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  9. 【译】第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

随机推荐

  1. require(__DIR__ . "/../sss.php"

    魔法函数  __DIR__ 是 php5.2以后新加的函数,返回当前文件所在的目录,返回的目录不带 \,所以上边的意思是:Require当前目录的父目录中的 sss.php

  2. 让apache不区分图片和文件后缀大小写

    加载mod_speling模块: LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so 开启模块: CheckSpelli ...

  3. JDBC链接数据库版本三,使用C3P0,使用jar文件两个

    JdbcUtil类: package com.xiaohui.jdbc.util; import java.sql.Connection; import java.sql.PreparedStatem ...

  4. Javascript 笔记与总结(2-4)Javascript 内置对象

    ① String 字符串对象 fromCharCode() 静态方法, 用作为参数而传递的字符代码创建一个新的字符串. length 字符串的长度. charAt() 抽取字符串中指定位置的字符. c ...

  5. Javascript 笔记与总结(2-1)Javascript 与 DOM

    浏览器有渲染 html 的功能,把 html 源码在内存里形成一个 DOM 对象,就是文档对象. 浏览器内部有一个 js 的解释器 / 执行器 / 引擎,如 Chrome 的 V8 引擎. 在 htm ...

  6. cURL 学习笔记与总结(2)网页爬虫、天气预报

    例1.一个简单的 curl 获取百度 html 的爬虫程序(crawler): spider.php <?php /* 获取百度html的简单网页爬虫 */ $curl = curl_init( ...

  7. unity中Debug输出控制

    1 需求: (1)选择在界面.console中输出,并且能够设置保存到文档 (2)控制debug是否输出,可以在debug模式下输出,release模式下不输出 2 参考: 谢谢雨松同学的博客:htt ...

  8. 鸡肋的Drools

    在看过Drools例子之后,认为其太鸡肋. 完全可以用bshell脚本来代替,或者用java自带的脚本(java5以上才支持,不过不是太好用)代替. 规则文件还要学其新标签,与其配套的接口写那么多,还 ...

  9. docker sonaqube

    postgresql:   image: orchardup/postgresql:latest   environment:   - POSTGRESQL_USER=sonar   - POSTGR ...

  10. Lambda中的一些方法的总结

    public List<UserInfoBaseModel> GetNameByIDList(List<int> UserID) { var UserList = LoadRe ...