SSIS: Microsoft SQL Server Integration Services

SSIS: Microsoft SQL Server Integration Services Dataprix 23 May, 2014 - 19:39

SSIS: Problemas para acceder a Oracle 10g desde entorno de 64 bits mediante Oledb

SSIS: Problemas para acceder a Oracle 10g desde entorno de 64 bits mediante Oledb il_masacratore 19 Noviembre, 2009 - 09:49

Si estamos intendo crear una tarea de flujo de datos que acceda a Oracle usando versiones de cliente igual o inferior a la 10g en entornos de 64bits nos podemos encontrar que al añadir las conexiones aparace un mensaje como el siguiente:

"Test connection failed because of an error in initializing provider. ORA-06413: Connection not open"

La causa del problema reside en que las herramientos de cliente (management studio) de sqlserver se instalan por defecto en la carpeta de archivos de programa con "(x86)" y la mayoria de componentes de management studio estan compilado para 32 bits. A esto falta sumarle un bug de oracle con el tratamiento de esta ruta con parentesis y ya tenemos algo que no funciona...
Soluciones o workarounds para este problema hay varios, que van desde usar directamente el cliente de oracle 11g hasta copiar/pegar los ficheros de la instalación y modificar las claves de registro relativas a SSIS y las rutas de DTExec.exe (ejecutable para paquetes ssis). También debemos cambiar la plataforma en las propiedades del proyecto por una de 32 bits y tener instalada la versión de cliente correspondiente. Aquí encontrareis algunas propuestas.

Por favor, antes de decidir que hacer hay que pensarselo dos veces y analizar si el problema lo podemos esquivar por la parte de la plataforma; si disponemos otra instalación de sqlserveradicional de 32 bits donde poder deployar nuestros paquetes ssis nos ahorraremos dolores de cabeza y perder el tiempo haciendo estas modificaciones. Recuerdo haber leído también que existen parches para Oracle que lo solución, o se puede optar directamente por instalar el cliente de la 11g etc...

Buena suerte

SSIS: Solución a dos errores sin motivo aparente cuando insertamos datos en MySql

SSIS: Solución a dos errores sin motivo aparente cuando insertamos datos en MySql il_masacratore 8 Septiembre, 2010 - 11:59

 

Por la razón que sea puede que tengamos que desarrollar un paquete de Microsoft Integration Services que nos mueva datos de cualquier origen a una tabla que se encuentra en una base de datos MySQL.

La primera intención será hacerlo mediante una ADO.NET Destination y el provider de MySQL para la conexión. Si lo hacemos así para insertar los datos directamente, al crear el destino, seleccionar la conexión y luego seleccionamos la tabla aparecerá un error como el siguiente al comprobarlo todo con la vista previa o al intentar hacer las asignaciones.

 

 

Este error se debe a al modo de compatibilidad sql ansi de la base de datos mysql donde intentamos cargar los datos. Para solventarlo debemos conectarnos al servidor de MySQL y cambiar la compatibilidad ansi de sql de la base de datos*:

 

TOCA:~# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 77

Server version: 5.0.51a-24+lenny3-log (Debian)

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> select @@global.sql_mode;

+-------------------+

| @@global.sql_mode |

+-------------------+

| |

+-------------------+

1 row in set (0.00 sec)

 

mysql> set global sql_mode='ANSI';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select @@global.sql_mode;

+-------------------------------------------------------------+

| @@global.sql_mode |

+-------------------------------------------------------------+

| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI |

+-------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> exit

 

Si volvemos a probar ya podremos tener una vista previa de la tabla o editar las asignaciones entre columnas pero nos encontraremos otro error al ejecutar el paquete:

“[ADO NET Destination [843]] Error: Excepción durante la inserción de datos. El mensaje devuelto por el proveedor es: Unknown column 'p1' in 'field list'”

El driver tiene un problema y no nos deja trabajar bien con parametros (que es como se construyen las inserciones de registros en el destino) así que tenemos que hacer otro workaround para solventar este problema: trabajar con ADO.NET Destination en destino pero con un origen ODBC en la conexión. Esto unido al tema de la modificación del sql_mode del destino MySQL nos permitirá hacer la carga correctamente.

 


 

*Cabe destacar que la compatibilidad la podemos cambiar a nivel global como en el ejemplo o solo a nivel de session (con lo que deberíamos añadir la ejecución de un comando en primera instancia para modificar el valor de @@SESSION.sql_mode). Más info aquí.

 

 

Para declarar la variable de session y no global, para que no afecte tu mysql. y puedas insertar información desde tu SSIS 

yo la declare desde el ODBC de la siguiete forma en las propiedades de Conexión.

 

 Initial Statement: SET SESSION SQL_MODE='ANSI_QUOTES';

SET SESSION SQL_MODE='ANSI_QUOTES';