2016-01-21 164 views
0

目前我们正面临一个影响系统稳定性的问题,我们的服务器有SQL server 2012,由于不明原因它的服务停止运行,需要有人每天手动重启它。我已经在批处理文件中创建了一个命令来自动重新启动SQL服务器,并且它工作正常,但是,我正在寻找更好的命令,可以检查SQL Server是否停止,只需重新启动它,如果运行,就忽略。我该怎么做那个命令?检查SQL服务器服务是否正在运行

@ECHO OFF 
NET START MSSQL$SQLEXPRESS 

回答

0

就像这样。暂停是可选的。如果这项工作在计划任务中,请不要使用它!在这种情况下,你不需要所有的回显语句。当然,您需要使用管理权限运行此服务来启动服务。我为此添加了一张支票。

@echo off 
set "Service=MSSQL$SQLEXPRESS" 
rem Make sure service exists 
sc query %Service% | (findstr "does not exist" && goto :Done) 

for /f "tokens=1,2,3,4" %%A in ('sc query %Service%') do (
    if /I %%A == STATE (
     if /i not %%D == RUNNING (
     echo(%Service% STATE is %%D. It should be RUNNING. 
     rem openfiles requires admin 
     openfiles >nul 2>&1 || (Color E0 & ECHO(You must run with Administrative priveleges to start the service. & goto :Done) 
     echo(Starting it now... 
     sc start %Service% 
     ) 
    ) 
    ) 
:Done 
pause 

可能是看通过Windows事件日志,看看你能不能确定为什么服务被停止,因为有明显错误的东西是个好主意。

+0

是的,需要添加一个检查。假设我想在任务调度程序中安排'@ECHO OFF NET START MSSQL $ SQLEXPRESS',那么受保者是否会让SQL服务继续运行? – Saif

+0

1.我不明白......如果你打算进行计划任务,那么你需要将其设置为使用管理权限运行,并且在此之后检查每次运行时都没有意义。 2.不,把它放在一个计划任务中只意味着它会一直运行,直到下一次停止......这可能是马上或第二天。最好弄清楚为什么它停止,而不是这个创可贴修复。 – RGuggisberg

+0

编辑我的答案,允许任何用户运行检查状态,但提出消息,这必须作为管理员运行,如果它不是,并且服务需要启动。 – RGuggisberg

0

您可以使用sc查询状态:

sc query MSSQL$SQLEXPRESS | findstr /I /C:STATE | findstr /I /C:RUNNING 
If ERRORLEVEL 1 sc start MSSQL$SQLEXPRESS 

但既然你有Server 2012中,PowerShell是另一种选择:

$service = Get-Service -Name MSSQL$SQLEXPRESS 

If ($service.Status -ine "running") { 
    $service | Start-Service 
} 
相关问题