PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Façons d'accéder à la base de données Oracle dans PostgreSQL

Aujourd'hui, les organisations stockent des informations (données) dans différents systèmes de bases de données. Chaque système de base de données possède un ensemble d'applications qui s'y exécutent. Ces données ne sont que des bits et des octets sur un système de fichiers - et seule une base de données peut transformer les bits et les octets de données en informations commerciales. L'intégration et la consolidation de ces informations (données) dans un système de base de données est souvent difficile. Parce que de nombreuses applications qui s'exécutent sur une base de données peuvent ne pas avoir d'application équivalente qui s'exécute sur une autre. Pour consolider les informations dans un système de base de données, nous avons besoin d'une connexion à une base de données hétérogène. Dans cet article, je vais faire une démonstration sur la façon dont vous pouvez connecter PostgreSQL à l'une des bases de données hétérogènes Oracle en utilisant différentes méthodes.

Vous trouverez ci-dessous quelques méthodes pour établir une connexion à la base de données Oracle dans PostgreSQL.

  • Utilisation du pilote ODBC
  • Utilisation de DataWrappers étrangers
  • Utilisation du pilote Oracle Call Interface (OCI)
Logiciels utilisés dans la démo (liens de téléchargement inclus) - 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_FDWUtilisation d'ODBC Chauffeur

Open DataBase Connectivity (ODBC) est une API logicielle standard pour l'utilisation de SGBD. Le pilote ODBC/la source de données ODBC (API) est une bibliothèque qui permet aux applications de se connecter à n'importe quelle base de données pour laquelle un pilote ODBC est disponible. C'est une couche intermédiaire qui traduit les requêtes de données de l'application en commandes que le SGBD comprend. Pour utiliser cette méthode, des packages de pilotes open source unixODBC et Oracle ODBC (Basic/ODBC/Devel) sont requis. Avec un module dans PostgreSQL qui peut communiquer avec le DSN créé à l'aide du pilote unixODBC et Oracle ODBC. Il y a quelques années, CyberTec a publié un module ODBC-Link, actuellement obsolète, cependant, il a une implémentation de style dblink pour que PostgreSQL se connecte à toute autre base de données compatible ODBC. Nous pouvons utiliser ce module pour la connectivité de base à Oracle. Voyons.

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

Emplacement des fichiers binaires/bibliothèques/configuration :/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Installer le pilote ODBC Oracle

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

Emplacement des binaires/bibliothèques :/usr/lib/oracle/11.2/client64

Installer le lien ODBC
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

Emplacement des bibliothèques et des fichiers SQL :/opt/PostgreSQL/9.5/share/postgresql/contrib

L'installation créera un fichier SQL de module ODBC-Link dans le répertoire $PGHOME/contrib. Chargez le fichier SQL, qui créera un schéma nommé "odbclink" avec les fonctions nécessaires.

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

À ce stade, nous avons installé unixODBC Drirver, le pilote Oracle ODBC et le module ODBC-Link pour PostgreSQL. Dans un premier temps, nous devons créer un DSN à l'aide d'Oracle ODBC.

Modifiez le fichier /etc/odbcinst.ini et passez la définition des pilotes

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

Modifiez le fichier /etc/odbc.ini et créez le DSN avec le pilote mentionné dans /etd/odbcinst.ini

## 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
ID utilisateur =mmruser
Mot de passe =mmruser
Port =1521

Après avoir créé le DSN, chargez toutes les bibliothèques de pilotes ODBC Oracle et Unix en définissant des variables d'environnement et testez la connectivité à l'aide de l'outil de ligne de commande du système d'exploitation "dltest" et "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>

Maintenant, définissez les mêmes variables d'environnement pour l'utilisateur postgres pour charger les bibliothèques et redémarrez le cluster PostgreSQL pour prendre effet. Connectez-vous à PostgreSQL et appelez les fonctions odbclink pour vous connecter à la base de données 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 ligne)

