No es la primera vez que necesito, ya no sólo acceder a una base de datos IBM Informix, sino también definir orígenes de datos ODBC, crear servidores vinculados, ejecutar consultas OPENROWSET y OPENQUERY, etc.
Informix es uno de los principales motores de bases de datos relacionales del mercado, junto a ORACLE, SQL Server, DB2 y Sybase. Suele montarse sobre servidores UNIX, tanto en servidores Linux empresariales (Red Hat Enterprise, Suse Enterprise, etc.) hasta otros sistemas operativos UNIX más profesionales como HP-UX (el UNIX de HP) y AIX (el UNIX de IBM).
Para poder acceder a una base de datos Informix desde Microsoft Windows, es necesario descargar e instalar el cliente de Informix: IBM Informix Client Software Development Kit (SDK).
En una máquina Microsoft Windows de 64-bit, si deseamos utilizar Drivers ODBC desde una aplicación 64-bit, es necesario disponer de Drivers ODBC de 64-bit. En el caso de la arquitectura x64 es algo confuso, ya que en dicho escenario es posible instalar aplicaciones y/o Drivers ODBC de 32-bit, los cuales se ejecutarán en modo WoW (Windows-On-Windows), es decir, se emularán como si se tratase de una especie de máquina virtual de 32-bit sobre el propio sistema operativo de 64-bit. Es decir, con la arquitectura x64 podemos:
- Desde una aplicación de 32-bit, utilizar Drivers ODBC de 32-bit.
- Desde una aplicación de 64-bit, utilizar Drivers ODBC de 64-bit.
En el caso de montar Microsoft Windows sobre Intel Itanium de 64-bit (arquitectura IA64), al tratarse de una arquitectura de procesador totalmente distinta a la arquitectura x86 de Intel (la de toda la vida), esta situación no es posible, ya que sobre Itanium (IA64) no existe WoW (Windows-On-Windows). Al menos, esto es lo que he podido contrastar buscando en la Web (aún no he tenido opción de trabajar con IA64).
En el caso de máquinas Microsoft Windows de 64-bit en arquitectura x64 (la evolución natural de x86, que son con las que he trabajado y trabajo), me he encontrado principalmente con los dos siguientes problemas referentes a las conectividades con Informix:
- IBM ha tardado mucho tiempo en ofrecer versiones 64-bit del cliente de Informix (IBM Informix Client Software Development Kit). No es de extrañar, pues muchos fabricantes han tardado en ofrecer sus productos en versiones de 64-bit.
- Algunas versiones 64-bit del cliente de Informix incluían un software de instalación defectuoso. Este caso es especialmente interesante, ya que ocurría que el programa de instalación incluía los Drivers ODBC de 64-bit (tan deseados), pero sin embargo, el programa de instalación los registraba en el sistema como Drivers ODBC de 32-bit (y NO como Drivers ODBC de 64-bit, que es como debe ser), por lo que no se podía utilizar (dícese, como el que tiene un tío en Murcia ;-). Se trata de un error reconocido por IBM, quien recomienda la utilización de IBM Informix Client SDK 3.50.FC3 (esta versión la he probado, y funciona OK, aunque en alguna ocasión se han producido errores de acceso a Informix desde SQL Server - OPENROWSET u OPENQUERY - que se solucionaban reiniciando la instancia de SQL Server). El enlace de IBM en el que se reconoce este bug, es el siguiente:
IC56137: INSTALL SCRIPT REGISTERS THE 64 BIT ODBC DRIVER AS 32 BIT
En caso de instalar el cliente IBM Informix Client SDK 3.50.FC3 (por cierto, la F es de 64-bit, si fuera TC3 sería 32-bit… cosas de nomenclatura de IBM ;-), es muy recomendable desinstalar antes las versiones anteriores de IBM Informix Client SDK. Es más, de ser posible, yo desinstalaría, reiniciaría, instalaría y volvería a reiniciar. No hay nada más terrible, que deberle un reinicio a Windows (como decía un antiguo profesor mío, ya que Windows, no te lo perdonará ;-)
Recapitulando, los pasos a seguir son:
- Desinstalar versiones anteriores de IBM Informix Client Software Development Kit (SDK).
- Reiniciar el sistema (opcional pero recomendable).
- Instalar IBM Informix Client Software Development Kit (SDK) 3.50.FC3.
- Reiniciar el sistema (opcional pero recomendable).
- Configurar las conexiones deseadas a Informix, desde la utilidad SetNet32. Recordar los conceptos de Informix:
- Host Name. Dirección IP o nombre DNS del servidor que tiene instalado Informix.
- Informix Server. Nombre de la Instancia de Informix a la que nos deseamos conectar. Es posible instalar múltiples instancias de Informix sobre la misma máquina (eso si, cada una escuchará en un puerto distinto).
- Protocol Name. Protocolo utilizado para acceder a Informix. Habitualmente, se utiliza el protocolo onsoctcp.
- Service Name. Puerto TCP en el que escucha la instancia de Informix. Se puede especificar el número del puerto TCP, o bien, el nombre del puerto TCP (si está especificado en el fichero de configuración services).
- Configurar los orígenes de datos ODBC deseados. Después del paso anterior, esto no tiene mayor importancia, eso sí, será necesario conocer la base de datos, usuario y contraseña.
En lo relacionado con utilizar SQL Server 2005 64-bit para acceder a Informix a través de ODBC 64-bit (con OPENROWSET, o bien, con Servidores Vinculados y OPENQUERY) nos encontramos un problema adicional:
- Desde SQL Server 2005 sólo podemos acceder a orígenes de datos externos a través de Proveedores OLEDB. No es posible acceder directamente a través de ODBC.
- Existe un Proveedor OLEDB que hace de puente OLEDB a ODBC, el Proveedor MSDASQL.dll, de tal modo, que es posible utilizar dicho Proveedor OLEDB para acceder a un origen de datos ODBC. Sin embargo, sólo está disponible en su versión de 32-bit. Si deseamos el Proveedor MSDASQL.dll de 64-bit, deberemos descargarlo de la Web de Microsoft.
Al respecto de todo esto (el Proveedor MSDASQL de 64-bit, crear Servidores Vinculados, utilizar OPENROWSET y OPENQUERY, etc.), se puede obtener más información en mi artículo ¿Como consultar un origen de datos ODBC (DSN) desde SQL Server 2005 64-bit a través de OPENROWSET u OPENQUERY + Servidor Vinculado (Proveedor MSDASQL 64-bit)?
Con todo esto, ya estaremos en disposición tanto de conectarnos a Informix a través de ODBC 64-bit, como a través de SQL Server 2005 64-bit (con OPENROWSET, o con Servidores Vinculados y OPENQUERY).
Por supuesto, no debemos olvidarnos de la posibilidad de acceder a Informix a través de Drivers ODBC de terceros, como es el caso de DataDirect (conocidos anteriormente como MERANT y como INTERSOLV, el principal fabricante de drivers ODBC de toda la vida) u Open Link.
Del mismo modo, aunque el alcance del presente artículo es acceder a IBM Informix a través de Drivers ODBC, recordar que también es posible acceder a orígenes de datos externos utilizando Proveedores OLEDB, ya sean entregados por los propios fabricantes, o bien Proveedores OLEDB de terceros. De hecho, también es posible acceder a orígenes de datos externos a través de Proveedores .Net. A este respecto, es interesante recordar que con la instalación de IBM Informix Client Software Development Kit se incluyen los drivers OLEDB y .Net Framework de Informix. Sin embargo, no es suficiente con instalar el Proveedor OLEDB de Informix y/o el Proveedor .Net de Informix. Para poder conectarse a Informix a través del Proveedor OLEDB de Informix o del Proveedor .Net de Informix, además es necesario:
- Acceder a Informix a través del Proveedor OLEDB de Informix. Es necesario que un DBA de Informix ejecute el Script coledbp.sql. El Script coledbp.sql instala los objetos (tablas y procedimientos almacenados) de base de datos de soporte para el establecimiento de conexiones OLEDB a Informix. En caso de desear eliminar los objetos creados por el Script coledbp.sql, es posible ejecutar el Script doledbp.sql, el cual elimina las tablas y procedimientos almacenados creados por el Script coledbp.sql.
- Acceder a Informix a través del Proveedor .Net de Informix. Es necesario que un DBA de Informix ejecute el Script cdotnet.sql. El Script cdotnet.sql instala los objetos (tablas y procedimientos almacenados) de base de datos de soporte para el establecimiento de conexiones .Net Framework a Informix. En caso de desear eliminar los objetos creados por el Script cdotnet.sql, es posible ejecutar el Script ddotnet.sql, el cual elimina las tablas y procedimientos almacenados creados por el Script cdotnet.sql.
Poco más. Espero que os sirva ;-)