Tegenwoordig slaan organisaties informatie (data) op in verschillende databasesystemen. Elk databasesysteem heeft een reeks toepassingen die ertegen draaien. Deze gegevens zijn slechts bits en bytes op een bestandssysteem - en alleen een database kan de bits en bytes aan gegevens omzetten in bedrijfsinformatie. Integratie en consolidatie van dergelijke informatie(data) in één databasesysteem is vaak moeilijk. Omdat veel van de toepassingen die tegen de ene database worden uitgevoerd, mogelijk geen equivalente toepassing hebben die tegen een andere wordt uitgevoerd. Om de informatie in één databasesysteem te consolideren, hebben we een heterogene databaseverbinding nodig. In dit bericht laat ik zien hoe je PostgreSQL op verschillende manieren kunt verbinden met een van de heterogene databases van Oracle.
Hieronder staan enkele methoden om verbinding te maken met de Oracle-database in PostgreSQL.
- Het ODBC-stuurprogramma gebruiken
- Buitenlandse DataWrappers gebruiken
- Oracle Call Interface (OCI)-stuurprogramma gebruiken
Open DataBase Connectivity (ODBC) is een standaard software-API voor het gebruik van DBMS. Het ODBC-stuurprogramma/ODBC-gegevensbron (API) is een bibliotheek waarmee toepassingen verbinding kunnen maken met elke database waarvoor een ODBC-stuurprogramma beschikbaar is. Het is een middelste laag die de gegevensquery's van de toepassing vertaalt in opdrachten die het DBMS begrijpt. Om deze methode te gebruiken, zijn een open source unixODBC en Oracle ODBC-stuurprogrammapakketten (Basic/ODBC/Devel) vereist. Samen met een module in PostgreSQL die kan communiceren met DSN die is gemaakt met UnixODBC en Oracle ODBC-stuurprogramma. Enkele jaren geleden heeft CyberTec een module ODBC-Link uitgebracht, op dit moment is deze verouderd, maar het heeft een dblink-achtige implementatie voor PostgreSQL om verbinding te maken met elke andere ODBC-compatibele database. We kunnen deze module gebruiken voor basisconnectiviteit met Oracle. Eens kijken.
UnixODBC installerentar -xvf unixODBC-2.3.4.tar.gz cd unixODBC-2.3.4/ ./configure --sysconfdir=/etc make make install
Locatie van binaire/bibliotheken/configuratiebestanden:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)
Oracle ODBC-stuurprogramma installeren
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
Locatie binair/bibliotheken:/usr/lib/oracle/11.2/client64
Installeer ODBC-Linktar -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
Locatie van bibliotheken en SQL-bestanden:/opt/PostgreSQL/9.5/share/postgresql/contrib
Installatie zal een SQL-bestand van de ODBC-Link-module maken in de directory $PGHOME/contrib. Laad het SQL-bestand, dat een schema met de naam "odbclink" zal maken met de nodige functies erin.
psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql
Op dit moment hebben we unixODBC Drirver, Oracle ODBC-stuurprogramma en ODBC-Link-module voor PostgreSQL geïnstalleerd. Als eerste stap moeten we een DSN maken met Oracle ODBC.
Bewerk het bestand /etc/odbcinst.ini en geef de definitie van de stuurprogramma's door
## 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
Bewerk het bestand /etc/odbc.ini en maak de DSN met het stuurprogramma vermeld in /etd/odbcinst.ini
## Host: pg.raghav-node1.com, PORT: 1521 ## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser ## ODBC Data source: Ora
[Ora]
Beschrijving =myoracledb-database
Driver =MyOracle
Trace =ja
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
Gebruikers-ID =mmruser
Wachtwoord =mmruser
Poort =1521
Laad na het maken van DSN alle Oracle &Unix ODBC-stuurprogrammabibliotheken door omgevingsvariabelen in te stellen en test de connectiviteit met behulp van de OS-opdrachtregeltool "dltest" &"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>
Stel nu dezelfde omgevingsvariabelen in voor postgres-gebruiker voor het laden van de bibliotheken en start het PostgreSQL-cluster opnieuw om van kracht te worden. Maak verbinding met PostgreSQL en roep odbclink-functies aan om verbinding te maken met de Oracle-database.
[[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 rij)
Cool toch…!!!. Raadpleeg het README-bestand van ODBC-Link voor het ophalen en manipuleren van gegevens.
Buitenlandse DataWrappers gebruiken
Een SQL/MED-uitbreiding (SQL Management of External Data) op de SQL-standaard maakt het mogelijk om externe gegevens te beheren die buiten de database zijn opgeslagen. SQL/MED biedt twee componenten Foreign data wrappers en Datalink. PostgreSQL introduceerde Foreign Data Wrapper (FDW) in versie 9.1 met alleen-lezen ondersteuning en in versie 9.3 schrijfondersteuning van deze SQL-standaard. Tegenwoordig heeft de nieuwste versie een aantal functies eromheen en zijn er vele varianten van FDW beschikbaar om toegang te krijgen tot verschillende externe SQL-databases.
Oracle_fdw biedt een gemakkelijke en efficiënte manier om toegang te krijgen tot Oracle Database. IMO, het is een van de coolste methoden om toegang te krijgen tot de externe database. Om Oracle_FDW met PostgreSQL 9.5 te compileren, hebben we Oracle Instant Client-bibliotheken en pg_config nodig die zijn ingesteld in PATH. We kunnen dezelfde Oracle Instant Client-bibliotheken gebruiken die worden gebruikt voor ODBC-Link. Laten we eens kijken hoe het werkt.
Stel eerst omgevingsvariabelen in met OIC-bibliotheken en 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
Pak de module oracle_fdw uit en compileer deze met PostgreSQL 9.5
unzip oracle_fdw-1.4.0.zip cd oracle_fdw-1.4.0/ make make install
Schakel nu over als 'postgres'-gebruiker en start het cluster opnieuw door Oracle Instant Client-bibliotheken te laden die nodig zijn voor de extensie oracle_fdw en maak de extensie in de 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=# extensie maken oracle_fdw;
EXTENS MAKEN
Nu hebt u toegang tot de Oracle-database.
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)
Oracle Call Interface (OCI)-stuurprogramma's gebruiken
Oracle Call Interface (OCI) een type-2-stuurprogramma dat gratis beschikbaar is op de Oracle-site waarmee de client verbinding kan maken met de Oracle-database. EDB Postgres Advanced Server (ook wel EPAS genoemd), een eigen product heeft een ingebouwde OCI-gebaseerde databaselinkmodule genaamd dblink_ora, die verbinding maakt met de Oracle-database met behulp van Oracle OCI-stuurprogramma's. Het enige wat u hoeft te doen om de dblink_ora-module te gebruiken, EPAS te installeren (niet voor installatie) en EPAS te vertellen waar het Oracle OCI-stuurprogrammabibliotheken kan vinden. We kunnen dezelfde Oracle Instant Client gebruiken door de locatie van de bibliotheken op te geven in de omgevingsvariabele LD_LIBRARY_PATH en om het EPAS-cluster van kracht te laten herstarten.
Schakel eerst over als "enterprisedb" -gebruiker, laad de bibliotheken en start het cluster opnieuw. Dat is alles, we zijn goed om toegang te krijgen tot de Oracle-database.
[[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 rij)
Opmerking:EPAS maakt verbinding met de Oracle Database met behulp van de Oracle Instant Client-bibliotheek "libclntsh.so". Als u de bibliotheek niet kunt vinden op de locatie van de Oracle Client Library, maak dan de symbolische link met libclntsh.so die verwijst naar het libclntsh.so.version.number. Raadpleeg de documentatie.
In het voorbeeld brengt dblink_ora_connect een verbinding tot stand met een Oracle-database met de door de gebruiker opgegeven verbindingsinformatie. Later met behulp van de linknaam ('oraconn' in mijn geval) kunnen we bewerkingen uitvoeren zoals SELECT, INSERT, DELETE, UPDATE © met behulp van dblink_ora * -functies. Alle functies die u kunt raadplegen in de EnterpriseDB-documentatie hier.
Alle bovenstaande methoden zijn erg handig als u aan migratieprojecten werkt. Hoop dat het nuttig is. Dank je