Wednesday, November 09, 2005

 

Ejecutando un DTS desde un Programa

Algunas veces uno requiere ejecutar DTS mediante un programa, necesariamente debes instalar componentes aparte que lo único que logran es tener que incluirlos al momento de llevarlos a producción u otro equipo de un usuario.

Hay una solución muy simple, dejar que SQL Server mediante un sp ejecute dicho DTS y no directamente desde una aplicación externa.

Espero les sirva dicho ejemplo:

CREATE PROCEDURE sp_EjecutarDTS(@Paquete varchar(500) ) As declare @Sql varchar(8000) Set @Sql = 'dtsrun /s (local) /e /n ' + @Paquete exec master.dbo.xp_cmdshell @SqlGo


dtsrun Utility
New Information - SQL Server 2000 SP3.
The dtsrun utility executes a package created using Data Transformation Services (DTS). The DTS package can be stored in the Microsoft® SQL Server™ msdb database, a COM-structured storage file, or SQL Server Meta Data Services.
Syntax
dtsrun [/?] [ [ /[~]S server_name[\instance_name] { {/[~]U user_name [/[~]P password]} /E } ] { {/[~]N package_name } {/[~]G package_guid_string} {/[~]V package_version_guid_string} } [/[~]M package_password] [/[~]F filename] [/[~]R repository_database_name] [/A global_variable_name:typeid=value] [/L log_file_name] [/W NT_event_log_completion_status] [/Z] [/!X] [/!D] [/!Y] [/!C]]
Arguments
/?
Displays the command prompt options.
~
Specifies that the parameter to follow is hexadecimal text representing the encrypted value of the parameter. Can be used with the /S, /U, /P, /N, /G, /V, /M, /F, and /R options. Using encrypted values increases the security of the command used to execute the DTS package because the server name, password, and so on, are not visible. Use /!Y to determine the encrypted command.
/S server_name[\instance_name]
Specifies the instance of SQL Server to connect to. Specify server_name to connect to the default instance of SQL Server on that server. Specify server_name\instance_name to connect to a named instance of SQL Server 2000 on that server.
/U user_name
Is a login ID used to connect to an instance of SQL Server.
/P password
Is a user-specified password used with a login ID.
/E
Specifies a trusted connection (password not required).
/N package_name
Is the name of a DTS package assigned when the package was created.
/G package_guid_string
Is the package ID assigned to the DTS package when it was created. The package ID is a GUID.
/V package_version_guid_string
Is the version ID assigned to the DTS package when it was first saved or executed. A new version ID is assigned to the DTS package each time it is modified. The version ID is a GUID.
/M package_password
Is an optional password assigned to the DTS package when it was created.
/F filename
Is the name of a structured storage file containing DTS packages. If server_name is also specified, the DTS package retrieved from SQL Server is executed and that package is added to the structured storage engine.
/R repository_database_name
Is the name of the repository database containing DTS packages. If no name is specified, the default database name is used.
/A global_variable_name:typeid=value
Specifies a package global variable, where typeid = type identifier for the data type of the global variable. The entire argument string can be quoted. This argument can be repeated to specify multiple global variables. See the Remarks section for the different available type identifiers available with global variables.
To set global variables with this command switch, you must have either Owner permission for the package or the package must have been saved without DTS password protection enabled. If you do not have Owner permission, you can specify global variables, but the values used will be those set in the package, not those specified with the /A command switch.
/L log_file_name:
Specifies the name of the package log file.
/W Windows_Event_Log
Specifies whether or not to write the completion status of the package execution to the Windows Application Log. Specify True or False.
/Z
Indicates that the command line for dtsrun is encrypted using SQL Server 2000 encryption.
/!X
Blocks execution of the selected DTS package. Use this command parameter when you want to create an encrypted command line without executing the DTS package.
/!D
Deletes the DTS package from an instance of SQL Server. The package is not executed. It is not possible to delete a specific DTS package from a structured storage file. The entire file needs to be overwritten using the /F and /S options.
/!Y
Displays the encrypted command used to execute the DTS package without executing it.
/!C
Copies the command used to execute the DTS package to the Microsoft Windows® clipboard. This option can also be used in conjunction with /!X and /!Y.
Remarks
Security Note Batch files may contain credentials stored in plain text. Credentials may be echoed to the user's screen during batch execution.
If you do not specify any command line switches, specify an incorrect command line switch, or your command statement contains a syntax error, dtsrun returns error information and usage instructions. If you enter dtsrunui on the command line without any command line switches, you will start the DTS Run utility.
Spaces between command switches and values are optional. Embedded spaces in values must be embedded between double quotation marks.
If an option is specified multiple times, the last occurrence takes precedence. One exception is the /A command switch. Specifying more than one /A switch creates multiple global variables.
When specifying a global variable with the /A command switch, you must use a type identifier to indicate the data type of the global variable.
A tilde (~) character after the forward slash (for example, /~Z) indicates that the parameter value is encrypted and what follows is the hexadecimal text of the encrypted value.
The table shows the global variable data types and their IDs.
Data type
Type ID
Integer (small)
2
Integer
3
Real (4-byte)
4
Real (8-byte)
5
Currency
6
Date
7
String
8
Boolean
11
Decimal
14
Integer (1-byte)
16
Unsigned int (1-byte)
17
Unsigned int (2-byte)
18
Unsigned int (4-byte)
19
Integer (8-byte)
20
Unsigned int (8-byte)
21
Int
22
Unsigned int
23
HRESULT
25
Pointer
26
LPSTR
30
LPWSTR
31

