SQL Server, ideas y experiencias

Como ejecutar programáticamente un paquete de Integration Services

por Jose Mariano Alvarez 13. junio 2009

Introducción

En una reciente conferencia en la que participé como orador, uno de los comentarios me hizo notar que no se conoce como funciona el SQL Server Integration Services (SSIS) ni cual es rol que cumplen cada uno de los componentes que lo integran.

Quizá uno de las preguntas más habituales es saber cómo se puede ejecutar un paquete en forma programática, ya sea localmente o remotamente. Este artículo intenta mostrar algunas de las alternativas que están disponibles para ejecutar los paquetes del SSIS desde un programa NET 1.1, NET 2.0, desde una página ASP.NET o ASP o desde Visual Basic 6 y otras tecnologías.

Revisando información disponible en la web pude encontrar un excelente artículo de Michael Entin en su Blog en el cual me basé para escribir este artículo, 

http://blogs.msdn.com/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx

Este artículo reproduce parte de ese contenido en español y agrega detalles relacionados a las preguntas que habitualmente se realizan en los foros respecto de SQL Server Integration Services.

 

El rol del servicio de Integration Services.

Existe una creencia de que el servicio de Integration Services permite la ejecución de los paquetes. Entender la función del servicio Integration Services es esencial para tomar una decisión correcta respecto del mecanismo de ejecución de los paquetes.

El servicio de Integration Services soporta la interfaz administrativa de SQL Server Management Studio para enumerar, iniciar, detener, supervisar, importar y exportar paquetes de Integration Services. El servicio Integration no se lo usa para ejecutar paquetes. Aun si el servicio de Integration Services no se está ejecutando se pueden realizar las siguientes tareas:

  • Diseñar y ejecutar paquetes en Business Intelligence Development Studio.
  • Ejecutar paquetes utilizando DTEXEC (dtexec.exe).
  • Ejecutar paquetes utilizando el Agente SQL Server o el Asistente para importación y exportación de SQL Server.
  • Enumerar los paquetes almacenados en la base de datos msdb utilizando T-SQL.
  • Enumerar los paquetes almacenados en el sistema de archivos utilizando el Explorador de Windows.
  • Crear y ejecutar trabajos y planes de mantenimiento desde el Agente del SQL Server.

 

Ejecutar los paquetes

Una de las cosas que debemos tener en cuenta es que los paquetes siempre se ejecutan localmente en el contexto del proceso que invoca su ejecución, por lo tanto si queremos ejecutar remotamente un paquete debemos implementar un mecanismo de indirección que permita a un proceso remoto lanzar la ejecución de dicho paquete.  Por lo tanto es necesario instalar SSIS en la misma máquina donde se ejecuta la aplicación que invoca la ejecución del paquete.

 

Ejecutar el paquete utilizando el modelo de objetos de SSIS.

Existe un documento en la ayuda del SQL Server que explica esta alternativa en detalle:

http://msdn2.microsoft.com/en-us/library/ms136090.aspx

Ventajas

  • Se ejecuta dentro del proceso que lo invoca por lo que es muy fácil de configurar o modificar antes de ejecutar.
  • Se puede recibir eventos de los progresos de ejecución de paquete o pedir que se detenga la ejecución.

Desventajas:

  • Estos objetos solo se pueden utilizar en NET 2.0 y posteriores versiones.
  • En ASP.NET el mecanismo de “impersonation” no funciona cuando el paquete crea otros threads por ejemplo en los data sources.
  • Como ASP.NET se puede configurar para reciclar el proceso en caso de que consuma demasiada memoria y existe la probabilidad de que SSIS consuma una gran cantidad de memoria, entonces puede suceder que este mecanismo no tenga tanta fiabilidad.

 

Ejecutar local mediante DTEXEC.EXE

DTEXEC es la utilidad de línea de comando para la ejecución de paquetes SSIS.  Existe una aplicación similar DTEXECUI,EXE que es similar y permite ejecutar y construir la línea de comandos de forma gráfica como si fuera un asistente. Para ver las opciones de línea de comandos puede ver el siguiente link.

http://msdn2.microsoft.com/en-us/library/ms162810.aspx

Ventajas:

  • Como el paquete se ejecuta en un contexto de ejecución diferente del proceso invocante de la línea de comandos aumenta la fiabilidad del mismo.
  • Se puede utilizar desde cualquier lenguaje de programación y tecnología para invocarlo.
  • se puede pasar parámetros fácilmente mediante la asignación de valores a las variables en la invocación.

Desventajas

  • Es mas difícil obtener información sobre el progreso y debe usarse el logging del SSIS.
  • Sobrecarga en la invocación por el inicio del nuevo proceso (probablemente sea despreciable en comparación con el tiempo de ejecución de los paquetes)..
  • En ASP.NET para generar un proceso que se ejecuta en el contexto de otro usuario, no se puede utilizar el método System.Diagnostics.Process.Start. Esto se debe a que en ASP.NET, la suplantación de identidad se realiza a nivel del thread y no a nivel de proceso. Por lo tanto se debe utilizar el método descripto en el siguiente artículo: Http://support.microsoft.com/kb/889251

 

