none
Ejecutar Proceso en Integration Services RRS feed

  • Pregunta

  • Buenas a todos,

    Estoy Trabajando con SQL server Integration Services y me gustaría por favor si me podrían ayudar con esta duda que tengo y no lo estoy pudiendo resolver aún..

    Tengo un proyecto de SSIS que lo que hace es:

    1. Mediante una herramienta absorvo los datos de una base de datos As400.

    2. Lo obtengo en un archivo plano (.txt) archivo1=tabla1 ; archivo2=tabla2 y asi sucesivamente

    3. Desde el Integration tomo ese archivo plano y lo inserto a una tabla  de una base de datos SQL server

    4. Luego de limpiar los datos son procesado en un CUBO de SSAS.

    5. Veo los informes hechos en Reporting Services publicado en un portal Sharepoint.

    Bien mi problema es el siguiente...

    Mediante un Job en SQL se corre la migracion de datos diariamente en forma automática para que se actualicen los datos de mi base,

    en ciertas ocaciones el JOB se traba y he verificado que me muestra un mensaje de error en el Integration Services que dice asi:

     [Tarea Ejecutar proceso] Error: Al ejecutar "C:\Program Files (x86)\IBM\Client Access\rxferpcb.exe" "C:\DATA\Transfer\TTOs_HISTORICO\BAK\archivo10.TTO USUARIO CONTRASENA" en "C:\DATA\Transfer\TTOs_HISTORICO\BAK", el código de salida del proceso obtenido fue "20" y se esperaba "0".

    He verificado en mi proyecto de SSIS y me encuentro que NO es un error sino es solo por que ó

    • no encuentra el archivo ärchivo10,
    • encuentra el archivo ärchivo10 pero no tiene datos dentro de él (cero registros, Null)
    • No se tiene acceso al archivo por motivos de permiso.

    Encontré que cuando sucede una de las opciones mencionadas el integration para totalmente y ya no sigue a las siguientes tareas que estan dentro del proyecto.

    ?Cómo puedo hacer para que cuando encuentre este tipo de "error" pueda saltear y seguir a la siguiente tarea.

    He verificado las propiedades FAILPACKAGEONFAILURE y MAXIMUNERRORCOUNT pero no soluciona mi problema

    Observaciones:

    La tarea se encuentra dentro de un Contenededor de bucles Foreach y dentro de ellas hay varias tareas mas

     

    Por favor seria de gran ayuda

     

    desde ya muchas gracias

     

     


    José Barrios
    jueves, 7 de julio de 2011 21:44

Respuestas

  • Hola.

    La propiedad "SuccessValue" de la tarea "Execute process task" te sirve para definir qué valor de retorno ha de tomar la salida de la aplicación para que el resultado se dé por correcto, que por defecto es 0.

    Si le marcas que, sí o sí, el resultado sea correcto, difícilmente podrás controlar el flujo ni si el paquete fue bien o mal. Debes hallar qué valor de salida es error y qué valor no para tratar adecuadamente el caso.

    Si no lo logras determinar por esa vía, prueba a ejecutar la aplicación de otra forma (con xp_cmdshell, con un script de VB), no sé, depende de qué sea lo que domines, pero has de controlar la salida de la aplicación para resolver el problema.

    Déjanos saber qué tal te va.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 14 de julio de 2011 21:45
    Moderador

