2010-03-05

Como crear conexiones DSN para ODBC vía registro de Windows

Hace unos días nos topamos en un proyecto de integración de datos, en donde utilizamos una herramienta ETL, con un reto muy interesante.

Resulta que uno de nuestros clientes que tenemos requiere integrar datos de muchas unidades de negocio, las cuales requiere que nos conectemos a cada una de las bases de datos (extrañamente los datos de cada punto de venta no están integrados en una sola base de datos).

Imagínense tener la misma base de datos por "n" puntos de venta, a pesar de que sea el mismo servidor de base de datos es una base de datos distinta. Para poder integrar la información se requieren que creemos alrededor de 80 conexiones DSN's para conectarnos vía ODBC a cada punto de venta.

Despues de investigar un poco, descubrí en donde se encuentran las configuraciones de los Data Sources y los valores, en este caso estamos hablando de bases de datos de Progress 10.1B pero el concepto es el mismo,

La forma de dar de alta un DSN tradicionalmente es en Pandel de control > Herramientas Administrativas > Fuentes de datos ODBC.

Como podrán ver el nombre en este caso son los que dicen "HD_PGS_TDA_" los números corresponden al número de tienda. Yo siempre utilizo DSN del sistema, ya que generalmente las herramientas de acceso a datos utilizan la del equipo y no la del usuario o archivos DSN.

Resulta que cada DSN requiere de un nombre de la conexión y su configuración de datos, por lo que en el resgistro estan en dos posiciones:

  1. La primera es el nombre de  (como el que leimos "HD_PGS_TDA_" etc...), este se encuentra en el valor de registro: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources
  2. La segunda es cada una de las configuraciones del DSN que estamos creando, estas estan en: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
Para Windows 64 bits, esta llave se encuentra en el siguiente valor:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\

Lo que hice primero fue crear un DSN a mano, luego fui al registro y lo exporte por separado y lo uní en uno nuevo, quedando de la siguiente forma (ejemplo de progress): 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\HD_PGS_TDA_8082]
"Driver"="C:\\Progress\\OpenEdge\\bin\\pgoe1022.dll"
"Description"=""
"HostName"="192.168.1.1"
"PortNumber"="58082"
"DatabaseName"="base_datos"
"LogonID"="usuario_db"
"StaticCursorLongColBuffLen"="4096"
"UseWideCharacterTypes"="0"
"EnableTimestampWithTimezone"="1"
"DefaultIsolationLevel"="READ UNCOMMITTED"
"ArraySize"="50"
"DefaultLongDataBuffLen"="2048"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]
"HD_PGS_TDA_8082"="Progress OpenEdge 10.1B driver"

Les dejo un ejemplo de Oracle (64 bits):
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\oracle_user_schema]
"Driver"="C:\\oracle\\product\\10.2.0\\client_1\\BIN\\SQORA32.DLL"
"Attributes"="W"
"FetchBufferSize"="64000"
"NumericSetting"="NLS"
"ForceWCHAR"="F"
"FailoverDelay"="10"
"FailoverRetryCount"="10"
"MetadataIdDefault"="F"
"BindAsDATE"="F"
"CloseCursor"="F"
"EXECSchemaOpt"=""
"EXECSyntax"="F"
"Application Attributes"="T"
"ResultSets"="T"
"QueryTimeout"="T"
"Failover"="T"
"Lobs"="T"
"DisableMTS"="T"
"DisableDPM"="F"
"BatchAutocommitMode"="IfAllSuccessful"
"Description"=""
"ServerName"="service_name"
"Password"=""
"UserID"="oracle_user_schema"
"DSN"="oracle_user_schema"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources]
"oracle_user_schema"="Oracle in OraClient10g_home1"

Nota: el ejemplo de Oracle, requiere que tengas dado de alta en tus TNSNames la entrada "oracle_user_schema".

Otra cosa... recuerda que para acceder al registro requieren ir a Start > Run... > regedit. En caso de que quieran trabajar con DSN de SQL Server exportenlo desde el origen, ya que tiene parámetros distintos a Progress o cualquier otro ODBC.

Después de esto en un editor de textos repitan estos dos valores cambiando  los datos para cada nuevo DSN, que estará basado en las configuraciones de la base de datos de cada POS.

Al final del día logre hacer la configuración de las tiendas en mucho menos tiempo en el equipo del cliente, con este archivo .reg, por lo que para implementarlo en el servidor bastó con presionar SHIFT + Dobre clic para abrirlo como administrador y crear 80 DSN en solo segundos.

Muy práctico para ahorrarse unas cuantas horas.

¿Que tips como estos conoces?

Nota: No me hago responsable de los daños que realicen en el registro, meterse al registro de Windows requiere conocer su estructura y saber lo que están haciendo.

6 comentarios:

  1. Excelente Tip Gracias

    ResponderEliminar
  2. Gracias por escribir estas lineas, la verdad que has ayudado mucho.

    ResponderEliminar
  3. Para aquellos que tengan instalados drivers ODBC de 32 bits en un sistema Windows de 64 bits, en lugar de utilizar la ruta...

    HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\

    ... deberá utilizarse la ruta...

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\

    Para comprobar las conexiones DSN de 32 bits en el sistema 64 bits ejecutar el comando (Inicio > Ejecutar): %windir%\SysWOW64\odbcad32.exe

    ResponderEliminar
    Respuestas
    1. Gracias por el aporte... despues de años actualice el Post.

      Eliminar
  4. Alguna idea como conectarse con una bd RAIMA dbvista?

    ResponderEliminar
    Respuestas
    1. Hola, Esa RDBMS no la conozco...

      Puedes solicitar a tu proveedor o en la página del fabricante el driver ODBC.

      Una vez que tengas el driver, lo que sigue es que uses el cliente del fabricante o de terceros.

      Nota: Algunas bases de datos usan su propio driver (no necesariamente es un ODBC), por lo que tendrás que leer sobre el tema; por ejemplo Oracle funciona con ODBC pero me gusta más conectarme por TNSNames (Direct connection).

      Saludos!

      Eliminar