首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server Agent 服務管理實務:查詢分析器啟停、啟動失敗排查、纖程模式與帳號問題

     編輯:關於SqlServer

透過 T-SQL 控制 Agent 服務

-- 啟動
EXEC master..xp_cmdshell 'net start SQLSERVERAGENT';

-- 停止
EXEC master..xp_cmdshell 'net stop SQLSERVERAGENT';

-- 設定為自動啟動 (SCM 命令)
EXEC master..xp_cmdshell 'sc config SQLSERVERAGENT start= auto';

前提:xp_cmdshell 需啟用(sp_configure 'xp_cmdshell', 1),執行帳號需具備服務控制權限(通常為 sysadmin)。

常見啟動失敗原因與解決方案

1. 「錯誤 14258:當 SQLServerAgent 正在啟動時,無法執行此操作」

可能原因:啟用了「使用 Windows NT 纖程」。

解決:

  1. 企業管理器 → 右鍵伺服器 → 內容 → 處理器
  2. 取消勾選「使用 Windows NT 纖程」
  3. 重啟 SQL Server 服務(MSSQLSERVER)

2. 系統管理員密碼變更導致服務無法啟動

現象:服務設定為特定帳號執行,密碼過期/變更後啟動失敗。

方案 A:改用本地系統帳戶

  1. services.msc → MSSQLSERVER / SQLSERVERAGENT → 內容 → 登入
  2. 選擇「本地系統帳戶」
  3. 優點:密碼變更無需維護;缺點:網路資源存取受限

方案 B:更新服務帳號密碼

  1. 同樣進入服務登入頁籤
  2. 選擇「此帳號」,輸入 Administrator 與新密碼
  3. 優點:保留網路存取權限;缺點:需建立密碼輪換流程

3. 非正常關機導致註冊表/系統資料庫損毀

症狀:Agent 無法啟動、作業歷史遺失、錯誤日誌異常。

修復:

  1. 安裝媒體 → 高級選項 → 「重建註冊表」
  2. 或重新安裝同版本 Service Pack
  3. 最後手段:重建 msdb(腳本 instmsdb.sql)

Agent 服務架構關鍵組件

組件功能相關系統表
作業引擎 排程觸發、步驟執行、失敗重試、通知 msdb.dbo.sysjobs, sysjobsteps, sysjobschedules
警示引擎 效能計數器/事件/錯誤觸發回應 sysalerts, sysnotifications
操作員 郵件/傳呼/NetSend 接收者 sysoperators
Proxy 帳號 作業步驟執行安全性內容 sysproxies, sysproxylogin
記錄傳送/複寫代理程式 獨立子系統 log_shipping_*, distribution DB

最佳實務檢查清單

  • [ ] Agent 服務設為「自動」,且依賴 MSSQLSERVER 服務
  • [ ] 使用專用低權限網域帳號(非 Administrator)執行 Agent
  • [ ] 啟用「自動重新啟動」失敗時(復原頁籤)
  • [ ] 設定作業歷史記錄清理作業(保留 30-90 天)
  • [ ] 關鍵作業配置「失敗通知」給 DBA 郵件群組
  • [ ] 定期備份 msdb(含作業、歷史、備份記錄)
  • [ ] 監控 Agent 服務狀態(SCOM/Zabbix/PowerShell 心跳)
  • [ ] 避免在 Agent 作業中直接呼叫 xp_cmdshell,改用 SSIS/PowerShell Proxy

現代替代:SQL Agent → Azure Logic Apps / Azure Functions / GitHub Actions

雲端/混合環境建議將排程邏輯外移至雲端協調器,資料庫僅負責執行 T-SQL,享有更好的可觀測性、版控、多環境部署與免維運。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved