SQL 에이전트 작업을 시각화하는 데 유용한 도구는 무엇입니까? [닫은]


14

에이전트 작업 관리를위한 기본 제공 MS SQL Studio 도구가 약간 실망 스럽다는 것을 알았습니다. 어떤 도구가 도움이 되었습니까?

그러한 도구에서 내가보고 싶은 세 가지가 있습니다.

  • 작업 시간, 기간 및 성공 여부에 대한 그래픽 요약.
  • 작업 활동 모니터와 같은 현재 상태보기이지만 거의 실시간으로 갱신됩니다.
  • 작업 복제 또는 수정을위한보다 편리한 인터페이스 (예 : 모달 대화 상자에 의해 차단되지 않고 두 작업 단계 비교).

이것을 처리하기 위해 작은 응용 프로그램을 작성하는 것이 간단 할 수도 있지만 누군가가 이미 그것을 수행하고 더 잘 수행했습니다.

이것은 분명 주관적인 질문이므로 어떤 종류의 모드가 과거를 방황하면 자유롭게 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 분 안에 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

나는 SQLjobvis를 시도했다; 일정을 어느 정도 시각화 할 수 있지만 한 시간 안에 내가 할 수있는 것보다 더 나쁘지는 않습니다. 시간 축을 세로로 놓았으므로 사용자가 일을 쉽게 스크롤 할 수 있습니다.
모든 거래의 존

3

나는 이것이 오래된 게시물이라는 것을 알고 있으며, 개인적으로 같은 문제가있었습니다. 여러 인스턴스에서 여러 SQL 에이전트 작업을 관리하므로 여기 ( http://brentec.ca) 에서 SQL Agent Insight 를 작성하기로 결정했습니다 . 이 제품은 진화하는 제품이며 가까운 시일 내에 베타 버전에서 출시 될 예정이며 지속적으로 업데이트되고 있으며 제안을 환영합니다. 이것은 내가 상담하고 풀 타임 공연을 할 때 자유 시간 동안 작업하는 프로젝트이지만, 제안이 가치가 있다면 미래를위한 호퍼에 투입됩니다.

현재는 일부 스크립팅 기능이있는 SQL 에이전트 용 모니터링 도구 일뿐입니다. 현재 매년 2-3 회 업데이트되는 버전 0.11이며 일부 연락처 정보가 있습니다. 예. 현재 온라인 도움말은 없지만 읽기 전용 제품이므로 모니터링되는 SQL 인스턴스에 손상을 줄 수 없습니다.


2

보고서 기능을 사용해 보셨습니까?

SQL 에이전트 => 보고서 => 표준 보고서를 마우스 오른쪽 단추로 클릭하십시오.


나는하지 않았지만 그들은 크게 도움이되지 않습니다. 두 가지가 있으며 실행 횟수와 평균 런타임 만 표시합니다.
모든 거래의 존

분명히, 누군가가 공유하고 싶은 유용한 보고서가 있다면 SQL Studio 보고서를 배제하지 않습니다.
모든 거래의 존


2

목록에 추가 할 또 다른 것 :

이것에 대해 내가 좋아하는 것은 Windows 스케줄러 및 Oracle 작업과 같은 다른 구성 요소와 통합된다는 것입니다.

힙을 물었을 때 이것을 제기 해 준 Mark 에게 감사합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.