인터넷 검색을 했습니까? 여기에 관심을 가질만한 소프트웨어가 있습니다.
SQL 작업 관리자
https://www.idera.com/productssolutions/freetools/sqljobmanager
현재 실행중인 SQL Server 에이전트 작업 쿼리
http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/
추가 할 링크가 더있는 사람이 있다면 계속하십시오!
포인트 3의 경우 링크 쿼리 및 메모는 다음과 같습니다.
오늘 저는 현재 실행중인 모든 SQL Server 에이전트 작업을 나열하는 방법을 찾기 위해 노력했습니다. 다른 모든 퀘스트와 마찬가지로이 작업도 Google-ing으로 시작했습니다. :)
2 분 안에 Brent Ozar가 SQLServerPedia에서이 훌륭한 게시물을 발견했습니다. 이 게시물이 왜 그렇게 큰가요? Brent는 sysjobs 및 sysjobhistory 테이블 만 쿼리하면 정확한 현재 작업 상태를 얻지 못할 것이라고 생각했기 때문에 매우 좋습니다. 즉, sysjobhistory 테이블에는 run_status 열이 있습니다 (BOL에 따르면이 열에 가능한 값은 "작업 실행 상태 : 0 = 실패, 1 = 성공, 2 = 재시도, 3 = 취소됨, 4). = 진행 중”) 실제로는 값이 4 (진행 중)가되지 않습니다. 실제로 sysjobhistory 테이블에서 실행 된 각 작업 단계의 히스토리 데이터가 유지되므로 다음 단계가 실행 된 후에 만 단계 상태가 업데이트됩니다. 다시 말해, 테이블은 실시간으로 업데이트되거나 매 초마다 업데이트되지 않습니다.
따라서 Brent는 sp_help_job의 일부인 문서화되지 않은 저장 프로 시저 sys.xp_sqlagent_enum_jobs가 에이전트 작업의 현재 실행 상태를 제공 할 수 있음을 알아 냈습니다.
현재 실행중인 작업을 얻는 방법을 찾았지만 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