Todas las respuestas

  • ?Cómo puedo hacer para que cuando encuentre este tipo de "error" pueda saltear y seguir a la siguiente tarea.

    Prueba a poner en las propiedades de la tarea el valor "Success" en ForceExecutionResult.

    También puedes poner false en FailParentOnFailure.

    viernes, 8 de julio de 2011 6:05
  • Lo que comentas se puede hacer sin hacer uso de la tarea "Ejecutar proceso". ¿Qué es lo que hace ese ejecutable?
    viernes, 8 de julio de 2011 7:11
  • Carlos, la tarea "Ejecutar proceso" se encarga de generarme el archivo plano (.txt) para que luego en otra Tarea Flujo de datos pueda llevarlo a la BD SQL.

     


    José Barrios
    viernes, 8 de julio de 2011 13:04
  • Voy a hacer las pruebas con lo que me has comentado, te diré cómo me va...

     

    Gracias!


    José Barrios
    viernes, 8 de julio de 2011 13:05
  • ALberto, he hecho lo que me dijiste y efectivamente pasa a la tarea siguiente pero tengo una observación con respecto

    La tarea "Ejecutar Proceso" está ligado a un informe de Ejecución (Auditoria)

    Dicha tarea "Ejecutar Proceso" tiene Dos restricciones

    1. En caso de que dé error guarda un mensaje en la base de datos "Tarea 1 ejecutado en forma incorrecta"

    2. En caso de que corra en forma correcta igualmente guarda "Tarea 1 ejecutado en forma correcta"

    Al aplicarle la propiedad  "Success" en ForceExecutionResult.  a la tarea siempre me guarda con la segunda restricccion mencionada aunque en verdad no se ejecutó.

    EL esquema de la tarea es asi:

    EJECUTAR PROCESO Restricciones de precedencia

    a. Ejecución Correcta -> Pasa a la Tarea Flujo de Datos (Tomar archivo .txt y llevarlo a BD SQL)

    b. Ejecución Correcta -> Guarda "Tarea 1 ejecutado en forma correcta" para ver luego en otro informe.

    c. Ejecución ERROR  -> Guarda "Tarea 1 ejecutado en forma incorrecta"

    d. CONCLUSION pasa al siguiente tarea

    La restriccion CONCLUSION funciona en caso de que se tenga algun problema durante la extraccion ya sea de tipo de datos o formato,

    pero asi como comenté en mi Exposición arriba no pasa la tarea cuando sucede una de las opciones mencionadas... y no es un error solo que no hay datos.

    Se entiende?

     

    GRACIAS por la AYUDAAA!!

     


    José Barrios
    viernes, 8 de julio de 2011 13:35
  • Si el código de retorno del ejecutable no te vale para comprobar si ha ido bien o mal la ejecución de la tarea, entonces haz lo que te ha dicho Alberto pero luego crea una tarea que lea en esa tabla el resultado del proceso para decidir tú mismo si el paquete debe continuar o debe terminar con error.
    viernes, 8 de julio de 2011 14:47
  • Hola.

    La propiedad "SuccessValue" de la tarea "Execute process task" te sirve para definir qué valor de retorno ha de tomar la salida de la aplicación para que el resultado se dé por correcto, que por defecto es 0.

    Si le marcas que, sí o sí, el resultado sea correcto, difícilmente podrás controlar el flujo ni si el paquete fue bien o mal. Debes hallar qué valor de salida es error y qué valor no para tratar adecuadamente el caso.

    Si no lo logras determinar por esa vía, prueba a ejecutar la aplicación de otra forma (con xp_cmdshell, con un script de VB), no sé, depende de qué sea lo que domines, pero has de controlar la salida de la aplicación para resolver el problema.

    Déjanos saber qué tal te va.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 14 de julio de 2011 21:45
    Moderador
  • Qwalgrande, entiendo lo que dices ahora, hay alguna herramienta que me ayude a capturar qué valor retornó la tarea "Ejecutar Proceso",

    entiendo que si se ejcuta en forma correcta siempre es 0, en este caso a mi me da 20.

     

     


    José Barrios
    viernes, 15 de julio de 2011 12:40
  • Hola.

    Pues no sé de ninguna, al final uno se apaña con lo que conoce, esto es, SQL Server. Pero sería de gran utilidad. Aun así, has sido capaz de dar con ese valor 20. Si 20 es OK, entonces ese es el valor que has de poner en "SuccessValue", y no 0, que no es más que un valor por defecto.

    Realizando la modificación en la propiedad, ¿conseguiste controlar el flujo como deseabas?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 15 de julio de 2011 17:52
    Moderador
  • Hola.

    ¿Resolviste el problema?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    miércoles, 20 de julio de 2011 21:28
    Moderador