PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Möglichkeiten für den Zugriff auf Oracle Database in PostgreSQL

Heutzutage speichern Organisationen Informationen (Daten) in verschiedenen Datenbanksystemen. Jedes Datenbanksystem verfügt über eine Reihe von Anwendungen, die dafür ausgeführt werden. Diese Daten sind nur Bits und Bytes in einem Dateisystem – und nur eine Datenbank kann die Bits und Bytes von Daten in Geschäftsinformationen umwandeln. Die Integration und Konsolidierung solcher Informationen(Daten) in ein Datenbanksystem ist oft schwierig. Weil viele der Anwendungen, die für eine Datenbank ausgeführt werden, möglicherweise keine entsprechende Anwendung haben, die für eine andere ausgeführt wird. Um die Informationen in einem Datenbanksystem zu konsolidieren, benötigen wir eine heterogene Datenbankanbindung. In diesem Beitrag zeige ich Ihnen, wie Sie PostgreSQL mit verschiedenen Methoden mit einer der heterogenen Datenbanken von Oracle verbinden können.

Im Folgenden finden Sie einige Methoden zum Herstellen einer Verbindung zur Oracle-Datenbank in PostgreSQL.

  • ODBC-Treiber verwenden
  • Verwenden fremder DataWrapper
  • Verwendung des Oracle Call Interface(OCI)-Treibers
In der Demo verwendete Software (inklusive Download-Links) – CentOS 7 64bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, Oracle Instant Client 11.x Drivers &Oracle_FDWUsing ODBC Fahrer

Open DataBase Connectivity (ODBC) ist eine Standard-Software-API für die Verwendung von DBMS. Der ODBC-Treiber/die ODBC-Datenquelle (API) ist eine Bibliothek, die es Anwendungen ermöglicht, sich mit jeder Datenbank zu verbinden, für die ein ODBC-Treiber verfügbar ist. Es ist eine mittlere Schicht, die die Datenabfragen der Anwendung in Befehle übersetzt, die das DBMS versteht. Um diese Methode zu verwenden, sind Open-Source-UnixODBC- und Oracle-ODBC-Treiberpakete (Basic/ODBC/Devel) erforderlich. Zusammen mit einem Modul in PostgreSQL, das mit DSN kommunizieren kann, das mit UnixODBC und Oracle ODBC-Treiber erstellt wurde. Vor einigen Jahren hat CyberTec ein Modul ODBC-Link herausgebracht, derzeit ist es veraltet, aber es hat eine dblink-artige Implementierung für PostgreSQL, um sich mit jeder anderen ODBC-kompatiblen Datenbank zu verbinden. Wir können dieses Modul für die grundlegende Konnektivität zu Oracle verwenden. Mal sehen.

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

Speicherort der Binär-/Bibliotheken-/Konfigurationsdateien:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Installieren Sie den Oracle ODBC-Treiber

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

Speicherort der Binärdateien/Bibliotheken:/usr/lib/oracle/11.2/client64

ODBC-Link installieren
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

Speicherort der Bibliotheken und SQL-Dateien:/opt/PostgreSQL/9.5/share/postgresql/contrib

Die Installation erstellt eine ODBC-Link-Modul-SQL-Datei im Verzeichnis $PGHOME/contrib. Laden Sie die SQL-Datei, die ein Schema mit dem Namen „odbclink“ mit den erforderlichen Funktionen darin erstellt.

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

An dieser Stelle haben wir den unixODBC-Treiber, den Oracle-ODBC-Treiber und das ODBC-Link-Modul für PostgreSQL installiert. Als ersten Schritt müssen wir einen DSN mit Oracle ODBC erstellen.

Bearbeiten Sie die Datei /etc/odbcinst.ini und übergeben Sie die Treiberdefinition

## 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

Bearbeiten Sie die Datei /etc/odbc.ini und erstellen Sie den DSN mit dem in /etd/odbcinst.ini erwähnten Treiber

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

[Ora]
Description =myoracledb database
Driver =MyOracle
Trace =yes
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
Benutzer-ID =mmruser
Passwort =mmruser
Port =1521

Laden Sie nach dem Erstellen von DSN alle Oracle- und Unix-ODBC-Treiberbibliotheken, indem Sie Umgebungsvariablen festlegen, und testen Sie die Konnektivität mit dem OS-Befehlszeilentool „dltest“ und „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>

Legen Sie nun dieselben Umgebungsvariablen für den Postgres-Benutzer zum Laden der Bibliotheken fest und starten Sie den PostgreSQL-Cluster neu, damit sie wirksam werden. Stellen Sie eine Verbindung zu PostgreSQL her und rufen Sie odbclink-Funktionen auf, um eine Verbindung zur Oracle-Datenbank herzustellen.

