萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

SQL Server 監控腳本實戰:自動檢測服務狀態與重啟邏輯

應用場景

生產環境需確保 SQL Server 服務持續運行。腳本可部署為 SQL Agent 作業、Windows 排程器或系統監控(Zabbix、Prometheus node_exporter)定期執行。

Bash 腳本範例(Linux 版 SQL Server / MySQL 通用邏輯)

#!/bin/bash
# 檢查連接埠 3306 (MySQL) 或 1433 (SQL Server)
PORT=1433
HOST=localhost

# 1. 連接埠存活檢查
if ! nc -z $HOST $PORT >/dev/null 2>&1; then
  echo "[$(date)] Port $PORT down, starting service..."
  systemctl start mssql-server   # 或 systemctl start mysql
  exit 0
fi

# 2. 實際連線測試
if ! /opt/mssql-tools/bin/sqlcmd -S $HOST -U monitor_user -P 'StrongP@ss' -Q "SELECT 1" >/dev/null 2>&1; then
  echo "[$(date)] Connection test failed, restarting..."
  systemctl restart mssql-server
  # 等待啟動完成
  sleep 10
  # 再次驗證
  if /opt/mssql-tools/bin/sqlcmd -S $HOST -U monitor_user -P 'StrongP@ss' -Q "SELECT 1" >/dev/null 2>&1; then
    echo "[$(date)] Restart successful."
  else
    echo "[$(date)] CRITICAL: Restart failed, alerting..."
    # 發送告警(郵件/Slack/Webhook)
  fi
fi

PowerShell 版(Windows 原生)

$svc = Get-Service MSSQLSERVER
if ($svc.Status -ne 'Running') {
    Write-Host "Service stopped, starting..."
    Start-Service $svc
    exit
}

# 測試連線
try {
    $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = "Server=localhost;User ID=monitor;Password=StrongP@ss;Connect Timeout=5"
    $conn.Open()
    $conn.Close()
    Write-Host "SQL Server healthy."
}
catch {
    Write-Warning "Connection failed: $_"
    Restart-Service MSSQLSERVER -Force
    # 發送告警
}

進階監控指標(建議納入監控系統)

指標T-SQL / DMV 取得方式警示閾值建議
CPU 使用率sys.dm_os_ring_buffers 或 PerfMon> 80% 持續 5 分鐘
記憶體壓力DBCC MEMORYSTATUS / sys.dm_os_process_memoryTarget < Total,或 PLE < 300 秒
鎖死鎖sys.dm_tran_locks, sys.dm_os_waiting_tasks出現即告警
磁碟延遲sys.dm_io_virtual_file_stats讀/寫 > 20ms
備份狀態msdb.dbo.backupset超過 RPO 未備份
資料庫狀態sys.databases.state_desc非 ONLINE 即告警

最佳實踐

  • 監控帳號僅授予 VIEW SERVER STATE、SELECT ON msdb 等最小權限。
  • 腳本輸出結構化日誌(JSON),便於日誌平台收集分析。
  • 重啟前先嘗試 DBCC FREEPROCCACHE、DBCC DROPCLEANBUFFERS 緩解暫時性壓力(謹慎)。
  • 建立 Runbook 文件化處理流程,減少人工判斷延遲。

自動化健康檢查與自癒,是資料庫高可用的基石。

copyright © 萬盛學電腦網 all rights reserved