Pesquisei no Google e aqui estão alguns softwares que podem lhe interessar:
SQL Job Manager
https://www.idera.com/productssolutions/freetools/sqljobmanager
Consulta atualmente executando trabalhos do SQL Server Agent
http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/
Se alguém tiver mais links para adicionar, vá em frente!
Para o ponto 3, a consulta e as notas do link estão aqui -
Hoje fiz uma busca para descobrir uma maneira de listar todos os trabalhos atualmente em execução do SQL Server Agent. Como todas as outras missões, essa também começou com o Google-ing. :)
Em 2 minutos, encontrei este ótimo post de Brent Ozar no SQLServerPedia. Por que este post é tão bom? É tão bom porque Brent imaginou que, se você consultar apenas as tabelas sysjobs e sysjobhistory, não obterá o status atual exato da tarefa. Ou seja, na tabela sysjobhistory, você possui uma coluna run_status (embora, de acordo com o BOL, os valores possíveis para esta coluna sejam “Status da execução do trabalho: 0 = Falhou, 1 = Bem-sucedido, 2 = Repetição, 3 = Cancelado, 4 = Em andamento ”) na realidade, o valor nunca será 4 (Em andamento). Na verdade, na tabela sysjobhistory são mantidos os dados históricos de cada etapa da tarefa executada, o que significa que o status da etapa é atualizado somente após a execução da próxima etapa. Em outras palavras, a tabela NÃO é atualizada em tempo real, nem a cada segundo.
Portanto, Brent descobriu que existe um procedimento armazenado não documentado sys.xp_sqlagent_enum_jobs, que faz parte de sp_help_job, que pode fornecer o status de execução atual da tarefa do agente.
Embora tenha encontrado uma maneira de obter os trabalhos em execução no momento, não fiquei satisfeito com esse script porque ele é executado apenas no SQL 2005/2008.
O que devo fazer se tiver uma instância do SQL 2000 e estiver muito curioso sobre os trabalhos em execução no momento?
Com um pouco da ajuda de Tim Chapman (o mestre do www.SQLServerNation.com), descobri como fazê-lo. OBRIGADO, Tim!
Aqui está o script final, que será executado no SQL 2000, 2005 e 2008, e que fornecerá os trabalhos de agente do SQL Server em execução no momento. (Como você pode ver, a diferença com o script de Brent é muito pequena: em vez de "sys.xp_sqlagent_enum_jobs", estou usando "master.dbo.xp_sqlagent_enum_jobs" e limitando o conjunto de resultados para obter apenas os trabalhos atualmente em execução usando "where x .running = 1 ").
Simples como é. Desfrutar.
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
Sei que este é um post antigo e, pessoalmente, tive o mesmo problema. Como gerenciar vários trabalhos do agente SQL em várias instâncias, decidi criar o SQL Agent Insight , encontrado aqui> http://brentec.ca . É um produto em evolução e sairá da versão beta no futuro próximo, sendo atualizado continuamente e sugestões são bem-vindas. Este é um projeto em que trabalho durante o meu tempo livre, enquanto consulto e também faço um show em período integral, mas se as sugestões valerem a pena, elas serão colocadas no depósito para o futuro.
Atualmente, é apenas uma ferramenta de monitoramento para o agente SQL, com alguma capacidade de script. Atualmente, está na versão 0.11 com 2-3 atualizações por ano e tem informações de contato para obter assistência. Sim, no momento, não há ajuda on-line, mas como é praticamente um produto somente leitura, nenhum dano pode ser causado à instância monitorada do SQL.
fonte
Você tentou o recurso de relatórios?
Clique com o botão direito do mouse em SQL Agent => Relatórios => relatórios padrão
fonte
Não tenho certeza se isso satisfaz todos os seus critérios, mas você pode olhar para isso:
http://www.sqlsoft.co.uk/sqljobvis.php
fonte
Outro para adicionar à lista:
Uma coisa que eu gosto sobre isso é que ele se integra a outros componentes, como tarefas do Windows Scheduler e Oracle.
Obrigado a Mark por mencionar isso quando perguntei no The Heap.
fonte