[[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 row)

Cool richtig…!!!. Informationen zum Abrufen und Bearbeiten von Daten finden Sie in der ODBC-Link-README-Datei.

Verwenden fremder DataWrapper

Eine SQL/MED-Erweiterung (SQL Management of External Data) des SQL-Standards ermöglicht die Verwaltung externer Daten, die außerhalb der Datenbank gespeichert sind. SQL/MED bietet zwei Komponenten Foreign Data Wrapper und Datalink. PostgreSQL hat den Foreign Data Wrapper (FDW) in Version 9.1 mit Nur-Lese-Unterstützung und in Version 9.3 mit Schreibunterstützung dieses SQL-Standards eingeführt. Heute hat die neueste Version eine Reihe von Funktionen und viele Varianten von FDW, die für den Zugriff auf verschiedene entfernte SQL-Datenbanken verfügbar sind.

Oracle_fdw bietet eine einfache und effiziente Möglichkeit, auf Oracle Database zuzugreifen. IMO, es ist eine der coolsten Methoden, um auf die Remote-Datenbank zuzugreifen. Um Oracle_FDW mit PostgreSQL 9.5 zu kompilieren, benötigen wir Oracle Instant Client-Bibliotheken und pg_config, die in PATH festgelegt sind. Wir können dieselben Oracle Instant Client-Bibliotheken verwenden, die für ODBC-Link verwendet werden. Mal sehen, wie es funktioniert.

Setzen Sie zuerst Umgebungsvariablen mit OIC-Bibliotheken und 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

Entpacken Sie das oracle_fdw-Modul und kompilieren Sie es mit PostgreSQL 9.5

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

Wechseln Sie nun als „postgres“-Benutzer und starten Sie den Cluster neu, indem Sie die für die oracle_fdw-Erweiterung erforderlichen Oracle Instant Client-Bibliotheken laden und die Erweiterung in der Datenbank erstellen.

[[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=# Erweiterung erstellen oracle_fdw;
ERWEITERUNG ERSTELLEN

Jetzt können Sie auf die Oracle-Datenbank zugreifen.

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)


Verwenden von Oracle Call Interface (OCI)-Treibern

Oracle Call Interface (OCI) ist ein Typ-2-Treiber, der auf der Oracle-Website frei verfügbar ist und dem Client ermöglicht, eine Verbindung zur Oracle-Datenbank herzustellen. EDB Postgres Advanced Server (auch EPAS genannt), ein proprietäres Produkt, verfügt über ein integriertes OCI-basiertes Datenbankverbindungsmodul namens dblink_ora, das mithilfe von Oracle OCI-Treibern eine Verbindung zur Oracle-Datenbank herstellt. Alles, was Sie tun müssen, um das dblink_ora-Modul zu verwenden, EPAS zu installieren (nicht die Installation) und EPAS mitzuteilen, wo es Oracle OCI-Treiberbibliotheken finden kann. Wir können denselben Oracle Instant Client verwenden, indem wir den Speicherort seiner Bibliotheken in der Umgebungsvariable LD_LIBRARY_PATH angeben und den EPAS-Cluster neu starten, um wirksam zu werden.

Wechseln Sie zunächst als Benutzer „enterprisedb“, laden Sie die Bibliotheken und starten Sie den Cluster neu. Das ist alles, wir können auf die Oracle-Datenbank zugreifen.

[[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 Zeile)

Hinweis:EPAS stellt über die Oracle Instant Client-Bibliothek „libclntsh.so“ eine Verbindung zur Oracle-Datenbank her. Wenn Sie die Bibliothek nicht am Speicherort der Oracle-Clientbibliothek finden, erstellen Sie den symbolischen Link mit libclntsh.so, der auf libclntsh.so.version.number verweist. Siehe Dokumentation.

Im Beispiel stellt dblink_ora_connect eine Verbindung zu einer Oracle-Datenbank mit den vom Benutzer angegebenen Verbindungsinformationen her. Später können wir unter Verwendung des Linknamens (in meinem Fall ‚oraconn‘) Operationen wie SELECT, INSERT, DELETE, UPDATE © mit dblink_ora*-Funktionen ausführen. Alle Funktionen können Sie der EnterpriseDB-Dokumentation hier entnehmen.

Alle oben genannten Methoden sind sehr praktisch, wenn Sie an Migrationsprojekten arbeiten. Hoffe es ist hilfreich. Vielen Dank