【Windows】Win2008服务器SQL服务监控重启脚本

发布于:2025-04-09 ⋅ 阅读:(33) ⋅ 点赞:(0)

以下是一个用于监控并自动重启 SQL Server 服务的批处理脚本,适用于 Windows Server 2008 和 SQL Server 2012(默认实例):

@echo off
setlocal enabledelayedexpansion

:: 配置参数
set SERVICE_NAME=MSSQLSERVER
set LOG_FILE=C:\SQL_ServiceMonitor.log

:: 检查服务状态
sc query %SERVICE_NAME% | find "STATE" > nul
if %errorlevel% equ 0 (
    for /f "tokens=3 delims=: " %%A in ('sc query %SERVICE_NAME% ^| find "STATE"') do set "STATUS=%%A"
) else (
    echo [%date% %time%] 错误:服务 %SERVICE_NAME% 不存在 >> %LOG_FILE%
    exit /b 1
)

:: 记录状态
echo [%date% %time%] 检测服务 %SERVICE_NAME% 状态码: !STATUS! >> %LOG_FILE%

:: 判断是否需要重启
if not !STATUS! equ 4 (
    echo [%date% %time%] 服务未运行,尝试重启... >> %LOG_FILE%
    
    net stop %SERVICE_NAME% > nul 2>&1
    net start %SERVICE_NAME% > nul 2>&1
    
    :: 验证重启结果
    sc query %SERVICE_NAME% | find "STATE" | find "RUNNING" > nul
    if %errorlevel% equ 0 (
        echo [%date% %time%] 服务重启成功 >> %LOG_FILE%
    ) else (
        echo [%date% %time%] 错误:服务重启失败 >> %LOG_FILE%
    )
)

endlocal

使用说明:

  1. 保存脚本:将代码保存为 SQLServiceMonitor.bat,建议存放在服务器固定路径(如 C:\Scripts\)。

  2. 修改配置(按需):

    • SERVICE_NAME:若使用命名实例(如实例名为 SQL2012),改为 MSSQL$SQL2012
    • LOG_FILE:自定义日志文件路径。
  3. 计划任务配置

    • 打开“任务计划程序”,创建新任务。
    • 常规选项中勾选“不管用户是否登录都要运行”和“使用最高权限”。
    • 触发器:设置周期性执行(如每5分钟)。
    • 操作:启动程序选择保存的bat文件。
    • 条件:取消所有勾选以避免休眠时失效。
  4. 测试

    • 手动停止 SQL Server 服务,等待脚本自动重启并检查日志。

注意事项:

  • 需确保执行账户有权限管理服务(建议使用管理员账户)。
  • 若服务器启用了防火墙,需确保不影响服务操作。
  • 定期检查日志文件以确认监控状态。

此脚本会持续监测 SQL Server 服务状态,异常时自动重启并记录详细日志,便于后续维护。