SQL Agentジョブを視覚化するための優れたツールは何ですか?[閉まっている]


14

エージェントジョブを管理するための組み込みのMS SQL Studioツールは、少しイライラするものです。役に立つツールはありますか?

ちなみに、このようなツールで見たいものが3つあります。

  • どのジョブがいつ、どのくらいの期間実行され、成功したかどうかのグラフィカルな要約。
  • ジョブアクティビティモニターのような現在のステータスビュー。ただし、ほぼリアルタイムで更新されます。
  • ジョブを複製または変更するためのより便利なインターフェイス(たとえば、モーダルダイアログによってブロックされることなく2つのジョブステップを比較する)。

これを処理するための小さなアプリを書くのはおそらく簡単でしょうが、誰かがすでにそれをすでに行っており、それをより良くしているでしょう。

これは明らかに主観的な質問なので、ある種のmodが過去をさまよう場合は、気軽にCWにしてください。

回答:


13

いくつかのグーグルがありましたが、ここにあなたが興味を持つかもしれないいくつかのソフトウェアがあります:

  1. SQLジョブマネージャー 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によるこの素晴らしい投稿を見つけました。この投稿がこんなに素晴らしいのはなぜですか?sysjobsとsysjobhistoryテーブルのみを照会すると、正確な現在のジョブステータスを取得できないとブレントが考えたため、非常に素晴らしいです。つまり、sysjobhistoryテーブルには列run_statusがあります(ただし、BOLによると、この列の値は「ジョブ実行のステータス:0 =失敗、1 =成功、2 =再試行、3 =キャンセル、4 =進行中」)実際には、値は4(進行中)になることはありません。実際、sysjobhistoryテーブルには、実行された各ジョブステップの履歴データが保持されます。つまり、ステップのステータスは、次のステップが実行された後にのみ更新されます。つまり、テーブルはリアルタイムで更新されることも、1秒おきに更新されることもありません。

そのため、ブレントは、文書化されていないストアドプロシージャsys.xp_sqlagent_enum_jobsがあることを発見しました。これは、エージェントジョブの現在の実行ステータスを提供できるsp_help_jobの一部です。

現在実行中のジョブを取得する方法を見つけましたが、このスクリプトはSQL 2005/2008でのみ実行されるため、このスクリプトには満足できませんでした。

SQL 2000インスタンスがあり、現在実行中のジョブに非常に興味がある場合はどうすればよいですか?

Tim Chapmanの助けを借りて(www.SQLServerNation.comのマスター)、その方法を見つけました。ありがとう、ティム!

SQL 2000、2005、および2008で実行され、現在実行中のSQL Serverエージェントジョブを提供する最終スクリプトを次に示します。(ご覧のとおり、Brentのスクリプトとの違いはごくわずかです。「sys.xp_sqlagent_enum_jobs」の代わりに「master.dbo.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を試してみました。スケジュールをある程度視覚化できますが、実際には1時間で自分でできることよりも優れているわけではありません。時間軸を垂直に配置すると、ユーザーは簡単に日付をスクロールできます。
すべての取引のジョン

3

これは古い投稿であり、個人的にも同じ問題を抱えています。複数のインスタンスで複数のSQLエージェントジョブを管理するため、SQL Agent Insightを作成することにしました(http://brentec.caにあります)。これは進化中の製品であり、近い将来ベータ版から抜け出し、継続的に更新され、提案を歓迎します。これは私が自由時間に相談しているプロジェクトであり、フルタイムのギグも持っていますが、提案が価値がある場合は、将来のためにホッパーに入れられます。

現在、SQLエージェントの単なる監視ツールであり、スクリプト機能があります。現在、バージョン0.11で1年に2〜3回更新されており、連絡先情報があります。はい、現在、オンラインヘルプはありませんが、ほとんど読み取り専用の製品であるため、監視対象のSQLインスタンスに損害を与えることはできません。


2

レポート機能を試しましたか?

SQLエージェント=>レポート=>標準レポートを右クリックします


私はそうしなかったが、彼らはひどく役に立たない。2つあり、実行回数と平均実行時間を示しています。
すべての取引のジョン

明確にするために、誰かが共有したい有用なレポートを持っている場合、SQL Studioレポートを除外していません。
すべての取引のジョン


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.