O que é uma boa ferramenta para visualizar trabalhos do SQL Agent? [fechadas]


14

Acho as ferramentas integradas do MS SQL Studio para gerenciar trabalhos do Agente um pouco frustrantes. Quais ferramentas você achou úteis?

De improviso, há três coisas que eu gostaria de ver nessa ferramenta:

  • Um resumo gráfico de quais trabalhos foram executados quando, por quanto tempo e se foram bem-sucedidos.
  • Uma exibição de status atual, como o Job Activity Monitor, mas atualizada em tempo quase real.
  • Uma interface mais conveniente para duplicar ou modificar trabalhos (por exemplo, compare duas etapas do trabalho sem ser bloqueado por diálogos modais).

Provavelmente seria simples escrever um pequeno aplicativo para lidar com isso, mas certamente alguém já fez e fez melhor.

Obviamente, essa é uma pergunta subjetiva; portanto, se algum tipo de mod vagar pelo passado, fique à vontade para torná-lo um CW.

Respostas:


13

Pesquisei no Google e aqui estão alguns softwares que podem lhe interessar:

  1. SQL Job Manager https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. 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

Eu tentei o SQLjobvis; me permite visualizar um pouco a programação, mas não é realmente melhor do que o que eu poderia fazer por mim em uma hora. Eu teria colocado o eixo do tempo verticalmente, para que os usuários pudessem percorrer os dias com facilidade.
Jon de todos os negócios

3

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.


2

Você tentou o recurso de relatórios?

Clique com o botão direito do mouse em SQL Agent => Relatórios => relatórios padrão


Eu não tinha, mas eles não são muito úteis. Existem dois, e eles apenas mostram o número de execuções e o tempo médio de execução.
Jon of All Trades

Para deixar claro, não descarto os relatórios do SQL Studio, se alguém tiver um relatório útil que gostaria de compartilhar.
Jon de Todos os Negócios


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.