Saltar al contenido

SQL Server 2008: cómo enviar un correo electrónico cuando falla un paso en un trabajo del agente de SQL Server, pero el trabajo general se realiza correctamente

Te sugerimos que pruebes esta solución en un entorno controlado antes de pasarlo a producción, un saludo.

Solución:

Puede crear un proceso almacenado para los pasos 1 a 4, con manejo de errores que le notifica por correo electrónico en caso de falla.

Algo como:

CREATE PROCEDURE TestEmailOnFail
AS
BEGIN
    BEGIN TRY
        /*
            Perform some action that might fail
        */
        SELECT 0/0; --THIS WILL FAIL
    END TRY
    BEGIN CATCH
        DECLARE @subject nvarchar(max) = 'Job Failure Notification';
        DECLARE @body nvarchar(max) = 'TestEmailOnFail Job Failed' 
            + CHAR(10) + CHAR(13) + 'Error Number:  ' + CAST(ERROR_NUMBER() AS nvarchar(max))
            + CHAR(10) + CHAR(13) + 'Error Message: ' + ERROR_MESSAGE();
        DECLARE @to nvarchar(max) = '[email protected]';
        DECLARE @profile_name sysname = 'SQLMailProfileName';
        EXEC msdb.dbo.sp_send_dbmail @profile_name = @profile_name,
            @recipients = @to, @subject = @subject, @body = @body;
    END CATCH
END

Acabo de probar esto usando mi perfil de SQL Mail y mi dirección de correo electrónico y recibí el siguiente correo electrónico:

TestEmailOnFail Job Failed
Error Number:  8134
Error Message: Divide by zero error encountered.

  1. Cree un paso 4a, que envía un correo electrónico general (como el que señaló @Max) que “uno de los primeros 4 pasos falló”. Puede hacer esto usando el correo de la base de datos o lo que esté usando ahora para alertar sobre fallas en el trabajo.
  2. El paso 4a está configurado para pasar al paso 5 en caso de éxito.
  3. El Paso 4 está configurado para pasar al Paso 5 en caso de éxito.
  4. Los pasos 1-4 están configurados para pasar al paso 4a en caso de falla.

Si necesita saber qué paso falló, es posible que desee poner la lógica en cada paso (similar a lo que Max propuso) para hacer un TRY/CATCH dentro de la lógica del paso del trabajo en lugar de crear 4 pasos del controlador y usar el andamiaje del trabajo.

Recuerda algo, que tienes concesión de añadir una estimación correcta si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *