sql server代理是所有实时数据库的核心。代理有很多不明显的用法,因此系统的知识,对于开发人员还是dba都是有用的。这系列文章会通俗介绍它的很多用法。
如我们在这个系列的前几篇文章所见,sql server代理是由一系列的作业步骤组成,每个步骤是不同类型将要进行的工作。如果你在第4篇所见,sql server代理也提供使用数据库邮件发送提醒的能力。如果出现问题,不管怎样, 你必须去查看下数据库邮件错误日志。在这篇文章里,你会学到如何理解和查看sql server错误日志的所有相关知识。你会查看最常见的错误日志,还有理解如何知道当一条信息需要你采取的行动,什么是对你最直接的信息。一旦你理解了错误日志,当你进行sql server代理相关故障排除时,你会节约大量的时间。
sql server代理错误日志
sql server代理维护它自己的错误日志,和sql server错误日志分开。sql server错误日志位置sql server所在目录下的\mssql\log目录(c:\program files\microsoft sql server\mssql10_50.mssqlserver\mssql\log,这篇文章使用sql server 2008r2作为默认实例)。sql server错误日志默认名为errorlog(没有文件扩展名),sql server代理错误日志默认名为sqlagentout。在这篇文章里,我们的大部分时间会花在sql代理错误日志,不管怎样,你也需要看下sql server错误日志。
查看sql server代理错误日志
当你首次浏览到\mssql目录,并尝试查看日志目录,很可能你需要请求提升你的权限来获得访问这个目录的权限。默认情况下,sql server和sql server代理的服务账号有这个目录的读写权限,但你(使用用户账号)不能访问。如果你是本地管理员,你可以授权自己访问后,直接查看日志文件。如图1所示,默认的权限和安全设置是这样的。不要从目录里移除你服务账号的权限,否则sql server和sql server代理会不能正常工作。
插图1:sql server的log目录权限
一旦你在\mssql\log目录里,对于sql server和sql server代理,你都会看到很多日志文件,原先的日志文件(只要正常启动服务,每次都会创建)也在目录里。sqlagent.out文件是sql server代理的当前日志文件,因此这是你要打开的文件。默认情况下,当你尝试打开这个文件时,你需要选择打开这个后缀为.out文件的默认程序。记事本就可以,当你有另一个喜好,你可以选择这个扩展文件名的文本查看器(如图2所示,选择记事本)。
插图2:.out文件用记事本打开。
一旦选择后,sqlagent.out文件会打开,如插图3所示。
插图3:sql server代理错误日志(sqlagent.out)
你很容易发现,应该有更好的方式查看错误日志,没错!ssms有日志文件查看器,这在第4篇数据库邮件里就已经简单介绍了。切换到错误日志,展开sql server代理文件夹,错误日志文件夹,你会看到当前sql server代理的日志还有最近的日志。双击【当前】(或右击选择【查看代理日志】)你会看到sql server日志查看器,在查看器里当前sql server代理的错误日志已被勾选(如插图4所示)。
插图4:当前sql server代理日志文件的日志文件查看器
这和在插图3里显示的日志文件一样,但看起来更直观,更好管理。首先你会注意到的是现在事件分为:信息,警告和错误。使用筛选按钮(如插图5),你可以增加自己的筛选条件来限制sql server代理错误日志的项目(或sql server的任何错误日志,你已经看到,在日志文件查看器里,你可以看到所有的日志)
插图5:日志文件查看器的筛选设置
日志文件内容
在sql server代理日志的开始就有信息消息。我们每步都过一遍,简单介绍下消息的意思。
[393] 正在等待 sql server 恢复数据库...
sql server代理服务已经启动,但还不能配置和运行它,因为msdb数据库还不可用。sql server代理的大部分配置和设置都保存在msdb。部分配置细信息保存在系统注册表里。sql server不能启动直到msdb数据库恢复。消息前的数字(393)是sql sever代理的内部信息号,本人从没见过公开文档记录sql agent的错误编号。
[100] microsoft sqlserveragent 版本 10.50.1600.1 (内部版本号 x86 unicode 零售): 进程 id 3412
这是一条非常有用的信息。sql server代理版本号(即版本、服务包、和修补程序)。在此例中,它是sql server 2008 r2,采用sp1更新包。你可以在sqlservercentral找到版本号。
接下来的事情是,这是一个sql server x86版本(即32位),这是一个标准的零售版本的产品。最后,对sql server代理服务的windows进程id标识。如果你使用windows故障排除工具(即使是简单的任务管理器),你会看到一个进程id,这将帮助 你把sql server代理服务关联到windows信息。
插图6:有pid列显示的任务管理器
[101] sql server pc201510181429 版本 10.50.1600 (连接限制: 0)
这一消息标识sql服务器的名称(pc201510181429),以及sql server的版本号。注意“0连接限制”--即是没有特定的配置,因此允许无限的连接(直到耗尽内存)。
[102] sql server odbc 驱动程序版本 10.50.1600
[103] 驱动程序使用的 netlib 是 dbnetlib.dll;本地主机服务器是
这两则消息表明使用odbc的版本号(sql server代理使用odbc连接回sql服务器本地副本,事实上,它是用当地的dbnetlib.dll为连接。
[310] 检测到 2 个处理器和 3327 mb ram
[339] 本地计算机是 pc201510181429,运行的是 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] sqlserveragent 在 windows nt 服务控制下启动
这个消息表明,sql server代理作为服务启动,而不是在命令提示符窗口。
[260] 无法启动邮件会话(原因: microsoft.sqlserver.management.sqlimail.server.common.baseexception: 无法从数据库中读取邮件配置信息。...... [355] 邮件系统初始化失败;请检查配置设置
这些消息表明在数据库邮件配置中出错。回顾第四篇数据库邮件,查看是否有类似的问题。
[396] 尚未定义空闲 cpu 条件 - onidle 作业计划将不起任何作用
这条警告表明一个sql server代理设置没有配置,可能阻止某些作业运行。你可以设置作业在cpu“空闲”时运行(在第一篇提到过)。然而,在这个系统中空闲的定义还没有被 设置。在ssms配置此选项,右击sql server代理,选择属性,然后单击高级选项卡。配置空闲cpu条件如插图7所示
插图7:配置空闲cpu条件
你可以想象,在你的sql server代理错误日志还会有许多其他的错误,你应该定期检查日志。请牢记,代理日志不是用来排查作业故障的,你需要查看每个失败作业步骤的历史记录。我们在后续章节会做更多的故障排除。
配置sql server代理错误日志
您可以在ssms中配置一些sql server代理错误日志的属性,另一些属性需要使用注册表编辑器(这是不支持的,所以不建议在生产系统)。
右 击ssms中sql server代理->错误日志,你会看到一组选项。首先是“配置”,选择该选项,你会看到类似插图8。你可以更改sql server代理错误日志文件的存放位置(不推荐),同样可以更改代理日志级别。这些设置不能凭直观分辨–如果你勾选“错误”,你会看到错误和信息性消 息。如果你勾选“警告”,你会看到警告和信息性消息。如果你只勾选信息,在错误日志中你看不到任何错误或警告消息。
对话框中另一选项是,写入oem错误日志,意味着写一个非unicode的错误日志文件。理论上你可以通过它节省空间,但也不推荐。
插图8——配置sql server代理
退出插图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,如插图9所示
插图9:sql server代理的注册表项
如果你的sql server代理配置真的有问题时,可能需要描述(或导出)这些设置给产品支持。
下篇预告
sql server代理错误日志包含很多有用信息(sql server代理,sql server和windows服务器)。你可以使用错误日志解决sql server代理服务中的错误,并了解日志中常见的信息。本文还介绍了如何解决sql server代理中一些最常见的错误。
有了前面的sql server代理基础知识,第六篇将深入挖掘sql server代理作业步骤和工作流。
原文:http://www.sqlservercentral.com/articles/stairway+series/72456/
原文链接:https://blog.csdn.net/weixin_33806300/article/details/85803412