Ejecución local mediante el Agente del SQL Server

Se puede configurar un Job del Agente SQL para ejecutar el paquete. La invocación del Job puede ser automática o manual mediante SMO o mediante el stored procedure (procedimiento almacenado) sp_start_job.  El contexto de invocación del paquete es el correspondiente al proceso del agente del SQL Server.

El siguiente artículo muestra algunos de los posibles problemas que se pueden presentar cuando se invoca la ejecución de un paquete de SSIS desde el agente del SQL Server.

http://support.microsoft.com/kb/918760

Beneficios:

  • Puede ejecutar el paquete con otra cuenta de usuario con suficientes permisos (cuenta proxy).

Desventajas:

  • No se puede pasar parámetros directamente y se requiere modificar los jobs o la utilización de la configuración del paquete (tablas, variables de ambiente, archivos XML, etc).

En la ayuda del SQL Server hay un ejemplo de como se puede invocar local o remotamente la ejecución del Job desde código NET usando el procedimiento sp_start_job. Lo más importante es que esta invocación es asincrónica y fuera del contexto del proceso que invoca la ejecución del Job y dentro del contexto del agente SQL.

http://msdn2.microsoft.com/en-us/library/ms403355.aspx

NOTA: Si bien se puede planificar al DTEXEC como uno de los pasos del Agente SQL es recomendable utilizar un paso del tipo SSIS.

 

Invocación remota

Para poder invocar remotamente un paquete debemos encontrar mecanismo remoto para 

  • Ejecutar DTEXEC
  • Usar el modelo de objetos del SSIS
  • Invocar un Job de SSI del agente SQL

Quizá el mecanismo más simple de ejecución remota sea la invocación de un Job del agente ya que requiere una mínima programación como puede verse en el ejemplo de la ayuda del SQL Server ya mencionado. Si no desea utilizar el Agente por alguna razón Se puede utilizar cualquier otro programador de tareas genéricas en lugar de Agente SQL que termine invocando el Job de inicio o la ejecución del DTEXEC ola ejecución de una aplicación que instancie el modelo de objetos de SSIS..

El otro método requiere al menos de un mecanismo de invocación remota mediante dos procesos que se comunican en contextos de ejecución diferentes. Se debe por lo tanto crear una aplicación personalizada que utilice el modelo de objetos de Integration Services o el DTEXEC. Dos de los mecanismos mas habituales son exponer un servicio web, un servicio windows o un objeto COM+ que pueda invocarse desde desde el programa cliente.

La ayuda del SQL Server tiene un ejemplo que se puede utilizar un web service (servicio Web) para invocar la ejecución de un paquete.

http://msdn2.microsoft.com/en-us/library/ms403355.aspx

Tags: ,

Artículos

Materiales - El data warehouse en la estrategia de inteligencia de negocio –13 Junio 2009

por Jose Mariano Alvarez 13. junio 2009

UBA-FCEEn esta presentación que realicé en el salón de actos de la Facultad de Ciencias Económicas de la UBA (Universidad de Buenos Aires) con el patrocinio del Grupo de Usuarios Microsoft, estuve exponiendo sobre el data warehouse en la estrategia de inteligencia de negocio. Esta presentación estuvo orientada a mostrar al data warehouse como la estrategia central en la construcción de una solución de inteligencia de negocios, las alternativas para su construcción y la relación con la tecnología OLAP, la minería de datos, los portales de información y los tableros de comando. En todos los casos se trato de reforzar los factores de éxito y los riesgos más importantes en este tipo de proyectos.

Estuve muy a gusto con el auditorio, con los asistentes y los organizadores. Espero que lo hayan podido aprovechar. Les dejo para que puedan descargarse las diapositivas de la presentación en el siguiente link:

El data warehouse en la estrategia de inteligencia de negocio

Guía de rendimiento de carga de datos en el SQL Server

por Jose Mariano Alvarez 18. febrero 2009

Se aplica a:

  • SQL Server 2005
  • SQL Server 2008

Recientemente fue publicado en el sitio de Microsoft este artículo técnico que describe las técnicas de carga de grandes conjuntos de datos (BULK LOAD) en el SQL Server. Abarca tanto las técnicas disponibles como las metodologías para mejorar el rendimiento y optimizar el proceso de carga masiva.

Este documento describe la forma en que estos métodos se pueden utilizar para resolver distintos escenarios comunes como por ejemplo el cargar y leer datos en una tabla al mismo tiempo, usar Integration services y otras tecnologías, etcétera. También hay scripts de ejemplo que ilustran estas soluciones usando patrones de diseño comunes y enlaces a más información.

Se puede encontrar en el siguiente enlace:

The Data Loading Performance Guide

Tags: , , , ,

Novedades

Powered by SQL Total Consulting


View Jose Mariano Alvarez's profile on LinkedIn

 Add to Technorati Favorites 

Calendar

<<  noviembre 2017  >>
lumamijuvido
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar

Locations of visitors to this page

Widget Twitter not found.

Root element is missing.X


Valid XHTML 1.0 Transitional

Valid CSS!