none
Capturar errores Especificos RRS feed

  • Pregunta

  • Buen día a todos,

    Espero que me puedan ayudar/orientar con la siguiente consulta, algo académica.

    Tengo actualmente un JOB, el job lo que hace es ejecutar un programa de consola, dicho programa de consola se encarga de ejecutar algunos SP.

    El problema es cuando por alguna extraña razón alguno de estos SP fallan, entonces en el historial del job me aparece cual fue el sp que fallo, pero no como tal la razon de porque el SP fallo.

    Entonces hay alguna forma de ver o verificar porque el SP que indica el log del job ha fallado, claro esta, sin necesidad de ir a ejecutar aparte el SP par saber porque fallo, sino mas bien en su momento capturar el error en un log o alguna configuración para que en el log del job salga como tal porque alguno de esos sp internamente fallan.

    Quedo muy atento a su ayuda, puesto que laboralmente esto podría ayudarme mucho a hacer el rastreo de porque fallan los SP.

    Saludos a todos.

    jueves, 1 de noviembre de 2018 16:04

Respuestas

  • En realidad no veo como el job pueda capturar los detalles del error, pues este solo se encarga de ejecutar tu programa y no tiene idea de lo que tu programa hace a menos que el se lo indique através de excepciones como las que te indica actualmente, otra idea por la que no optaría (porque es mas elegante, más fácil, y más adecuado hacerlo desde tu programa) sería encerrar todos las instrucciones de tus sp en try catch de sqlserver y si se va al catch entonces hacer un insert del error en alguna tabla y luego dispara el error con raise error para regresárselo al programa, cuando quieras revisar los errores te puedes ir a tu tabla y hacerle un select. Pero lo mejor sería capturarlo en el programa.

    Puedes mostrar lo que ejecuta el job, y los errores que se guardan en el log, y si te es posible, en que parte del código del programa se capturan los errores que se muestran en el log del job.

    jueves, 1 de noviembre de 2018 20:10

Todas las respuestas

  • Saludos santiago

    Es curioso que tu job refleje los sp que dieron problemas si en realidad el único que tiene conocimiento de esos sp es tu programa, a menos, pienso yo que el programa esté regresando el error "Falló al ejecutar sp" como una excepción no controlada.

    Usas try catch en tu programa de consola? puedes capturar los errores en try catch y enviarlos como excepción no controlada con los detalles del error o bien en vez de generar excepciones no controladas puedes guardar en el log del servidor con Console.Log("Falló sp_nombre, " + ex.message) y tendrías todos los errores disponibles en el log del servidor, el cual puedes verificar con el visor de eventos del servidor, no te pongo ejemplos de código porque no se en que lenguaje tienes tu aplicación de consola, y tampoco nos mostraste como es la ejecución... pero bueno, espero haberme explicado... por otro lado, porque no dejas las ejecuciones de tus sp desde una buena vez en el job?, porque usas el job para ejecutar la aplicación? no has considerado dejarla ejecutándose y usar Thread.Sleep para controlar el momento de ejecución en vez del job?

    jueves, 1 de noviembre de 2018 16:42
  • Hola Yerlad,

    Gracias por contestar, bueno creo que me explique mal no lo se. Peor el flujo actualmente funciona como tu me lo comentas, el job se encarga de ejecutar el programa de consola y este programa tiene algunas instrucciones que son mas convenientes en el programa de consola (esta desarrollado en c#) y en efecto dichas instrucciones si esta en bloque que capturan cuales son los sp que han finalizado en error, que e slo que el job me muestra en su historial de ejecución. La pregunta es como puedo obtener o capturar los errores de los sp que ejecuta  dicho programa de consola, directamente en SQLServer, sin tener que ir modificar el programa de consola. No se si es posible o que ideas te surgen.

    Gracias de antemano!

    jueves, 1 de noviembre de 2018 19:46
  • En realidad no veo como el job pueda capturar los detalles del error, pues este solo se encarga de ejecutar tu programa y no tiene idea de lo que tu programa hace a menos que el se lo indique através de excepciones como las que te indica actualmente, otra idea por la que no optaría (porque es mas elegante, más fácil, y más adecuado hacerlo desde tu programa) sería encerrar todos las instrucciones de tus sp en try catch de sqlserver y si se va al catch entonces hacer un insert del error en alguna tabla y luego dispara el error con raise error para regresárselo al programa, cuando quieras revisar los errores te puedes ir a tu tabla y hacerle un select. Pero lo mejor sería capturarlo en el programa.

    Puedes mostrar lo que ejecuta el job, y los errores que se guardan en el log, y si te es posible, en que parte del código del programa se capturan los errores que se muestran en el log del job.

    jueves, 1 de noviembre de 2018 20:10
  • Hola Yerald,

    Gracias por tus respuestas. Considerare reestructurarlo para hacer la validación desde el mismo programa.

    Saludos

    jueves, 1 de noviembre de 2018 20:31