服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败

案例环境:

操作系统   : Microsoft Windows Server 2003 Standard Edtion SP2

数据库版本 : SQL Server 2005 Standard Edition SP4

案例描述:

服务器重启过后,MSSQLSERVER服务自动重启了,但是SQLSERVERAGENT服务启动失败(当然SQL Agent服务的启动类型为自动启动(Automatic)),在这台服务器第二次遇到这种情况,第一次遇到时没太注意,以为只是特殊案例,直到在这台服务器第二次遇到这种情况,才感觉有点奇怪。

检查 SQL Server Agent‘s log日志发现如下错误信息:[241] Startup error: Unable to initialize error reporting system (reason: The EventLog service has not been started)

检查发现Event Log服务也正常启动了。在这篇文章SQL Server Agent failing to start because "The EventLog service has not been started"(环境为SQL Server 2000)解释这个是SQL SERVER Agent代码里面的一个bug来的:作为SQL Server代理的启动任务的一部分,它初始化一个记录组件,将错误、 警告或信息性消息报告给代理的日志文件(SQLAGENT.OUT),如果它在任何非Win9x的平台上运行,事件日志(通过事件日志服务的Windows API)作为初始化过程的一部分,它必须确保该事件日志服务已启动,因为如果不是这样,那么该代理无法正常运作,报上述错误后退出。..........

博客具体内容如下所示

It happened to be a bug in SQL Server Agent‘s code, and here‘s a brief explanation of what it is:

As part of SQL Server Agent‘s startup tasks, it initializes a Logging component, which will report errors, warnings, or informational messages to agent‘s log file (SQLAGENT.OUT) and, if it‘s running on any non Win9x platforms, to the Event Log (by using the EventLog service Windows APIs). So, as part of that initialization process, it has to make sure that the EventLog service is started, because if it isn‘t, then the agent cannot function properly and so it exits with the error described above.

The function which checks whether the EventLog service is running or not, calls EnumServicesStatus twice with SERVICE_ACTIVE as the value for its dwServiceState parameter (so it will only enumerate services that are in the following states: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING, or SERVICE_PAUSED).

The first call to that API passes NULL to the lpServices parameter and zero for cbBufSize, that to only determine the size of the buffer required to hold the list of services in such states at the moment of the call. Later, it allocates as many bytes as the pcbBytesNeeded parameter reflected that were needed, and finally it calls EnumServicesStatus again. If at the time of the second call to EnumServicesStatus there are more services in any of the states mentioned earlier, than during the first call to EnumServicesStatus, then it returns FALSE and GetLastError returns ERROR_MORE_DATA.

The function implemented in SQL Server Agent to check whether EventLog is running or not, doesn‘t take into account such "exceptional" condition and simply returns a failure as if the EventLog service wouldn‘t be running.

不过由于作者描述的情况发生在SQL SERVER 2000环境下,而我对比了手头其他一样环境的SQL SERVER 2005的服务器,都没有这个问题,只有这台服务器出现这个问题,所以弄不清到底是SQL Server Agent的bug还是操作系统环境问题所致。不过猜测跟上面博客里面所叙说的那样跟EventLog服务有一定关系。

解决方法

没有尝试使用SQL Server Agent failing to start because "The EventLog service has not been started" 博客里面介绍的方法,我在SQL Server Agent服务的恢复(Recovery)选项里面,设置当服务启动失败时,采取“重新启动服务”的措施,如下所示,经过两次测试,发现这个方案也可以完满解决这个问题。

参考资料:

http://blogs.msdn.com/b/ialonso/archive/2007/12/13/sql-server-agent-failing-to-start-because-the-eventlog-service-has-not-been-started.aspx

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/575904b4-72c5-4fbf-88fb-5c943f75a6e5/sql-server-agent-fails-to-start

时间: 2024-11-10 11:21:15

服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败的相关文章

SQL Server下实现利用SQL Server Agent Job对索引重建实现Balance Load

