sql >> Base de Datos >  >> RDS >> Sqlserver

4 formas de obtener el historial de trabajos de SQL Server

En este artículo, presento cuatro opciones para devolver datos del historial de trabajos del Agente SQL Server.

Las opciones

He incluido dos opciones de GUI y dos opciones de T-SQL:

  • Opción 1 :utilice la interfaz gráfica de usuario de SSMS.
  • Opción 2 :Use la GUI de Azure Data Studio (a través de la extensión del Agente SQL Server)
  • Opción 3 :Ejecute sp_help_jobhistory procedimiento almacenado.
  • Opción 4 :consulta el sysjobhistory tabla (y únala con la sysjobs_view ver o el sysjobs mesa).

Los objetos del Agente SQL Server residen en msdb base de datos, por lo que las opciones de T-SQL deben ejecutarse en esa base de datos. Puede hacerlo cambiando a msdb base de datos primero, o calificando el objeto apropiadamente (por ejemplo, msdb.dbo.sysjobhistory ).

Opción 1:Usar la GUI de SSMS

Puede usar la GUI de SQL Server Management Studio (SSMS) para ver el historial de trabajos.

Puede hacerlo expandiendo el nodo del Agente SQL Server en el Explorador de objetos y luego haciendo clic con el botón derecho en Trabajos. y seleccionando Ver historial desde el menú contextual:

Esto abre una nueva ventana con el historial de trabajos de todos los trabajos dentro del Visor de archivos de registro:

Puede ver el historial de un solo trabajo anulando la selección de los otros trabajos en esta pantalla. Alternativamente, puede ubicar ese trabajo en el Explorador de objetos y hacer clic derecho desde allí.

Consulte Ver el historial de trabajos del Agente SQL Server con SSMS para obtener más detalles y capturas de pantalla.

Opción 2:usar la GUI de Azure Data Studio

Si usa Azure Data Studio, es posible que no lo sepa, pero también tiene la opción de ver el historial de trabajos del Agente SQL Server.

La forma de hacerlo es a través de la extensión del Agente SQL Server.

Esto es lo que parece:

En esta pantalla, estamos viendo el historial de un trabajo llamado BackupKrankyKranesDB .

El historial de trabajos aparece en el panel izquierdo. Puede hacer clic en cada elemento en el panel de historial izquierdo para mostrar los detalles de ese elemento en el panel derecho.

Al momento de escribir este artículo, parece que solo puede ver el historial de un solo trabajo a la vez.

Consulte Ver el historial de trabajos del Agente SQL Server con Azure Data Studio para obtener más detalles y capturas de pantalla.

Opción 3:El sp_help_jobhistory Procedimiento almacenado

Si prefiere (o necesita) realizar sus tareas con T-SQL, entonces el sp_help_jobhistory procedimiento almacenado es una opción rápida y fácil para usted.

Cuando llamas a sp_help_jobhistory sin ningún argumento, devuelve el historial de todos los trabajos. Pero cuando pasa el nombre o la ID de un trabajo, muestra solo el historial de ese trabajo.

He aquí un ejemplo:

EXEC msdb.dbo.sp_help_jobhistory;

Resultado:

Tenga en cuenta que sp_help_jobhistory se encuentra en el msdb base de datos, por lo que debe asegurarse de ejecutarlo desde allí. Puede hacerlo cambiando a esa base de datos (por ejemplo, con USE msdb ), o calificando el procedimiento almacenado con la base de datos y el esquema (es decir, msdn.dbo.sp_help_jobhistory ).

Puede obtener el historial de un solo trabajo pasando el ID o el nombre de ese trabajo como argumento.

Ejemplo:

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB';

También puede usar el parámetro @mode parameter para especificar si devolver o no todas las columnas en el conjunto de resultados (FULL ), o simplemente un resumen (SUMMARY ).

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB',
	@mode = 'FULL';

El valor predeterminado es SUMMARY .

Opción 4:El sysjobhistory Mesa

El sysjobhistory table es la tabla que almacena los datos del historial de trabajos.

Como con cualquier tabla, simplemente puede hacer algo como esto:

SELECT * FROM msdb.dbo.sysjobhistory;

Eso devolverá todas las columnas de la tabla.

Sin embargo, esta tabla no almacena el nombre del trabajo (o la descripción del trabajo, etc.). Para obtener esos datos, deberá unir esta tabla con otras tablas/vistas, como sysjobs_view ver o el sysjobs mesa. Eso proporcionará un conjunto de resultados más completo.

A continuación se muestra una consulta que puede utilizar para obtener datos más completos.

SELECT jv.name AS Job,
		jh.step_name AS Step,
		msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
		STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;

Resultado:

Puede agregar más columnas al SELECT enumere según sea necesario.

Si se pregunta por qué esta consulta utiliza un montón de elementos adicionales, como AGENT_DATETIME() función, la STUFF() función, RIGHT() , CAST() y REPLICATE() , es por la forma en que sysjobhistory almacena sus valores de fecha y hora.

Si no hubiera usado esas funciones, los valores de fecha y hora habrían sido menos legibles.

En particular, el run_date , run_time y run_duration las columnas almacenan sus datos como int valores. De manera predeterminada, los datos en esas columnas se ven así:

Eso puede dificultar la lectura para algunos de nosotros, los humanos. Especialmente la run_duration columna. Por lo tanto, usamos varias funciones en la consulta anterior para presentar estas columnas en un formato más legible para los humanos.

Puede notar que el sp_help_jobhistory procedimiento almacenado sufre el mismo problema.

Además, debo mencionar que AGENT_DATE() parece ser una función no documentada.