什么是可视化SQL Agent作业的好工具?[关闭]


14

我发现用于管理代理作业的内置MS SQL Studio工具有些令人沮丧。您发现哪些工具有用?

副手,我想在这种工具中看到三件事:

  • 有关哪些作业何时运行,持续多长时间以及是否成功的图形摘要。
  • 当前状态视图,如“作业活动监视器”,但几乎实时刷新。
  • 用于复制或修改作业的更方便的界面(例如,比较两个作业步骤而不会被模态对话框阻止)。

编写一个小应用程序来处理此问题可能很简单,但是肯定有人已经做到了,并且做得更好。

这显然是一个主观的问题,因此,如果某种mod徘徊不前,请随时将其设为CW。

Answers:


13

进行了一些谷歌搜索,下面是一些您可能感兴趣的软件:

  1. SQL Job Manager https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. 查询当前正在运行的SQL Server代理作业 http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

如果有人要添加更多链接,请继续!


对于第3点,链接查询和注释在此处-

今天,我继续寻找一种列出所有当前正在运行的SQL Server代理作业的方法。与其他任务一样,这也是从Google-ing开始的。:)

在2分钟内,我在SQLServerPedia上找到了Brent Ozar的这篇精彩文章。为什么这篇文章这么好?之所以如此出色是因为Brent认为,如果仅查询sysjobs和sysjobhistory表,您将无法获得准确的当前作业状态。即,在sysjobhistory表中,您有一列run_status,但是(即使根据BOL,此列的可能值为“作业执行的状态:0 =失败,1 =成功,2 =重试,3 =取消,4 =进行中”),则该值永远不会为4(进行中)。实际上,在sysjobhistory表中保留了每个执行的作业步骤的历史数据,这意味着该步骤的状态仅在执行下一个步骤之后才更新。换句话说,该表不是实时更新的,也不是每秒更新的。

因此,Brent发现存在一个未记录的存储过程sys.xp_sqlagent_enum_jobs,它是sp_help_job的一部分,可以提供代理作业的当前执行状态。

尽管我找到了一种获取当前正在运行的作业的方法,但我对该脚本不满意,因为该脚本仅在SQL 2005/2008上运行。

如果我有一个SQL 2000实例并且对当前正在运行的作业非常好奇该怎么办?

在蒂姆·查普曼的帮助下(www.SQLServerNation.com的主人),我找到了解决方法。谢谢你,蒂姆!

这是最终的脚本,它将在SQL 2000、2005和2008上运行,并为您提供当前正在运行的SQL Server代理作业。(您可以看到,与Brent脚本的区别很小:我使用的是“ master.dbo.xp_sqlagent_enum_jobs”,而不是“ sys.xp_sqlagent_enum_jobs”,并且我使用“ where x .running = 1”)。

就这么简单。请享用。

IF EXISTS (SELECT *
FROM    tempdb.dbo.sysobjects
WHERE   id = OBJECT_ID(N'[tempdb].[dbo].[Temp1]')
)
DROP TABLE [tempdb].[dbo].[Temp1]
GO
CREATE TABLE [tempdb].[dbo].[Temp1]
(
job_id uniqueidentifier NOT NULL,
last_run_date nvarchar (20) NOT NULL,
last_run_time nvarchar (20) NOT NULL,
next_run_date nvarchar (20) NOT NULL,
next_run_time nvarchar (20) NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname
COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
DECLARE @job_owner   sysname
DECLARE @is_sysadmin   INT
SET @is_sysadmin   = isnull (is_srvrolemember ('sysadmin'), 0)
SET @job_owner   = suser_sname ()
INSERT INTO [tempdb].[dbo].[Temp1]

--EXECUTE sys.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
UPDATE [tempdb].[dbo].[Temp1]
SET last_run_time    = right ('000000' + last_run_time, 6),
next_run_time    = right ('000000' + next_run_time, 6);
-----
SELECT j.name AS JobName,
j.enabled AS Enabled,
CASE x.running
WHEN 1
THEN
'Running'
ELSE
CASE h.run_status
WHEN 2 THEN 'Inactive'
WHEN 4 THEN 'Inactive'
ELSE 'Completed'
END
END
AS CurrentStatus,
coalesce (x.current_step, 0) AS CurrentStepNbr,
CASE
WHEN x.last_run_date > 0
THEN
convert (datetime,
substring (x.last_run_date, 1, 4)
+ '-'
+ substring (x.last_run_date, 5, 2)
+ '-'
+ substring (x.last_run_date, 7, 2)
+ ' '
+ substring (x.last_run_time, 1, 2)
+ ':'
+ substring (x.last_run_time, 3, 2)
+ ':'
+ substring (x.last_run_time, 5, 2)
+ '.000',
121
)
ELSE
NULL
END
AS LastRunTime,
CASE h.run_status
WHEN 0 THEN 'Fail'
WHEN 1 THEN 'Success'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Cancel'
WHEN 4 THEN 'In progress'
END
AS LastRunOutcome,
CASE
WHEN h.run_duration > 0
THEN
(h.run_duration / 1000000) * (3600 * 24)
+ (h.run_duration / 10000 % 100) * 3600
+ (h.run_duration / 100 % 100) * 60
+ (h.run_duration % 100)
ELSE
NULL
END
AS LastRunDuration
FROM          [tempdb].[dbo].[Temp1] x
LEFT JOIN
msdb.dbo.sysjobs j
ON x.job_id = j.job_id
LEFT OUTER JOIN
msdb.dbo.syscategories c
ON j.category_id = c.category_id
LEFT OUTER JOIN
msdb.dbo.sysjobhistory h
ON     x.job_id = h.job_id
AND x.last_run_date = h.run_date
AND x.last_run_time = h.run_time
AND h.step_id = 0
where x.running = 1

我尝试了SQLjobvis;它的确使我对时间表进行了某种程度的可视化,但实际上并没有比我一个小时内能做的更好。我将时间轴垂直放置,以便用户可以轻松滚动浏览日期。
所有行业的乔恩2012年

3

我知道这是一篇较旧的文章,而且我个人也遇到过同样的问题。在多个实例之间管理多个SQL代理作业,因此我决定创建SQL Agent Insight,可在此处找到http://brentec.ca。它是一个不断发展的产品,将在不久的将来退出beta版,并且会不断更新,并欢迎提出建议。这是我在业余时间从事的项目,也是我的全职工作,但是如果建议值得,那么它们将被运用于将来。

当前,它只是SQL Agent的监视工具,具有一定的脚本编写能力。当前版本为0.11,每年更新2-3,并提供联系信息以寻求帮助。是的,目前没有任何在线帮助,但是由于它几乎是一种只读产品,因此对受监视的SQL实例不会造成任何损害。


2

您尝试过报告功能吗?

右键单击SQL Agent =>报告=>标准报告


我没有,但是他们并不是很有帮助。有两个,它们只显示执行次数和平均运行时间。
所有行业的乔恩,2012年

需要明确的是,如果有人要共享有用的报告,我不会排除SQL Studio报告。
所有行业的乔恩


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.