【译】第五篇 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,这将帮助你把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代理理解代理错误日志的更多相关文章
- 2. SQL Server数据库状态监控 - 错误日志
原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯 ...
- 第五篇 SQL Server代理理解代理错误日志
本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...
- 【译】第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
- 【译】第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- 【译】第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
- 【译】第一篇 SQL Server代理概述
本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...
- 【译】第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- 第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- 【译】第九篇 SQL Server安全透明数据加密
本篇文章是SQL Server安全系列的第九篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...
随机推荐
- (十一)Jmeter另一种调试工具 HTTP Mirror Server
之前我介绍过Jmeter的一种调试工具Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器.既然这样,那么HTTP Mirror Server又是做 ...
- 【Linux 命令】- tar 命令
语法 tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Sc ...
- TP中系统跳转方法
系统跳转方法 在ThinkPHP中系统有2个跳转方法,分别是成功跳转和失败跳转: 成功: $this -> success(跳转提示,跳转地址,等待时间); 失败: $this -> er ...
- mysql(六)索引的数据结构
先做抽象定义如下: 定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同的数据记录,key是互不相同的:data为数据记录除key外的数据. B-tree的特点: d为大于 ...
- 第76天:jQuery中的宽高
Window对象和document对象的区别 1.window对象表示浏览器中打开的窗口 2.window对象可以省略,比如alert()也可以写成window.alert() Document对象是 ...
- Using the command line to manage files on HDFS--转载
原文地址:http://zh.hortonworks.com/hadoop-tutorial/using-commandline-manage-files-hdfs/ In this tutorial ...
- C++ 指针[转+原创]
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区. 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉 ...
- ZJOI 2017 day2 4.27
明天就要比赛啦,今天早点休息. 既然是随便扯,首先就是yyzx的wifi(宁波的这种wifi系统我第一次见,要打开任意一个浏览器,才能跳出界面,网还是挺快的) 上午是学车的翁伊嘉&猪猪侠讲课, ...
- Codeforces 582C. Superior Periodic Subarrays(数学+计数)
首先可以把 i mod n=j mod n的看成是同一类,i mod s=j mod s的也看成是同一类,也就是i mod gcd(s,n)的是同一类,很好理解,但是不会数学证明...大概可以想成数轴 ...
- 框架----Django框架知识点整理
一.cbv cbv(class-base-view) 基于类的视图 fbv(func-base-view) 基于函数的视图 a.基本演示 urlpatterns = [ url(r'^login.ht ...