Sql-Server

檢查作業狀態作為日常任務

  • February 21, 2017

我最近一直在思考這個問題:關於如何檢查 SQL Server 代理作業是否正確執行是否有共識?

  • 一些建議似乎是提醒操作員注意故障並解決這些問題,但這根本不考慮未執行的作業(例如,如果代理關閉了一段時間),而不是執行並失敗。
  • 有人建議使用 Job Activity Monitor 並檢查計劃和狀態,這更好,但需要您連接到每台伺服器,這在大型房地產中可能很費力,並維護作業時間列表。
  • 我們目前有每台伺服器的作業列表,並設置了一個操作員將郵件發送到單個 DBA 帳戶。每天,我們都會根據通知電子郵件檢查電子表格中的每個作業,檢查失敗或沒有通知。

我覺得必須有一個更好的解決方案,但我的Google搜尋並沒有提出任何問題。有沒有人有更好的解決方案來管理代理工作的狀態?

編輯 - 我還應該補充一點,我們 IDERA SQLDM 來監控一些伺服器,但沒有預算來查看我們所有的伺服器。此外,我們的 SCOM 實施掌握在我們的伺服器團隊手中,目前從中獲取資訊對我們來說並不容易。這使得獲取有關代理狀態的可靠資訊變得困難。

您有中央管理伺服器嗎?如果是這樣,您可以使用此查詢並針對所有伺服器上的所有 sql 實例執行它:

SELECT CONVERT(nvarchar(128), SERVERPROPERTY('Servername')) AS
Server,
msdb.dbo.sysjobs.job_id,
msdb.dbo.sysjobs.name,
msdb.dbo.sysjobs.enabled AS Job_Enabled,
msdb.dbo.sysjobs.description,
msdb.dbo.sysjobs.notify_level_eventlog,
msdb.dbo.sysjobs.notify_level_email,
msdb.dbo.sysjobs.notify_level_netsend,
msdb.dbo.sysjobs.notify_level_page,
msdb.dbo.sysjobs.notify_email_operator_id,
msdb.dbo.sysjobs.date_created,
msdb.dbo.syscategories.name AS Category_Name,
msdb.dbo.sysjobschedules.next_run_date,
msdb.dbo.sysjobschedules.next_run_time,
msdb.dbo.sysjobservers.last_run_outcome,
msdb.dbo.sysjobservers.last_outcome_message,
msdb.dbo.sysjobservers.last_run_date,
msdb.dbo.sysjobservers.last_run_time,
msdb.dbo.sysjobservers.last_run_duration,
msdb.dbo.sysoperators.name AS Notify_Operator,
msdb.dbo.sysoperators.email_address,
msdb.dbo.sysjobs.date_modified,
GETDATE() AS Package_run_date,
msdb.dbo.sysschedules.name AS Schedule_Name,
msdb.dbo.sysschedules.enabled,
msdb.dbo.sysschedules.freq_type,
msdb.dbo.sysschedules.freq_interval,
msdb.dbo.sysschedules.freq_subday_interval,
msdb.dbo.sysschedules.freq_subday_type,
msdb.dbo.sysschedules.freq_relative_interval,
msdb.dbo.sysschedules.freq_recurrence_factor,
msdb.dbo.sysschedules.active_start_date,
msdb.dbo.sysschedules.active_end_date,
msdb.dbo.sysschedules.active_start_time,
msdb.dbo.sysschedules.active_end_time,
msdb.dbo.sysschedules.date_created AS
Date_Sched_Created,
msdb.dbo.sysschedules.date_modified AS
Date_Sched_Modified,
msdb.dbo.sysschedules.version_number,
msdb.dbo.sysjobs.version_number AS Job_Version
FROM msdb.dbo.sysjobs
INNER JOIN msdb.dbo.syscategories ON
msdb.dbo.sysjobs.category_id = msdb.dbo.syscategories.category_id
LEFT OUTER JOIN msdb.dbo.sysoperators ON
msdb.dbo.sysjobs.notify_page_operator_id = msdb.dbo.sysoperators.id
LEFT OUTER JOIN msdb.dbo.sysjobservers ON
msdb.dbo.sysjobs.job_id = msdb.dbo.sysjobservers.job_id
LEFT OUTER JOIN msdb.dbo.sysjobschedules ON
msdb.dbo.sysjobschedules.job_id = msdb.dbo.sysjobs.job_id
LEFT OUTER JOIN msdb.dbo.sysschedules ON
msdb.dbo.sysjobschedules.schedule_id = msdb.dbo.sysschedules.schedule_id
WHERE msdb.dbo.sysjobs.enabled = 1
AND msdb.dbo.sysjobservers.last_run_outcome = 0

引用自:https://dba.stackexchange.com/questions/131950