¡Hola, chicos!
¿Todo genial contigo?
En esta publicación, me gustaría compartir con ustedes cómo ver el mensaje completo de devolución de ejecución del trabajo cuando la salida del trabajo tiene más de 4000 caracteres.
Comprender el escenario y el problema.
Si analizamos la estructura de la tabla msdb.dbo.sysjobhistory, que es donde se registran los mensajes del registro de trabajos, podemos observar que su tipo es nvarchar(8000) (y era varchar(1024) hasta la versión 2008) y que debido a la sobrecarga de caracteres usando UTF-8, sólo soporta 4.000 caracteres:

En otras palabras, cuando el mensaje del trabajo supera los 4000 caracteres, aparece cortado (truncado) cuando intenta ver el historial de ejecución del trabajo. Cualquiera que se haya encontrado alguna vez con esta situación sabe lo frustrante que es ver que el trabajo falló, pero no puede ver el mensaje de error que causó el error.
Esto significa que, incluso al realizar consultas directas sobre las tablas del Agente SQL, no es posible devolver el mensaje completo, ya que esta limitación está en la propia estructura de la tabla:
SELECT A.message
FROM msdb.dbo.sysjobhistory A
JOIN msdb.dbo.sysjobs B ON B.job_id = A.job_id
WHERE B.[name] = 'Teste Mensagem Longa Job'
Simulando este escenario en su entorno
Para simular este escenario, creé un trabajo, con solo 1 paso, que ejecutaba este comando:
DECLARE @Contador INT = 1, @Total INT = 1000
WHILE(@Contador <= @Total)
BEGIN
PRINT 'Teste do log do Job'
SET @Contador += 1
END
-- Forçando um erro
SELECT 1/0
La solución al problema de este post.
Bueno, ahora que he explicado cómo y por qué ocurre este problema, y he demostrado cómo puedes simular este escenario en tu entorno (en caso de que no estés enfrentando este problema en este momento... jajaja), te mostraré cómo resolver este problema.
Primero, activemos la opción de registrar el resultado del paso en una tabla:

De ahora en adelante, los mensajes de este paso se escribirán en la base de datos (msdb.dbo.sysjobstepslogs).
Nota 1: Vale recordar que este paso debe realizarse para cada paso en el que desee activar la función.
Nota 2: En este registro sólo se registra la última ejecución. Si desea almacenar todo el historial de mensajes, debe marcar la casilla de verificación "Agregar salida a la entrada existente en la tabla".
Para ver el mensaje de registro, demostraré algunas alternativas para hacer esto:
Alternativa n.° 1: usar la interfaz SSMS
Para ver el mensaje completo a través de la interfaz SSMS, simplemente haga clic en el botón "Ver" en la pantalla de detalles del paso:
Con esto se abrirá una instancia del cuaderno con el resultado de la ejecución del trabajo:

Alternativa n.º 2: utilizar el SP del sistema sp_help_jobsteplog
Otra forma de obtener el mensaje completo de la ejecución del trabajo en cuestión es mediante el SP del sistema sp_help_jobsteplog:
DECLARE @Retorno TABLE (
[job_id] UNIQUEIDENTIFIER,
[job_name] NVARCHAR(128),
[step_id] INT,
[step_name] NVARCHAR(128),
[step_uid] UNIQUEIDENTIFIER,
[date_created] DATETIME,
[date_modified] DATETIME,
[log_size] BIGINT,
[log] NVARCHAR(MAX)
);
INSERT INTO @Retorno
EXEC msdb.dbo.sp_help_jobsteplog
@job_name = N'Teste Mensagem Longa Job'
SELECT SUBSTRING([log], CHARINDEX('Msg ', [log]), LEN([log]))
FROM @Retorno
Alternativa n.º 3: uso de tablas del Agente SQL
También puede consultar directamente las tablas del Agente SQL en la base de datos msdb para recuperar información de devolución de trabajos.
SELECT
B.job_id,
C.[name],
A.[log],
SUBSTRING(A.[log], CHARINDEX('Msg ', A.[log]), LEN(A.[log])) AS Msg_Erro,
LEN(A.[log])
FROM
msdb.dbo.sysjobstepslogs AS A
JOIN msdb.dbo.sysjobsteps AS B ON B.step_uid = A.step_uid
JOIN msdb.dbo.sysjobs AS C ON C.job_id = B.job_id
WHERE
C.[name] = 'Teste Mensagem Longa Job'
Bueno amigos, ¡eso es todo!
¿Conoce otras formas de obtener esta información? Publique aquí en los comentarios y actualizaré su publicación y la haré referencia.
Espero que te haya gustado este post y que te haya sido útil 🙂
Un abrazo y nos vemos en el próximo post.
sql server sql agent log devolver mensaje truncar límite truncado tamaño limitado 4000 caracteres caracteres
sql server sql agent log devolver mensaje truncar límite truncado tamaño limitado 4000 caracteres caracteres





Comentários (0)
Carregando comentários…