Instalación y configuración de Oracle ODBC Gateway 12c-18c-19c en Windows

Por Lisandro Fernigrini
Publicado en Septiembre 2019

Revisado por Francisco Riccio

¿Qué son Servicios Heterogéneos (HS) y los Gateways?

Los Gateways son un conjunto de productos de Oracle que, en conjunto con Heterogeneous Services (una característica de las bases de datos Oracle) permite que una base de datos pueda acceder a una fuente de datos no Oracle como si lo fuera.

Oracle posee muchos tipos de Gateways, especificos para distintos productos (Informix, Sybase, SQL Server, etc.) y adicionalmente existe un gateway“genérico“que permite conectarse, mediante ODBC, a cualquier fuente de datos que soporte una conexión ODBC. Adicionalmente a la versatilidad que esto permite, el Gateway para ODBC es un producto incluído en la licencia de las bases de datos Oracle, por lo que no posee un costo adicional, a diferencia de los Gateways específicos para otras fuentes de datos.

¿Cómo Funcionan Servicios Heterogéneos (HS) y los Gateways?

La funcionalidad de Servicios Heterogénos (HS) permite conectarse a una fuente de datos no Oracle, mediante un Database Link, como si la misma fuera otra base de datos Oracle.

La diferencia con una conexión contra otra base de datos Oracle es que la misma se va a establecer contra el Gateway, el cual a su vez utilizará el Driver ODBC del producto correspondiente a la fuente de datos externa para comunicarse con la misma.

Si bien la imagen representa una instalación en tres servidores, tanto la base de datos, el Gateway y la fuente de datos externa pueden estar instalados en uno, dos (DB Oracle + Gateway o Gateway + DB de terceros), o tres servidores distintos. El único requisito es que los drivers ODBC estén instalados en el mismo servidor que el Gateway.

En las imágenes y ejemplos de esta guía, todos los productos se encontraban instalados en el mismo servidor.

Requerimientos Mínimos para MS Windows

  • El driver de ODBC debe cumplir con el nivel de estándar ODBC 3.0. Para soportar caracteres multibyte, el mismo debe cumplir el estándar 3.5.

Instalación de Oracle Database Gateway

Descargar el Software de Gateways

El primer paso es dirigirse a la página principal de descargas de Oracle Database

(https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html) y encontrar la versión deseada. En este tutorial vamos a utilizar la versión 12c (12.2), pero el mismo es completamente válido para las versiones 18c y 19c de Oracle. Una vez identiicada la versión a utilizar, debemos seleccionar la opcion“See All“para ver todos los componentes de la versión:

En la página específica de descarga de los distintos componentes de la versión deseada, debemos identificar y descargar el archivo que contiene los instaladores de los Gateways:

Instalar el Software de Gateway

Una vez descargado el archivo, debemos descomprimir el mismo y ejecutar el programa“setup.exe“, el cual validará los requerimientos mínimos necesarios para instalar el producto y dará comienzo al programa de instalación, el cual veremos pantalla a pantalla a continuación:

1. Seleccionar un usuario para que sea el dueño de la instalación. Por defecto sugiere utilizar la cuenta de Windows, la cual utilizaremos.

2. Seleccionar un directorio Base (ORACLE_BASE) para la instalación. En este caso vamos a utilizar un directorio nuevo, ubicado en“C:\OracleGW“.

3. Seleccionar los componentes (Gateways) a instalar. En este caso vamos a instalar sólo el Gateway para ODBC

4. El programa de instalación valida los requisimos minimos para el producto seleccionado:

5. Una vez controlados los requisitos, una ventana de sumario nos informa los detalles de la instalación que se realizará:

6. Tras presionar“Install“comienza el proceso de instalación y configuración del Gateway:

7. Luego de copiar todos los archivos requeridos, el programa de instalación inicia el asistente NetCA (Network Configuration Assistant) que permite configurar el Listener y la resolucion de nombres en el Oracle Home del Gateway

8. La primer pantalla nos permite definir el nombre del Listener, en este caso vamos a dejar el nombre por defecto que es LISTENER:

9. El paso siguiente es definir que protocolos de red va a utilizar el Listener. Por defecto sugiere la utilización de TCP, pudiendo elegir algun otro protocolo adicional:

10. El paso siguiente requiere definir el puerto donde el Listener va a recibir conexiones. En vez de usar el puerto por defecto (1521) vamos a usar otro puerto, ya que este caso estamos instalando el Gateway en el mismo servidor donde se encuentra la base de datos Oracle, la cual ya posee un listener en el puerto 1521:

11. El paso siguiente permite configurar otro Listener, el cual no es requerido:

12. Una vez finalizada la configuración del Listener, presionar“NEXT“:

13. A continuación se puede especificar un metodo de resolución de nombres adicional a Local Naming, lo cual no es necesario:

14. Una vez terminado este paso, solo resta dar por finalizado el asistente:

15. Al concluir el asistente de configuración de red, finaliza la instalación del Gateway

Configuración de ODBC

Para que el Gateway pueda conectarse a la fuente de datos no Oracle, es necesario configurar una conexión ODBC a la misma.

En esta guía vamos a utilizar como fuente de datos no Oracle una base de datos SQL Server, por lo que utilizaremos los ejemplos de configuración del Driver ODBC del mismo.

1) Abrir el“Administrador de Origen de Datos ODBC (64 bits)“(el Gateway ODBC de Oracle es un producto de 64 bits). La forma más sencilla es mediante la opción de configuración de Windows, escribiendo ODBC en la opción de búsqueda:

2) Seleccionar la pestaña“System DSN“y presionar“Add“para agregar una nueva fuente de datos:

3) A continuación se debe seleccionar el Driver ODBC de 64 bits (el cual debe estar previamente instalado en el equipo) que vamos a utilizar para la conexión y a continuación presionar“Finish“para iniciar la configuración específica de dicho Driver:

4) En la primer pantalla se debe ingresar un nombre de conexión (usaremos“SQLMIG“), una descripción optativa y el nombre de la instancia SQL Server a la que nos deseamos conectar, en este caso“MIGSERVER“, y a continuación presionar“Next“para configurar detalles adicionales:

5) La segunda pantalla de configuración permite elegir el método de autenticación que utilizaremos para conectarnos a SQL Server. En este caso vamos a utilizar autenticación basada en usuario y contraseña de SQL Server y presionamos“Next“para continuar:

6) En esta pantalla podemos elegir una base de datos por defecto en particular dentro de la instancia de SQL Server, algunas características ANSI y lo que es más importante, podemos definir la conexión de sólo lectura o permitir modificaciones (READWRITE), y luego presionamos“Next“para continuar:

7) La última pantalla de configuración permite elegir opciones específicas de conexión como ser uso de Encriptación, uso de configuración regional, opciones detalladas de log de errores y de actividad, etc.:

8) Por último, veremos una pantalla de resumen de la configuración, que nos permite realizar una prueba de conexión presionando el botón“Test Data Source“:

9) Una vez confirmada la prueba veremos la siguiente pantalla de información, habiendo concluido la configuración del driver de ODBC:

Configuración del Gateway

Una vez configurado el driver de ODBC, necesitamos configurar el Gateway para que utilice el mismo para conectarse a la fuente de datos no Oracle.

Creación del archivo de Parámetros de Inicialización

Este archivo permite indicarle al Gateway qué fuente de datos ODBC utilizar. El mismo debe crearse en el directorio “$ORACLE_HOME/hs/admin“ de la instalación del Gateway, donde ya se encuentra un archivo de ejemplo llamado “initdg4odbc.ora“. Debe cumplir con la nomenclatura ‘initsid.ora“, siendo “sid“ el identificador que deseamos utilizar para la instancia de la base de datos no Oracle a la cual el Gateway se va a conectar. Es necesario crear un archivo de este tipo por cada fuente de datos ODBC a la que nos deseemos conectar.

En este caso, vamos a crear el archivo “initSQLMIG“ (lo cual implica que el SID de nuestra instancia no-Oracle va a ser SQLMIG) con el siguiente contenido:



# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

# HS init parameters
HS_FDS_CONNECT_INFO = SQLMIG
HS_FDS_TRACE_LEVEL = OFF	
	

Hay que recordar que “SQLMIG“ debe ser el mismo nombre definido en la primera pantalla de la configuración del driver ODBC. No tiene por qué ser igual al nombre de la instancia, aunque puede serlo, como en el ejemplo que mostramos en esta guía.

Configurar el Listener

Una vez configurado el archivo de parámetros de inicialización, debemos configurar el Listener en el Gateway de forma tal que el mismo pueda ejecutar el Gateway apropiado al momento de recibir un pedido de conexión. Para ello es necesario incluir el nombre del programa ejecutable del Gateway que el Listener debe ejecutar al momento de recibir un pedido de conexión.

Para esto es necesario:

1) Editar el archivo “$ORACLE_HOME/network/admin/listener.ora“ creado durante la instalación del Gateway. Se debe agregar las líneas resaltadas en verde, reemplazando de ser necesario el nombre "SQLMIG“ por el identificador elegido como nombre de instancia al configurar el Gateway y el path “C:\OracleGW\product\12.2.0\tghome_1\“ por el path correspondiente al Oracle Home del Gateway. Los datos resaltados en rojo fueron incluidos en el archivo al utilizar el asistente de configuración de red al momento de instalar el Gateway. El ejecutable del Gateway de ODBC es “dg4odbc



# listener.ora Network Configuration File: 
C:\OracleGW\product\12.2.0\tghome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = migration.company.com)(PORT = 1529))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1529))
    )
  )

SID_LIST_LISTENER=
   (SID_LIST=
      (SID_DESC= 
         (SID_NAME=SQLMIG)
         (ORACLE_HOME=C:\OracleGW\product\12.2.0\tghome_1\)
         (PROGRAM=dg4odbc)
      )
   )	
	

2) A continuación, se debe reiniciar el Listener y consultar el status del mismo, donde deberíamos de ver el servicio “SQLMIG“ disponible, aunque con status “UNKNOWN“:



C:\ >lsnrctl status

LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 28-JUN-2019 13:37:19

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=migration.company.com)(PORT=1529)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
Start Date                28-JUN-2019 13:37:09
Uptime                    0 days 0 hr. 0 min. 9 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   C:\OracleGW\product\12.2.0\tghome_1\network\admin\listener.ora
Listener Log File         C:\OracleGW\diag\tnslsnr\srta-dev-sql1\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=migration)(PORT=1529)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1529ipc)))
Services Summary...
Service "SQLMIG" has 1 instance(s).
  Instance "SQLMIG", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully	
	

Configurar la base de datos

Solo resta configurar la base de datos para que se comunique con el Gateway de Oracle mediante el uso de Oracle Net, en forma similar a como lo haría con otra base de datos Oracle.

Todos los pasos de configuración que describen a continuación deben realizarse en el Oracle Home de la base de datos Oracle, no del Gateway, independientemente de si ambos productos se encuentran instalados en el mismo servidor o en distintos servidores.

Configurar el archivo TNSNAMES

Es necesario agregar un descriptor de conexión en el archivo “tnsnames.ora“ ubicado en “$ORACLE_HOME/network/admin/“ correspondiente al Oracle Home de la base de datos Oracle donde estableceremos la conexión a la fuente de datos no Oracle. No es posible utilizar el asistente de Oracle Net para configurar esta conexión, por lo que debe hacerse en forma manual.



# tnsnames.ora Network Configuration File: 
C:\app\product\11.2.0\dbhome_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

SQLMIG=
   (DESCRIPTION=
      (ADDRESS=
         (PROTOCOL = TCP)
         (HOST = migration.company.com)
         (PORT = 1529)
      )
      (CONNECT_DATA=
         (SID = SQLMIG))
      (HS=OK))
	
  • SQLMIG“ es el nombre de conexión que utilizaremos para crear posteriormente el DBLINK, el cual no tiene por qué ser igual al nombre de Instancia ni al nombre del DSN de ODBC.
  • Los datos resaltados en VERDE son los datos del Listener configurado durante la instalación del Gateway.
  • El SID "SQLMIG“ es el identificador elegido como nombre de instancia al configurar el Gateway, definido al crear el archivo“initSQLMIG.ora“.
  • La clave“HS=OK“ indica que esta conexión no es una conexión estándar a una base de datos Oracle sino que la misma debe hacerse utilizando la funcionalidad de servicios heterogéneos (Heterogenous Services).

Podemos comprobar la correcta configuración del archivo“tnsnames.ora“ejecutando el comando TNSPING en el Oracle Home de la base de datos Oracle:



C:\app\product\11.2.0\dbhome_2\BIN>tnsping SQLMIG

TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 28-JUN-2019 13:46:08

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

Used parameter files:
C:\app\product\11.2.0\dbhome_2\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS= (PROTOCOL = TCP) (HOST = migration.company.com) 
(PORT = 1529)) (CONNECT_DATA= (SID = SQLMIG)) (HS=OK))
OK (0 msec)
	
  • SQLMIG“ es el nombre de conexión definido en el archivo“tnsnames.ora“que deseamos probar.
  • Los datos resaltados en VERDE son los datos del Listener configurado durante la instalación del Gateway.
  • El SID “SQLMIG“es el identificador elegido como nombre de instancia al configurar el Gateway, definido al crear el archivo“initSQLMIG.ora“.
  • El resultado La clave“OK (0 msec)“ indica que el utilitario pudo contactar al Listener con los datos configurados con una demora de 0 milisegundos, la cual puede variar si el Gateway se encuentra instalado en el mismo servidor o en otro equipo.

Crear un Database Link

El último paso es crear y probar un DBLINK en la base de datos Oracle para poder conectarse a la fuente de datos no Oracle.

La conexión entre la base de datos Oracle y el Gateway es establecida la primera vez que el DBLINK es utilizado por una sesión en la base de datos Oracle, y se mantiene hasta que la sesión finalice. Si otro usuario o sesión desea conectarse a la misma fuente de datos externa, otra conexión es establecida.

Para crear el DBLINK, se debe ejecutar la siguiente sentencia:



CREATE PUBLIC DATABASE LINK SQLSRVR
CONNECT TO "SQLServerUserName" IDENTIFIED BY "SQLServerPassword" 
USING 'SQLMIG';	
	
  • SQLMIG“es el nombre de conexión definido en el archivo“tnsnames.ora“que deseamos utilizar.
  • Los datos resaltados en VERDE son el usuario y la contraseña requeridos para conectarse a la fuente de datos no Oracle. Si fue configurado en la conexión ODBC podría no ser necesario incluir toda la cláusula.
  • El nombre“SQLSRVR“es el nombre elegido para el DBLINK. Puede ser cualquier nombre válido, inclusive podría llamarse“SQLMIG“ al igual que el nombre de conexión, el nombre de instancia y el nombre de DSN de ODBC.

EL paso final es probar la conexión completa, ejecutando una sencilla sentencia SELECT desde la base de datos Oracle utilizando el DBLINK creado en el punto anterior:



SELECT * FROM dual@SQLSRVR;
D
-
X	
	

Podemos ver que al consultar el contenido de la tabla“dual“en el DBLINK“SQLSRVR“creado anteriormente obtenemos el resultado esperado. Si bien las bases de datos SQL Server no poseen una tabla“dual“como si lo hacen las bases de datos Oracle, el Gateway se encarga de simular la existencia de la misma para mantener la compatibilidad con Oracle.


Lisandro Fernigrini es un desarrollador senior de software, con más de 15 años de experiencia en tecnologías de base de datos Oracle. Se involucró con la base de datos Oracle como DBA en Kit Ingenieria Electrónica, luego trabajó como desarrollador PL / SQL y luego como arquitecto de base de datos en Neoris Argentina por más de 12 años. Actualmente trabajando como desarrollador de base de datos en Kapsch TraficCom Argentina. Como miembro de AROUG (Argentina Oracle User Group) participó como orador en giras de OTN y ODC en América Latina desde 2013, también tiene una participación activa en la comunidad de Oracle Groundbreakers. Tweeter: @lfernigrini

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.