You are on page 1of 5

2012

Integregacion Oracle – Postgres Databases

Paolo Jalón e-technology

Integracion Oracle - Postgres
Objetivo
El objetivo principal de esta guía es lograr la lectura de tablas y vistas de una base de datos Postgres desde Oracle, en consecuencia tendremos la puerta abierta para realizar diversas gestiones desde Oracle, como, procedimientos, vistas y funciones.

Escenario de ejemplo
Realizaremos un pequeño taller, tenemos los siguientes elementos:     Nuestro servidor de base de postgres 8.3 instalado en un equipo Windows xp (32 bits), cuya dirección ip es la 192.168.0.28 En Postgres tenemos una base llamada openbravopos. Nuestro servidor Oracle 11.2.0.1 64bits Enterprise Edition, instalado sobre un equipo Linux Centos 6.2 64 bits. En Oracle tenemos un esquema de usuario llamado mybweb

Requisitos
 Habilitar permisos desde consola de administración de Postgres en Windows para que la ip del equipo centos lea la base openbarvopos. Para ello seleccione la base, dirigirse a: Herramientas>Configuracion Servidor>pg_hba.conf.  Driver odbc para postgres sobre equipo Centos. Si no cuenta con este driver, descargarlo e instalarlo desde la opción añadir o quitar programas de Centos: Integracion Oracle - Postgres; Paolo Jalón; paolo.jalon@e-technology.com.ec

Configurando el driver
En el servidor Centos, abra /etc/odbcinst.ini / y verifique que el driver se encuentre establecido de la siguiente manera:

Creando el odbc
Desde el servidor Centos, configure /etc/odbc.ini con la Base de Datos que tiene que leer, el nombre del servicio tiene que ir entre corchetes. [ODBC Data Sources] postg = PostgreSQL ODBC Driver [postg] Driver = /usr/lib64/psqlodbc.so # DSN = postg Trace = No Database = openbravopos Servername = 192.168.0.28 UserName = openbravopos Password = openbravopos Port = 5432 Protocol = 7.0 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No QuotedId = Yes

Probar con el comando isql –v nombre driver; en este caso isql –v postg Nos deberá mostrara conectado!!

Enlace odbc a Oracle
En entorno Grafico de usuario oracle Nos dirigimos a: /u01/app/oracle/product/11.2.0/dbhome_1/hs/admin

Integracion Oracle - Postgres; Paolo Jalón; paolo.jalon@e-technology.com.ec

En dicho directorio encontraremos un archivo llamado initdg4odbc.ora, lo copiamos y luego lo pegamos en el mismo directorio pero Lo renombramos a initpostg.ora. Sobre initpostg.ora ingrese las siguientes líneas: HS_FDS_CONNECT_INFO = postg HS_FDS_TRACE_LEVEL = off HS_FDS_TRACE_FILE_NAME = postg.trc HS_AUTOREGISTER = TRUE HS_FDS_SHAREABLE_NAME = /usr/lib64/psqlodbc.so set ODBCINI = /etc/odbc.ini set client_encoding = UTF8 A initpostg.ora establecer a usuario oracle y grupo oinstall como propietario del mismo. Abra el archivo listener.ora e ingrese lo resaltado en rojo # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME=postg) (PROGRAM=dg4odbc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = svrtest)(PORT = 1521)) ) )

ADR_BASE_LISTENER = /u01/app/oracle Abra el archivo tsname.ora e ingrese lo resaltado con rojo # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. PROD = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = svrtest)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prod) ) ) postg = (DESCRIPTION = (ADDRESS =(PROTOCOL = tcp)(HOST = svrtest)(PORT = 1521)) (CONNECT_DATA=(SID= postg)) (HS=OK) )

Integracion Oracle - Postgres; Paolo Jalón; paolo.jalon@e-technology.com.ec

Para probar nuestro odbc con oracle, detenemos el listener, luego lo iniciamos de nuevo digitando desde terminal de usuario root [oracle@svrtest ~]$ lsnrctl start Tendremos que observar que el sid postg haya sido iniciado satisfactoriamente. Si usted ha seguido cuidadosamente los pasos de esta debería iniciar sin novedades , tal y como se muestra en la imagen de abajo. Hasta pronto!

Desde el esquema de datos Oracle añadir el siguiente dblink Integracion Oracle - Postgres; Paolo Jalón; paolo.jalon@e-technology.com.ec
create public database link postgs connect to "openbravopos" identified by "openbravopos" using 'POSTG';

Probar el enlace teniendo en cuenta que los nombres de tabla deben ir entre comillas, ejemplo:
select distinct 1 codempresa, trunc(rec."datenew") as fecha_ingreso, round(sum(nvl(txl."base",0)+nvl(txl."amount",0) ),4) as "CAJA", round(sum(nvl(txl."base",0)),4) as "CNT_VENTAS_GENERAL", round(sum( nvl(txl."amount",0)),4) as "CNT_IVA_COBRADO" from "tickets"@postgs tk inner join "receipts"@postgs rec on tk."id" = rec."id" left outer join "taxlines"@postgs txl on txl."receipt"= rec."id" where trunc(rec."datenew") between to_date(&FECHAI,'dd/mm/yyyy') and to_date(&FECHAF,'dd/mm/yyyy') group by trunc(rec."datenew") order by trunc(rec."datenew") ASC;