Crear un dblink en Oracle que se conecte a PostgreSQL

Hola a todos, hoy queríamos compartir con vosotros una forma muy sencilla de conectar un servidor Oracle con un servidor PostgreSQL para leer datos. En este caso de una tabla en concreto. Para ello, vamos a crear un dblink entre las dos instancias mediante una entrada de ODBC, para ello, necesitamos tener instalado el componente Oracle Database Gateway for ODBC en nuestro entorno Oracle donde crearemos el dblink.

Nuestro entorno de pruebas serán dos máquinas Linux con las siguientes direcciones:

                Oracle DB: 10.15.201.22

                Postgres DB: 10.15.201.23

¿Cómo crear un dblink que se conecte a PostgreSQL?

Crear un dblink en Oracle que se conecte a PostgreSQL

Para crear un dblink, los pasos serán los siguientes:

1. En el entorno PostgreSQL creamos el usuario que utilizaremos en el dblink y los permisos sobre las tablas que queremos consultar desde Oracle.

$ psql
postgres# create user oracledblink encrypted password 'test1';
postgres# grant usage on schema "testpost1" to oracledblink;
postgres# grant select on "testpost1".table1 to oracledblink;
 

2. Para poder acceder desde Oracle, tenemos que añadir una entrada en el fichero pg_hba si no la tenemos para esa IP:

$ vi /var/lib/pgsql/13/data/pg_hba.conf
host postgres oracledblink 10.15.201.22/32 md5

En este caso solo permitimos el acceso a la IP de Oracle. Para que se vean reflejados los cambios en nuestra instancia Postgres hacemos un reload, esto evita tener que reiniciar el servicio:

$ psql
postgres# SELECT pg_reload_conf();

3. En el entorno Oracle, necesitamos tener instalado el driver de PostgreSQl a nivel de sistema operativo, para ello lanzamos:

$ yum install postgresql-odbc

4. Una vez instalado, configuramos el fichero odbcinst.ini para apuntar a nuestro servidor postgres:

vi /etc/odbcinst.ini
# Example driver definitions
# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[POSTGRES1]
Description = POSTGRES1
Driver      = /usr/lib64/liboplodbcS.so.2.0.0
ServerName  = 10.15.201.23
Username    = oracledblink
Password    = test1
Port        = 5432
Database    = postgres
Setup       = /usr/lib64/libodbcpsqlS.so
Driver64    = /usr/lib64/psqlodbcw.so
Setup64     = /usr/lib64/libodbcpsqlS.so
FileUsage   = 1

Ponemos los datos que necesitemos y llamamos por ejemplo POSTGRES1 a la entrada de ODBC.

5. Ahora tenemos que crear un fichero initPOSTGRES1.ora en la ruta $ORACLE_HOME/hs/admin para poder utilizar el ODBC anterior:

$ vi $ORACLE_HOME/hs/admin/initPOSTGRES1.ora
# HS init parameters
#
HS_FDS_CONNECT_INFO = POSTGRES1
HS_FDS_TRACE_LEVEL = 4
HS_FDS_SHAREABLE_NAME = /usr/lib64/psqlodbcw.so
HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P15
HS_FDS_TRACE_LEVEL=ON
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbcinst.ini

6. Añadimos una entrada al fichero tnsnames.ora, la IP a la que apuntamos es la del servidor Oracle:

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

POSTGRES1 =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.15.201.22)(PORT = 1521))
  (CONNECT_DATA =
  (SID = POSTGRES1)
  )
 (HS = OK)
 )

7. Añadimos una entrada al fichero listener.ora:

$ vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =
   (SID_LIST=
      (SID_DESC=
      (SID_NAME=POSTGRES1)
      (ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1)
      (PROGRAM=dg4odbc)
      )
   )

8. Una vez añadida la entrada, Recargamos el listener para que actualice los datos nuevos:

$ lsnrctl reload

Creación definitiva del dblink

9. Después de esto ya podemos crear el dblink de la siguiente forma:

SQL> CREATE DATABASE LINK POSTGRES1
CONNECT TO "oracledblink"
IDENTIFIED BY test1
USING 'POSTGRES1';

Una vez terminado este paso, ya podremos consultar la tabla de PostgreSQL directamente desde Oracle:

SQL> select * from "testpost1"."table1"@POSTGRES1;

Esperamos que la entrada os sea de utilidad y que simplifique la conexión entre vuestros gestores de datos. Si aún así has tenido problemas o prefiere que lo hagamos nosotros, échale un vistazo a nuestro servicio de consultoria Oracle y PostgreSQL y contáctanos sin compromiso en nuestra página de contacto. Si no quieres perderte ninguno de nuestros consejos, suscríbete a nuestra newsletter. Con un solo email al mes estarás informado de nuestras publicaciones.

Muchas gracias.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Más información en: https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm