PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Modi per accedere al database Oracle in PostgreSQL

Oggi, le organizzazioni archiviano informazioni (dati) in diversi sistemi di database. Ogni sistema di database dispone di un insieme di applicazioni che vengono eseguite su di esso. Questi dati sono solo bit e byte su un file system e solo un database può trasformare bit e byte di dati in informazioni aziendali. L'integrazione e il consolidamento di tali informazioni (dati) in un sistema di database è spesso difficile. Perché molte delle applicazioni eseguite su un database potrebbero non avere un'applicazione equivalente che viene eseguita su un altro. Per consolidare le informazioni in un sistema di database, abbiamo bisogno di una connessione database eterogenea. In questo post, mostrerò come collegare PostgreSQL a uno dei database eterogenei Oracle utilizzando metodi diversi.

Di seguito sono riportati alcuni metodi per effettuare la connessione al database Oracle in PostgreSQL.

  • Utilizzo del driver ODBC
  • Utilizzo di Data Wrapper esterni
  • Utilizzo del driver Oracle Call Interface (OCI)
Software utilizzati nella demo (collegamenti per il download inclusi) – CentOS 7 64 bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, driver Oracle Instant Client 11.x e Oracle_FDWUtilizzo di ODBC Autista

Open DataBase Connectivity (ODBC) è un'API software standard per l'utilizzo di DBMS. Il driver ODBC/ODBC Data source (API) è una libreria che consente alle applicazioni di connettersi a qualsiasi database per il quale è disponibile un driver ODBC. È un livello intermedio che traduce le query di dati dell'applicazione in comandi che il DBMS comprende. Per utilizzare questo metodo, sono necessari pacchetti di driver open source unixODBC e Oracle ODBC (Basic/ODBC/Devel). Insieme a un modulo in PostgreSQL in grado di comunicare con DSN creato utilizzando unixODBC e driver Oracle ODBC. Alcuni anni fa CyberTec ha rilasciato un modulo ODBC-Link, al momento è obsoleto, tuttavia ha un'implementazione in stile dblink per PostgreSQL per connettersi a qualsiasi altro database compatibile con ODBC. Possiamo usare questo modulo per la connettività di base a Oracle. Vediamo.

Installa unixODBC
tar -xvf unixODBC-2.3.4.tar.gz
cd unixODBC-2.3.4/
./configure --sysconfdir=/etc
make
make install

Posizione dei file binari/librerie/di configurazione:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Installa il driver Oracle ODBC

rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Posizione binaria/librerie:/usr/lib/oracle/11.2/client64

Installa ODBC-Link
tar -zxvf ODBC-Link-1.0.4.tar.gz
cd ODBC-Link-1.0.4
export PATH=/opt/PostgreSQL/9.5/bin:$PATH
which pg_config 
make USE_PGXS=1
make USE_PGXS=1 install

Librerie e posizione dei file SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib

L'installazione creerà un file SQL del modulo ODBC-Link nella directory $PGHOME/contrib. Carica il file SQL, che creerà uno schema chiamato "odbclink" con le funzioni necessarie al suo interno.

psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql

A questo punto, abbiamo installato il driver unixODBC, il driver Oracle ODBC e il modulo ODBC-Link per PostgreSQL. Come primo passo, dobbiamo creare un DSN utilizzando Oracle ODBC.

Modifica il file /etc/odbcinst.ini e passa la definizione dei driver

## Driver for Oracle
[MyOracle]
Description     =ODBC for oracle
Driver          =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
UsageCount=1
FileUsage = 1
Driver Logging = 7

Modifica il file /etc/odbc.ini e crea il DSN con il driver menzionato in /etd/odbcinst.ini

## Host: pg.raghav-node1.com, PORT: 1521
## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser
## ODBC Data source: Ora

[Ora]
Descrizione =database myoracledb
Driver =MyOracle
Trace =sì
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
UserID =mmruser
Password =mmruser
Porta =1521

Dopo aver creato il DSN, caricare tutte le librerie di driver ODBC Oracle e Unix impostando le variabili di ambiente e testare la connettività utilizzando lo strumento della riga di comando del sistema operativo "dltest" e "iSQL"

[[email protected] ~]# export ORACLE_HOME=/usr/lib/oracle/11.2/client64
[[email protected] ~]# export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib
[[email protected] ~]# export ODBCINI=/etc/odbc.ini
[[email protected] ~]# export ODBCSYSINI=/etc/
[[email protected] ~]# export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G
[[email protected] ~]# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
[[email protected] ~]# isql ora -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

Ora, imposta le stesse variabili di ambiente per l'utente postgres per caricare le librerie e riavvia il cluster PostgreSQL per avere effetto. Connettiti a PostgreSQL e chiama le funzioni odbclink per connetterti al database Oracle.

