Conexión entre bases de datos Oracle y PostgreSQL

Las interconexiones de servidores de bases de datos son operaciones que pueden ser muy útiles en diferentes contextos. Básicamente, se trata de acceder a datos que no están almacenados en nuestra base de datos, pudiendo combinarlos con los que ya tenemos.

Y para ello vamos a realizar los siguientes escenarios:

Un enlace entre dos servidores de bases de datos ORACLE

Definición de las dos máquinas Oracle:

  • Oracle1: 192.168.1.139
  • Oracle2: 192.168.1.134

Comprobar el listener de Oracle1

Verificamos el contenido del fichero /opt/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora:

Añadir resolución de nombres en Oracle2

En el fichero /opt/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora de Oracle2, añadir:

Crear nuevo usuario en Oracle2 con privilegios para crear enlaces públicos

Error: ORA-65096: invalid common user or role name

Solución temporal en la sesión: 

Crear el usuario de prueba con los permisos necesarios para iniciar sesión y crear tablas en Oracle1

Iniciar sesión con el nuevo usuario y crear la tabla y registros de prueba

Crear la tabla e ingresar registros:

Crear el enlace público en Oracle2 para conectar a Oracle1, con el usuario link:

Creamos el enlace:

Ahora ya podemos probar desde el mismo usuario link hacer una consulta a la table aeropuertos del Oracle1:

Ahora creamos la tabla vuelos e ingresamos algunos registros para probar hacer un join con la tabla remota y la tabla local:

Ingresamos algunos registros:

Join de la tabla vuelos (local) con la tabla aeropuertos (remota)

 

Un enlace entre dos servidores de bases de datos PostgreSQL

Definición de ambas máquinas:

  • OnepostgreSQL: 192.168.1.135
  • TwopostgreSQL: 192.168.1.138

Pasos:

Instalación de postgreSQL en Debian Stretch

Importante: que instalemos el paquete postgresql-contrib ya que es el que nos permitirá hacer el enlace entre los diferentes gestores de bases de datos.

El siguiente paso es habilitar la conexión remota desde ambos servidores de postgreSQL:

Cambiando la siguiente linea del fichero /etc/postgresql/9.6/main/postgresql.conf:

Por:

También tendremos que habilitar la autenticación desde ambas máquinas de manera remota, indicando en este caso el direccionamiento de red, en el fichero /etc/postgresql/9.6/main/pg_hba.conf:

Una vez realizados este par de cambios reiniciar el servicio para que se detecten:

 

Crear en OnepostgreSQL un usuario y una base de datos

 

Poblar la base de datos test con tablas y registros

Primero conectamos con el usuario charlie:

Y ahora creamos una tabla de ejemplo:

Insertamos registros:

 

Crear en TwopostgreSQL un usuario y una base de datos

Poblar la base de datos link con tablas y registros

Primero conectamos con el usuario link:

Y ahora creamos una tabla de ejemplo:

Insertamos registros:

Habilitar la extensión para realizar el enlace entre las bases de datos

Nota: obviamente para que el enlace funcione tendrá que haber conectividad entre las máquinas.

Comprobación del enlace

Error: Nos devolvería el error de que necesita que le pasemos una lista de definición para las columnas.

Solución:

Comprobación del enlace de manera remota con join

Nos vamos a conectar a TwopostgreSQL y vamos a realizar una consulta a la base de datos test de la máquina OnepostgreSQL, haciendo un join con la tabla aeropuertos y vuelos:

 

Un enlace entre un servidor ORACLE y otro PostgreSQL

Instalar PgSQL ODBC driver en Oracle

Comprobar ODBC

Por defecto la siguiente instrucción, debe mostrar un resultado similar a este:

Contenido del fichero /etc/odbcinst.ini:

Añadir a /etc/odbc.ini:

Nota: Si queremos permitir también la escritura en el enlace,  cambiar el valor de ReadOnly 0.

Comprobar que detecta los parámetros indicados:

Ahora probamos la conexión ODBC con la utilidad isql:

Configurar los “heterogeneous service”

Crear el fichero ‘$ORACLE_HOME/hs/admin/initPSQL.ora’ con el siguiente contenido:

Añadir el siguiente código al listener.ora :

Añadir también la entrada en tnsname.ora

Reiniciar listener

 

Error: TNS-01201

Solución:

Este error en mi caso fue porque la variable $ORACLE_HOME no estaba apuntado bien a la dirección exacta del binario dg4odbc

Colocar la ruta absoluta en el fichero listener.ora:

Cambiar:

A:

Crear el enlace a la base de datos

Error: ORA-28545

Solución: como en el error anterior, el problema deriva de la ruta del home de oracle, de todas formas existen más errores que provocan este error.

Error: ORA-01017

Solución:

En el fichero /etc/postgresql/9.6/main/pg_hba.conf del servidor postgreSQL, añadir el direccionamiento de red:

Y ahora ya, probamos de nuevo:

Si quisiéramos la conexión a la inversa, conectar a oracle desde postgresql, sería utilizando un sotfware de tercero:

Accessing Oracle from PostgreSQL

 

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *