检查SQL Server服务是否正在运行

时间:2016-01-21 03:26:09

标签: batch-file

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

@ECHO OFF
NET START MSSQL$SQLEXPRESS

2 个答案:

答案 0 :(得分:0)

像这样的东西。暂停是可选的。如果进入计划任务,请不要使用它!在这种情况下,您也不需要所有的echo语句。当然,您需要使用管理权限运行此命令才能启动该服务。我加了一张支票。

@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事件日志,看看是否可以确定服务停止的原因,因为显然有些问题。

答案 1 :(得分: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
}