昨天工作中遇到这样一个场景,有个项目需要把某台服务器下所有的表和索引都启用数据压缩(data_compression=page),已经启用了的表和索引就不需要再压缩一次了.统计一下后发现要运行的REBUILD INDEX代码多达上万条,而整个服务器上的所有需要压缩的数据库对象大小加起来估计接近1TB.这种情况下如果把所有工作都交给一条脚本来完成,估计整个周末都跑不完.那么我们的想法就是用多个SQL Server Agent Job来做完成这个任务,分配单位是表(也就是说把同一张表的所有索引重建任

如何在linux服务器部署Rstudio server,配置ODBC远程访问win 服务器上的SQL server

如何在linux服务器部署Rstudio server,配置ODBC后通过RODBC包远程访问SQL server 背景介绍:之前写过一篇文章,提到近期要部署Rstudio server(搭建数据分析团队的分析环境),花了一个星期,搭好了.还YY过给这个亲生的儿子起个装逼的名字呢,莫扎特,巴赫什么的,并YY出以下场景{Jenny ,你把模型扔到莫扎特上跑一版最新结果出来...啊哈是不是特有逼格..哦哈哈...}我是部署的Rstudio server,这个是免费的,但是Rstudio sererv

设定SQL Server Agent透过Databse Mail来传送通知或警示的邮件

完成Database设定后,SQL Server目前已经处在可以传送邮件的状态,接下来就是要让SQL Server Agent透过Database Mail来传送通知或警示的邮件. 1.首先在对象总管下,SQL Server Agent上按鼠标右键然后按一下属性. ? 2.在属性窗口的警示系统页面勾选启用邮件配置文件,在邮件系统挑选Database Mail并指定要使用的 ? 邮件配置文件,最后按下确定. ? 3.设定完成后,必须重新启动SQL Server Agent,如果没有启动无法生效.

rsyslog 服务器重启后 发现不能接受到外部日志 只能接受本地日志 关闭防火墙即可

rsyslog 服务器重启后 发现不能接受到外部日志 只能接受本地日志  关闭防火墙即可 1 关闭防火墙: # systemctl stop firewalld 2 将SELINUX设置为disabled # setenforce 0 # sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

PHPWAMP自启异常,服务器重启后Apache等服务不会自动重启的原因分析

在使用"PHPWAMP自动任务"时,不少学生遇到如下问题: "phpwamp绿色集成环境重启动电脑(服务器)后,不会自动启动网站服务" (如果是其他环境或是自己搭建时遇到此问题,也是可以用此法解决) 此文章内容符合: 为什么网站服务由手动变成自动后还是无法重启? 为什么我把服务设置成自动后,开机又变回手动了? 为什么服务器(电脑)重启后服务不会自动跟着重启? windows服务器重启后网站服务不会自动重启的原因分析. 为什么服务设置成自动后,重启动服务器(电脑)服务

How to automatic process SSAS cube using SQL Server agent job

How to automatic process SSAS cube using SQL Server agent job After connecting to the Analysis Server, right click on the Cube and select Process When the process window opens, click the dropdown by Script and select Script Action to Clipboard. Then

服务器重启后Oracle监听服务没有自动启动的解决方案

最近一直在被这样一个问题烦恼,就是服务器断电重启后,Oracle监听服务没有正常自动启动(监听服务已经设置为自启动). 具体是这样的,监听服务设置为开机自启动,Oracle数据库服务设置为开机延时启动,按道理这个应该符合“先启动监听,后启动数据库服务”这个条件,但是每次断电重启后都是数据库服务正常启动了,监听服务没能启动. 查阅了一下,有这么两个说法,感觉还是挺有道理: 1.一般设置了开机自启动的服务要手动,基本是注册表不一致造成: 2.登录账号跟你安装Oracle的账号不一样,没权限启动. 针

SMB服务器重启后自动挂载失效

上周五公司停电,这周回来上班后发现公司SMB服务器无法访问,SSH到服务器,df一下,发现挂载记录丢失,如下图,正常情况下应该有一条/dev/sdb1挂载在mnt的记录. 既然挂载丢失,手动挂载一下下,mount /dev/sdb1 /mnt可恢复访问,但服务器重启后现象依旧,难道自动挂载记录也丢失了,我们来看一下fstab: 发现挂载记录还在,那运行一下mount -a吧,看挂载是否有问题: 果不其然,报错了,看来问题还是出在挂载这一块,仔细检查了下fstab文件,终于找到问题所在了,原来是磁

SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了

一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder,错误信息如下所示: PLATFORM VERSION INFO     Windows             : 6.1.7601.65536 (Win32NT)     Common Language Runtime     : 4.0.30319.18408     System.Deploy