第五篇 SQL Server代理理解代理错误日志

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

时间: 2024-07-29 18:35:11

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

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

无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因.Windows Event Log和 SQL Server Error Log就是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于 Oracle中的alert 文件. 一. 错误日志简介 1. Windows事件日志与SQL Server 错误日志 Windows事件日志中,应用程序里的SQL Server和

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

本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学习如何给主体访问一组对象,通过给架构分配权限而不是单个表.代码模块和其他对象.你还会了解用户架构分离的好处,以及如何提高对象安全性,如何为用户.组使用默认架构来简化对象访问管理和安全性.Schemas with Roles and PermissionsThe relationship of sch

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

本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这系列的前几篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序.你最好的选择是使用PowerShell的子系统运行PowerShell脚本.PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题.在这一篇,你会深入到SQL Server代理安全.安全是个令人困惑的话题,它值得一些明确的考虑.这系列有两个不同方面

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

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

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

本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这系列的前几篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Server代理作业上,作业活动监视器是一个很好的工具.第八篇,你会看到SQL Server代理的另一个功能——the ability to shell out to the operating system and run programs outside of the SQL Server enviro

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

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

第七篇 SQL Server代理作业活动监视器

本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这系列的前几篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作业活动监视器.作业活动监视器是系统管理工具来运行工作,查看作业历史记录,并启用/禁用作业.本文同样会回顾一些作业活动监视器调用的存储过程,你可以直接调用过程做你自己的自定义任务监控.SQL Server代理作业活动监视器SQL Server代理作业活动监视器的主要机制是监视作业运行,以及查看代理已运行

在windows 2008 R2中SQl Server 2008中代理启动失败的一个原因总结

启动SQL代理的时候报错如下: 关调用实时(JIT)调试而不是此对话框的详细信息,请参见此消息的结尾. ************** 异常文本 **************System.NullReferenceException: 未将对象引用设置到对象的实例. Server stack trace: 在 Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ObjectExplorer.FindObjectExplore

SQL Server内存理解的误区

SQL Server内存理解 内存的读写速度要远远大于磁盘,对于数据库而言,会充分利用内存的这种优势,将数据尽可能多地从磁盘缓存到内存中,从而使数据库可以直接从内存中读写数据,减少对机械磁盘的IO请求,提高数据读写的效率. 内存对数据库而言是如此的重要,因此只要在涉及数据库优化的地方,我们都可以看到内存的身影.我们通常会想尽各种办法来优化数据库内存的使用,比如开启AWE.设置最大内存.锁定内存页等,但在很多时候,我们实际上都不知道某个配置是否一定能够解决当前的问题,或者我们误以为会解决当前的问题