¿Qué es una buena herramienta para visualizar los trabajos del Agente SQL? [cerrado]


14

Creo que las herramientas integradas de MS SQL Studio para administrar los trabajos del Agente son un poco frustrantes. ¿Qué herramientas te han resultado útiles?

De antemano, hay tres cosas que me gustaría ver en dicha herramienta:

  • Un resumen gráfico de qué trabajos se ejecutaron cuándo, durante cuánto tiempo y si tuvieron éxito.
  • Una vista de estado actual, como el Monitor de actividad laboral, pero actualizada casi en tiempo real.
  • Una interfaz más conveniente para duplicar o modificar trabajos (por ejemplo, compare dos pasos de trabajo sin ser bloqueado por cuadros de diálogo modales).

Probablemente sería simple escribir una pequeña aplicación para manejar esto, pero seguramente alguien ya lo hizo y lo hizo mejor.

Obviamente, esta es una pregunta subjetiva, por lo que si un mod de algún tipo pasa, siéntase libre de convertirlo en CW.

Respuestas:


13

Busqué en Google y aquí hay algunos programas que pueden interesarte:

  1. Administrador de trabajos de SQL https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. Consultar trabajos actualmente en ejecución del Agente SQL Server http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Si alguien tiene más enlaces para agregar, ¡adelante!


Para el punto 3, la consulta de enlace y las notas están aquí:

Hoy realicé una búsqueda para descubrir una manera de enumerar todos los trabajos que se ejecutan actualmente en el Agente SQL Server. Como cualquier otra búsqueda, esta también comenzó con Google. :)

En 2 minutos encontré esta gran publicación de Brent Ozar en SQLServerPedia. ¿Por qué esta publicación es tan genial? Es genial porque Brent pensó que si solo consulta las tablas sysjobs y sysjobhistory no obtendrá el estado actual exacto del trabajo. Es decir, en la tabla sysjobhistory tiene una columna run_status, sin embargo (aunque según el BOL los valores posibles para esta columna son "Estado de la ejecución del trabajo: 0 = Fallido, 1 = Correcto, 2 = Reintentar, 3 = Cancelado, 4 = En progreso ”) en realidad, el valor nunca será 4 (En progreso). En realidad, en la tabla sysjobhistory se guardan los datos históricos de cada paso de trabajo ejecutado, lo que significa que el estado del paso se actualiza solo después de ejecutar el siguiente paso. En otras palabras, la tabla NO se actualiza en tiempo real, ni cada segundo.

Entonces, Brent descubrió que hay un procedimiento almacenado no documentado sys.xp_sqlagent_enum_jobs, que es parte de sp_help_job, que puede proporcionar el estado de ejecución actual del trabajo del agente.

Aunque encontré una manera de obtener los trabajos actualmente en ejecución, no estaba contento con este script porque solo se ejecuta en SQL 2005/2008.

¿Qué debo hacer si tengo una instancia de SQL 2000 y tengo mucha curiosidad sobre los trabajos que se ejecutan actualmente?

Con un poco de la ayuda de Tim Chapman (el maestro de www.SQLServerNation.com) descubrí cómo hacerlo. GRACIAS Tim!

Aquí está la secuencia de comandos final, que se ejecutará en SQL 2000, 2005 y 2008, y que le dará los trabajos de agente de SQL Server que se ejecutan actualmente. (Como puede ver, la diferencia con el script de Brent es muy pequeña: en lugar de "sys.xp_sqlagent_enum_jobs" estoy usando "master.dbo.xp_sqlagent_enum_jobs" y estoy limitando el conjunto de resultados para obtener solo los trabajos actualmente en ejecución usando "where x .running = 1 ″).

Tan simple como es. Disfrutar.

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

Le di una oportunidad a SQLjobvis; sí me permite visualizar un poco el horario, pero en realidad no es mejor que lo que podría hacer por mí mismo en una hora. Hubiera puesto el eje de tiempo verticalmente, para que los usuarios puedan desplazarse fácilmente por los días.
Jon of All Trades

3

Sé que esta es una publicación anterior, y personalmente he tenido el mismo problema. Administrar múltiples trabajos de agente SQL en varias instancias, así que decidí crear SQL Agent Insight , que se encuentra aquí> http://brentec.ca . Es un producto en evolución y saldrá de la versión beta en un futuro cercano y se actualiza continuamente y las sugerencias son bienvenidas. Este es un proyecto en el que trabajo durante mi tiempo libre mientras consulto y también tengo un concierto de tiempo completo, pero si las sugerencias valen la pena, se ponen en la tolva para el futuro.

Actualmente es solo una herramienta de monitoreo para el agente SQL, con alguna capacidad de secuencias de comandos. Actualmente se encuentra en la versión 0.11 con 2-3 actualizaciones por año y tiene información de contacto para obtener ayuda. Sí, en este momento, no hay ninguna ayuda en línea, pero dado que es prácticamente un producto de solo lectura, no se puede dañar la instancia monitoreada de SQL.


2

¿Intentaste con la función de informes?

Haga clic derecho en Agente SQL => Informes => informes estándar


No lo había hecho, pero no son de gran ayuda. Hay dos, y solo muestran el número de ejecuciones y el tiempo de ejecución promedio.
Jon of All Trades

Para ser claros, no descarto los informes de SQL Studio, si alguien tiene un informe útil que le gustaría compartir.
Jon of All Trades


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.