Cómo conectar una base Oracle con otra PostgreSQL
En este artículo te explico cómo crear un dblink en Oracle que apunte a PostgreSQL y que funcione bien :)
Search for a command to run...
En este artículo te explico cómo crear un dblink en Oracle que apunte a PostgreSQL y que funcione bien :)
No comments yet. Be the first to comment.
A partir de la versión 26.3 del Autoupgrade, esta herramienta nos brinda un comando mágico que descarga la última versión de todo esto: AHF (Automatic Health Framework) CVU (Cluster Verification Uti
Aquí explico como relevar correctamente las versiones de los clientes oracle que se conectan a una base de datos.
El objetivo es migrar una política FGA desde una base origen a una base destino Relevar las políticas habilitadas en la base origen con la siguiente consulta: SELECT * FROM DBA_AUDIT_POLICIES WHERE ENABLED='YES' Crear las políticas en la base des...
Entorno: RAC de 2 nodos con Oracle Linux 8 y un CRS versión 12.2 Primero descargamos el instalador del GRID con el usuario oracle: $ cd /u01/soft/gi_19c $ wget --http-user=xxxx@xxxx --http-password=xxxx --no-check-certificate --output-document=V98206...
Existen varias arquitecturas para resolver este desafío, en mi caso yo utilicé un servidor intermedio y dedicado para el Gateway:

El primer paso es instalar el driver ODBC. En mi caso utilicé un servidor nuevo con el sistema operativo Oracle Linux 8 con conexión a internet:
yum install unixODBC*
Luego debemos instalar el Oracle Database Gateway for ODBC, el mismo se descarga desde aquí: https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
Mientras se descarga el archivo, preparamos el servidor para la instalación del Gateway:
yum install oracle-database-preinstall-19c
mkdir /u01/app/oracle/instalador
Una vez descargado el instalador del gateway (LINUX.X64_193000_gateways.zip), lo copiamos al directorio /u01/app/oracle/instalador y seguimos estos pasos:
cd /u01/app/oracle/instalador
unzip LINUX.X64_193000_gateways.zip
cd gateways
export CV_ASSUME_DISTID=OL8
./runInstaller















Ahora comenzamos a configurar el Gateway:
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/tghome_1
cd $ORACLE_HOME/hs/admin
vi $ORACLE_HOME/hs/admin/init<SID>.ora
#####################################################################################################
vi $ORACLE_HOME/hs/admin/initpostgresUAT.ora
# 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 = postgresUAT <========= AQUI PUEDES USAR EL VALOR QUE DESEES. ESTE SERÁ TU SID
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
Ahora agregamos el SID elegido al listener:
cd $ORACLE_HOME/network/admin
cp -p listener.ora listener.ora.bkp
vi listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME= postgresUAT) <== ESTE VALOR DEBE COINCIDIR CON EL SID ELEGIDO EN EL PUNTO ANTERIOR
(ORACLE_HOME=/u01/app/oracle/product/19.0.0/tghome_1)
(ENVS="LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/19.0.0/tghome_1/lib")
(PROGRAM=dg4odbc)
)
)
Reiniciamos el listener para que tome el cambio anterior:
$ORACLE_HOME/bin/lsnrctl stop
$ORACLE_HOME/bin/lsnrctl start
Luego instalamos el driver PostgreSQL:
yum install postgresql*odbc
vi /etc/odbc.ini
[postgresUAT] <============= ESTE VALOR DEBE COINCIDIR CON EL SID ELEGIDO EN LOS PUNTOS ANTERIORES
Driver = PostgreSQL
Description = PostgreSQL ODBC Driver
Database = <database_name_postgres>
Servername = <hostname_postgres>
Username = <usuario_postgres>
Password = <contraseña_usuario_postgres>
Port = <puerto_postgres>
BOOLSASCHAR=No
UseDeclareFetch = 1
CommLog = /tmp/pgodbclink.log
Debug = 1
IMPORTANTE: El valor de la variable Driver, debe coincidir con el valor que aparece entre corchetes en el archivo /etc/odbcinst.ini
Luego probamos la conectividad desde el Gateway hacia la base PostgreSQL:
isql -v postgresUAT
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Una vez que verificamos el correcto funcionamiento de la conexión, nos dirigimos al servidor de base de datos Oracle y allí agregamos al archivo tnsnames.ora la cadena de conexión que utilizará el dblink:
GATEWAY_POSTGRES=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=<hostname_gateway>) <====== ESPECIFICAR EL NOMBRE DEL SERVIDOR DEL GATEWAY
(PORT=1521)
)
(CONNECT_DATA=
(SID= postgresUAT)) <== ESTE VALOR DEBE COINCIDIR CON EL SID ELEGIDO EN LOS PUNTOS ANTERIORES
(HS=OK)
)
Por último nos conectamos a la base Oracle, creamos el dblink y lo probamos:
CREATE PUBLIC DATABASE LINK TEST_POSTGRES
CONNECT TO <usuario_postgres>
IDENTIFIED BY <contraseña_usuario_postgres>
USING 'GATEWAY_POSTGRES';
SELECT * FROM <tabla>@TEST_POSTGRES;
¡Esto es todo!
Hasta el próximo post 😀
Saludos desde Buenos Aires, Argentina