【SQL Server】ジョブ一覧を取得する

SQL Server
この記事は約4分で読めます。

ジョブの調査をするのに便利です。

/*
--ジョブに関する情報を管理しているシステムテーブル
select * from msdb.dbo.SysJobs
select * from msdb.dbo.SysJobSteps
select * from msdb.dbo.SysJobSchedules
select * from msdb.dbo.SysSchedules
*/

SELECT 
	CASE WHEN st.[step_id] = 1 THEN j.name ELSE '' END as 'ジョブ名',
	j.description as  '説明',
	CASE  WHEN j.enabled=1 THEN N'有効' ELSE N'無効'END as 'ジョブ有効・無効',
	s.name  as 'スケジュール名', 
	CASE WHEN s.enabled=1 THEN N'有効' ELSE N'無効' END  as 'スケジュール有効・無効',
	CASE s.freq_type 
		WHEN   1 THEN N'1回のみ実行' 
		WHEN   4 THEN N'毎日(' + STR(s.freq_interval) + N'日ごと)' 
		WHEN   8 THEN N'毎週' + 
		CASE s.freq_interval 
			WHEN  1 THEN N'日' WHEN  2 THEN N'月' WHEN  4 THEN N'火'
			WHEN  8 THEN N'水' WHEN 16 THEN N'木' WHEN 32 THEN N'金'
			WHEN 64 THEN N'土'
		END + N'曜日' 
		WHEN  16 THEN N'毎月(' + STR(s.freq_interval) + N'日)'
		WHEN  32 THEN N'毎月' + 
		CASE s.freq_interval 
			WHEN  1 THEN N'日' WHEN  2 THEN N'月' WHEN  3 THEN N'火'
			WHEN  4 THEN N'水' WHEN  5 THEN N'木' WHEN  6 THEN N'金'
			WHEN  7 THEN N'土' WHEN  8 THEN N'毎' WHEN  9 THEN N'平'
			WHEN 10 THEN N'土'
		END + CASE WHEN s.freq_interval<8 THEN N'曜日' ELSE N'日' END  
		WHEN  64 THEN N'SQL Server エージェント サービスが開始されたときに実行' 
		WHEN 128 THEN N'コンピューターがアイドル状態のときに実行' 
	END  as '実行間隔',
	CASE WHEN s.freq_subday_type=1 THEN 
		(STUFF(STUFF(RIGHT('00000' + CAST(s.active_start_time AS VARCHAR(6)),6),3,0,':'),6,0,':'))
	ELSE
		STR(s.freq_subday_interval) +
			CASE s.freq_subday_type  
				WHEN  2 THEN N'秒' WHEN  4 THEN N'分' WHEN  8 THEN N'時間'
			END + 'ごと(' + 
			(STUFF(STUFF(RIGHT('00000' + CAST(s.active_start_time AS VARCHAR(6)),6),3,0,':'),6,0,':')) + '-' +
			(STUFF(STUFF(RIGHT('00000' + CAST(s.active_end_time AS VARCHAR(6)),6),3,0,':'),6,0,':')) + ')'
	END   as '実行時間',
	st.[step_id]			as 'ステップID',
	st.[step_name]		as 'ステップ名',
	st.[subsystem]		as 'サブシステム',
	st.[command]			as '実行コマンド',
	st.[database_name]	as 'DB名'
FROM 
	msdb.dbo.SysJobs         j                                    LEFT JOIN 
	msdb.dbo.SysJobSchedules js ON j.job_id       = js.job_id     LEFT JOIN 
	msdb.dbo.SysSchedules    s  ON js.schedule_id = s.schedule_id LEFT JOIN 
	msdb.dbo.SysJobSteps     st ON j.job_id       = st.job_id
ORDER BY '実行時間','実行間隔',j.name,'ステップID'
;

コメント

タイトルとURLをコピーしました