[[email protected] ~]#su - postgres
[[email protected] ~]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64
[[email protected] ~]$ export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib
[[email protected] ~]$ export ODBCINI=/etc/odbc.ini
[[email protected] ~]$ export ODBCSYSINI=/etc/
[[email protected] ~]$ export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G
[[email protected] ~]$ dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
[[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf
[[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start
[[email protected] ~]$ psql
psql.bin (9.5.2)
Type "help" for help.

postgres=# select odbclink.connect('DSN=Ora');
connect
———
1
(1 riga)

Fresco vero…!!!. Per il recupero e la manipolazione dei dati fare riferimento al file README ODBC-Link.

Utilizzo di Data Wrapper esterni

Un'estensione SQL/MED (SQL Management of External Data) dello standard SQL consente di gestire i dati esterni archiviati all'esterno del database. SQL/MED fornisce due componenti Wrapper di dati esterni e Datalink. PostgreSQL ha introdotto Foreign Data Wrapper (FDW) nella versione 9.1 con supporto di sola lettura e nella versione 9.3 con supporto in scrittura di questo standard SQL. Oggi, l'ultima versione ha una serie di funzionalità e molte varietà di FDW disponibili per accedere a diversi database SQL remoti.

Oracle_fdw fornisce un modo semplice ed efficiente per accedere a Oracle Database. IMO, è uno dei metodi più interessanti per accedere al database remoto. Per compilare Oracle_FDW con PostgreSQL 9.5, abbiamo bisogno delle librerie Oracle Instant Client e pg_config impostato in PATH. Possiamo utilizzare le stesse librerie Oracle Instant Client utilizzate per ODBC-Link. Vediamo come funziona.

Innanzitutto, imposta le variabili di ambiente con le librerie OIC e pg_config

export PATH=/opt/PostgreSQL/9.5/bin:$PATH
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib

Decomprimi il modulo oracle_fdw e compilalo con PostgreSQL 9.5

unzip oracle_fdw-1.4.0.zip
cd oracle_fdw-1.4.0/
make 
make install

Ora passa come utente "postgres" e riavvia il cluster caricando le librerie Oracle Instant Client richieste per l'estensione oracle_fdw e crea l'estensione all'interno del database.

[[email protected] 9.5]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
[[email protected] 9.5]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH
[[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf
[[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start
[[email protected] 9.5]$ psql
Password:
psql.bin (9.5.2)
Type "help" for help.

postgres=# crea estensione oracle_fdw;
CREA ESTENSIONE

Ora puoi accedere al database Oracle.

postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//pg.raghav-node1.com/ORA11G');
CREATE SERVER
postgres=# GRANT USAGE ON FOREIGN SERVER oradb TO postgres;
GRANT
postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'scott', password 'tiger');
CREATE USER MAPPING
postgres=#
postgres=# CREATE FOREIGN TABLE oratab (ecode integer,name char(30)) SERVER oradb OPTIONS(schema 'SCOTT',table 'EMP');
CREATE FOREIGN TABLE
postgres=# select * from oratab limit 3;
 ecode |              name
-------+--------------------------------
  7369 | SMITH
  7499 | ALLEN
  7521 | WARD
(3 rows)


Utilizzo dei driver Oracle Call Interface (OCI)

Oracle Call Interface (OCI) un driver di tipo 2 disponibile gratuitamente sul sito Oracle che consente al client di connettersi al database Oracle. EDB Postgres Advanced Server (chiamato anche EPAS), un prodotto proprietario ha un modulo di collegamento al database basato su OCI integrato chiamato dblink_ora, che si connette al database Oracle utilizzando i driver Oracle OCI. Tutto quello che devi fare per utilizzare il modulo dblink_ora, installare EPAS (non coprendo l'installazione) e dire a EPAS dove può trovare le librerie di driver Oracle OCI. Possiamo utilizzare lo stesso Oracle Instant Client specificando la posizione delle sue librerie nella variabile di ambiente LD_LIBRARY_PATH e per avere effetto riavviare il cluster EPAS.

Innanzitutto, passa come utente "enterprisedb", carica le librerie e riavvia il cluster. Questo è tutto, siamo a posto per accedere al database Oracle.

[[email protected] ~]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
[[email protected] bin]$ /opt/PostgresPlus/9.5AS/bin/pg_ctl -D /opt/PostgresPlus/9.5AS/data/ restart
[[email protected] bin]$ psql
psql.bin (9.5.0.5)
Type "help" for help.

edb=# select dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
——————–
OK
(1 riga)

Nota:EPAS si connette al database Oracle utilizzando la libreria Oracle Instant Client "libclntsh.so". Se non trovi la libreria nella posizione della libreria client Oracle, crea il collegamento simbolico con libclntsh.so che punta a libclntsh.so.version.number. Fare riferimento alla documentazione.

Nell'esempio, dblink_ora_connect stabilisce una connessione a un database Oracle con le informazioni di connessione specificate dall'utente. Successivamente utilizzando il nome del collegamento ("oraconn" nel mio caso) possiamo eseguire operazioni come SELECT, INSERT, DELETE, UPDATE © usando le funzioni dblink_ora*. Puoi fare riferimento a tutte le funzioni dalla documentazione di EnterpriseDB qui.

Tutti i metodi di cui sopra saranno molto utili se stai lavorando su progetti di migrazione. Spero sia utile. Grazie