For information about where to find or how to run this utility, see Getting Started with Command Prompt Utilities.
Examples
To execute a DTS package saved as a COM-structured storage file, use:
dtsrun /Ffilename /Npackage_name /Mpackage_password
To execute a DTS package saved in the SQL Server msdb database, use:
dtsrun /Sserver_name /Uuser_nName /Ppassword /Npackage_name /Mpackage_password
To execute a DTS package saved in Meta Data Services, use:
dtsrun /Sserver_name /Uuser_nrame /Ppassword /Npackage_name /Rrepository_name


Yo usaba esa forma de ejecucion de DTS's pero se me complicaba un poco la vida para la captura de errores desde el mismo store procedure que lo ejecutaba, en mi caso como la ejecucion de los DTSs formaba parte de todo un servicio de migración decidi hacer la ejecucion via codigo. y me funciono muy bien hasta ahora :D: Dim appDTS As New Application() Dim pkgDTS As New Package() Dim varDTS As Variables varDTS = pkgDTS.Variables pkgDTS = appDTS.LoadPackage(strPackageName, Nothing) pkgDTS.Execute() If pkgDTS.ExecutionResult = DTSExecResult.Failure Then ''Error List End If Claro esto bajo .NET 2005, no se si hay el equivalente para version 2003.

Tuesday, November 08, 2005

 

Data Transformation Services

Una de las herramientas que agrega SQL Server 2000 son los servicios de transformación de datos (DTS – por sus siglas en inglés), lo cuales permiten mover datos entre varios orígenes de datos, por ejemplo: desde Dbase III a SQL Server o viceversa o desde SQL Server al mismo. A pesar de que aquí solo se explicará paso a paso la parte de importación/exportación a través del asistente que trae SQL Server, los DTS son mucho más que eso, ya que nos dan la posibilidad de programar paquetes de DTS que realicen diferentes tareas.
Un conjunto de pasos que se ejecutan en determinado orden es lo que conocemos como una tarea. Podemos citar algunos ejemplos:
  1. Transformación de datos.
  2. Copia de objetos de base de datos: tablas, índices, etc.
  3. Importación y exportación de datos entre dos orígenes de datos.
  4. Ejecución de instrucciones de Transact-SQL.

Podemos pensar en nuestro día a día como programadores, en algunas ocasiones nos encontramos con sistemas un poco antiguos que hemos heredado y a los cuales debemos darles mantenimiento o migrar sus datos en forma parcial o total, o en ocaciones integrar dos sistemas con origenes de datos totalmente diferentes. Pues los DTS’s nos dan la posibilidad de mover, copiar, modificar y trabajar con orígenes de datos iguales o diferentes.

Por medio de un DTS se pueden copiar y transformar desde y hacia múltiples orígenes de datos, entre ellos:

  1. Dbase III, IV y V.
  2. Access
  3. Excel
  4. Archivos de Texto
  5. Paradox
  6. OLE DB (SQL Server, Oracle)
  7. Exchange Server
  8. Y otros orígenes de datos proporcionados por terceros (Oracle, Sybase, Adaptive Server Anywhere 9.0, y otros)

Iniciando:

La forma más común de iniciar la creación de un DTS es entrando por medio del SQL Server-Enterprise Manager y seleccionando la opción Wizards… del menú Tools y seleccionando del árbol de selección la opción de Data Transformation Services, también lo podemos hacer desde la consola de comandos del sistema ejecutando el archivo dtswiz.exe, otra forma es, posicionándonos en una base de datos y presionando el botón derecho, seleccionamos Todas las tareas del menú contextual y la opción Importar datos o exportar datos dependiendo de la tarea que vamos a realizar.

Repasemos los pasos que debemos seguir:

1. La primera pantalla del wizard que nos aparece es meramente informativa donde se nos indica para que sirve un DTS, presionamos el botón next -aquí es donde empieza la acción- veremos una pantalla como la imagen que vemos a continuación. En esta seleccionamos el origen de los datos (Data Source). En esta pantalla seleccionamos un origen de datos (donde estan los datos que necesitamos transferir). Esta pantalla puede cambiar su apariencia en función de los opciones que vayamos selecionando. Aparecerá pre-seleccionada la opción de SQL Server del que queremos extraer datos, por defecto esta seleccionado el servidor local (si tenemos SQL Server instalado localmente). Seleccionamos la forma en que nos auntenticaremos en el servidor SQL Server seleccionado. Luego la bases de datos de donde queremos extraer los datos. Una vez configurada la pantalla Elegir un origen de datos pulsamos siguiente.




2. La siguiente pantalla
elegir un destino de datos (Destination) es identica a la anterior, con las mismas opciones, pero en este caso las opciones que estamos seleccionando son las de destino de los datos.

3. En la tercera pantalla que nos aparece debemos Elegir la tabla o consulta(Query) de donde queremos obtener los datos, aquí hay tres opciones dependiendo del modo en que queramos copiar los datos. Según sea el origen de datos seleccionado puede que se activen o se desactiven opciones en esta pantalla.




Copiar tablas y vistas desde el origen de datos: Si seleccionamos copiar las tablas y vistas de la base de datos de origen nos encontraremos con la siguiente pantalla en la tendremos que seleccionar las tablas y/o vistas que trasladaremos a la base de datos destino, si se selecciona una tabla y se pulsa el botón (…), en la columna transformar aparece una pantalla para modificar las opciones de traspaso de esa tabla, si la tabla no existe en el destino, ésta se creará pero si existe tenemos la posibilidad de borrarla o hacer un "append" a los datos ya existentes.




Usar consulta para especificar los datos a transferir: Esta opción permite crear una consulta SQL para definir los datos que vamos a transferir, así podriamos filtrar solamente los datos deseados.

Como se puede apreciar en la pantalla anterior tenemos un botón con la etiqueta "Query Builder" que nos llevara a otra pantalla donde podremos seleccionar las tablas o vistas a partir de las cuales podremos extraer los datos requeridos e ir contruyendo nuestra consulta paso a paso.

Copiar objetos y datos entre bases de datos SQL Server: Si lo que se necesita hacer es una transferencia entre servidores, ya sea porque necesitamos mover una Base de Datos o crear una copia en otro servidor, esta es la opción que debemos seleccionar. Como vemos en la siguiente pantalla podemos elegir los objetos que deseamos copiar, tales como: Procedimientos almacenados, vistas, tablas, restricciones, defaults, reglas, funciones definidas por el usuario, etc. También podemos seleccionar opciones para sobrescribir o agregar datos, copiar todos los objetos de la base de datos o seleccionarlos de una lista.




4. En la siguiente pantalla vamos a decidir que queremos hacer con el DTS, si lo que estamos haciendo es una tarea que solo la necesitamos una vez, puede ser que no sea necesario guardarla en la base de datos (consejo: es mejor guardarlo porque a veces las cosas no funcionan como queremos en la primera, asi eventualmente podríamos modificar el DTS).



En esta pantalla podemos decidir cuando y como ejecutar el DTS, podemos ejecutarlo en el mismo momento o programarlo como una tarea y/o salvarlo como un paquete DTS, procedimiento almacenado o como un módulo de Visual Basic.

Si decidimos salvarlo nos encontraremos con una pantalla como la sieguiente imagen:




En esta pantalla podemos ponerle un nombre adecuado al DTS el cual como siempre debe ser descriptivo, en el campo "Description" podemos escribir una descripción que aclare el propósito del DTS, si queremos podemos inclusive proteger el paquete con una palabra clave para evitar su modificación y se debe definir la base de datos donde se grabara el DTS y la la forma en que nos conectaremos a este servidor.

Y en la última pantalla lo que se presenta es información del proceso que se va a realizar, dependiendo de las opciones seleccionadas en las pantallas previas.


Como se ha descubierto en este documento crear, ejecutar o programar la ejecución de un DTS es una tarea bastante sencilla y potente que puede ser muy útil a la hora de transferir datos entre servidores remotos o entre diferentes fuentes de datos. Los DTS también pueden ser creados desde código Visual Basic, Visual C++, .Net y otros, usando los objetos que estan disponibles atravez de esos lenguajes de programación, por ejemplo desde Visual Basic se deben utilizar las librerías “Microsoft DTSDataPump Scripting Object Library” (dtspump.dll) y “Microsoft DTSPackage Object Library” (dtspkg.dll).

Además un DTS puede ser ejecutado desde la línea de comando o bien ser ejecutado desde cualquier otro lenguaje como PowerBuilder por ejemplo, pero esto es otra historia que veremos en proximas entregas.


Monday, November 07, 2005

 

Inicio

Debido a la facilidad con la que se puede implementar una página bastante vistosa en www.blogger.com he decido iniciar mi tan soñada página de Manuales de Informática para los que lo quieran leer, dependiendo de la respuesta que tenga intentare crear mi propia página con más funcionalidades, espero que me envien su "feedback", gracias.

This page is powered by Blogger. Isn't yours?