Cool d'accord…!!!. Pour récupérer et manipuler des données, reportez-vous au fichier ODBC-Link README.

Utilisation de DataWrappers étrangers

Une extension SQL/MED (SQL Management of External Data) au standard SQL permet de gérer des données externes stockées en dehors de la base de données. SQL/MED fournit deux composants Wrappers de données étrangères et Datalink. PostgreSQL a introduit Foreign Data Wrapper (FDW) dans la version 9.1 avec prise en charge en lecture seule et dans la version 9.3 prise en charge en écriture de cette norme SQL. Aujourd'hui, la dernière version comporte un certain nombre de fonctionnalités et de nombreuses variétés de FDW disponibles pour accéder à différentes bases de données SQL distantes.

Oracle_fdw fournit un moyen simple et efficace d'accéder à Oracle Database. IMO, c'est l'une des méthodes les plus cool pour accéder à la base de données distante. Pour compiler Oracle_FDW avec PostgreSQL 9.5, nous avons besoin des bibliothèques Oracle Instant Client et pg_config défini dans PATH. Nous pouvons utiliser les mêmes bibliothèques Oracle Instant Client que celles utilisées pour ODBC-Link. Voyons comment cela fonctionne.

Tout d'abord, définissez les variables d'environnement avec les bibliothèques OIC et 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

Décompressez le module oracle_fdw et compilez-le avec PostgreSQL 9.5

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

Maintenant, changez en tant qu'utilisateur "postgres" et redémarrez le cluster en chargeant les bibliothèques Oracle Instant Client requises pour l'extension oracle_fdw et créez l'extension dans la base de données.

[[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=# créer une extension oracle_fdw ;
CRÉER UNE EXTENSION

Vous pouvez maintenant accéder à la base de données 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)


Utilisation des pilotes Oracle Call Interface (OCI)

Oracle Call Interface (OCI) un pilote de type 2 disponible gratuitement sur le site Oracle qui permet au client de se connecter à la base de données Oracle. EDB Postgres Advanced Server (également appelé EPAS), un produit propriétaire, intègre un module de liaison de base de données basé sur OCI appelé dblink_ora, qui se connecte à la base de données Oracle à l'aide des pilotes Oracle OCI. Tout ce que vous avez à faire est d'utiliser le module dblink_ora, d'installer EPAS (ne couvrant pas l'installation) et d'indiquer à EPAS où il peut trouver les bibliothèques de pilotes Oracle OCI. Nous pouvons utiliser le même Oracle Instant Client en spécifiant l'emplacement de ses bibliothèques dans la variable d'environnement LD_LIBRARY_PATH et pour prendre effet, redémarrez le cluster EPAS.

Tout d'abord, passez en tant qu'utilisateur "enterprisedb", chargez les bibliothèques et redémarrez le cluster. C'est tout, nous sommes bons pour accéder à la base de données 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 rangée)

Remarque :EPAS se connecte à la base de données Oracle à l'aide de la bibliothèque Oracle Instant Client « libclntsh.so ». Si vous ne trouvez pas la bibliothèque dans l'emplacement de la bibliothèque client Oracle, créez le lien symbolique avec libclntsh.so pointant vers le libclntsh.so.version.number. Reportez-vous à la documentation.

Dans l'exemple, dblink_ora_connect établit une connexion à une base de données Oracle avec les informations de connexion spécifiées par l'utilisateur. Plus tard, en utilisant le nom du lien ('oraconn' dans mon cas), nous pouvons effectuer des opérations telles que SELECT, INSERT, DELETE, UPDATE © en utilisant les fonctions dblink_ora *. Toutes les fonctions que vous pouvez consulter à partir de la documentation EnterpriseDB ici.

Toutes les méthodes ci-dessus seront très pratiques si vous travaillez sur des projets de migration. J'espère que c'est utile. Merci