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

Måder at få adgang til Oracle Database i PostgreSQL

I dag gemmer organisationer information(data) i forskellige databasesystemer. Hvert databasesystem har et sæt applikationer, der kører imod det. Disse data er kun bits og bytes på et filsystem - og kun en database kan omdanne bits og bytes af data til forretningsinformation. Integration og konsolidering af sådan information(data) i ét databasesystem er ofte vanskelig. Fordi mange af de programmer, der kører mod én database, muligvis ikke har et tilsvarende program, der kører mod en anden. For at konsolidere informationen i ét databasesystem har vi brug for en heterogen databaseforbindelse. I dette indlæg vil jeg demo om, hvordan du kan forbinde PostgreSQL til en af ​​heterogene databaser Oracle ved hjælp af forskellige metoder.

Nedenfor er nogle få metoder til at oprette forbindelse til Oracle-databasen i PostgreSQL.

  • Brug af ODBC-driver
  • Brug af udenlandske dataindpakninger
  • Brug af Oracle Call Interface(OCI)-driver
Software brugt i demo (inkluderede downloadlinks) – 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-drivere &Oracle_FDWBrug af ODBC Driver

Open DataBase Connectivity (ODBC) er en standard software API til brug af DBMS. ODBC-driveren/ODBC-datakilden (API) er et bibliotek, der gør det muligt for applikationer at oprette forbindelse til enhver database, som en ODBC-driver er tilgængelig for. Det er et mellemlag, der oversætter applikationens dataforespørgsler til kommandoer, som DBMS forstår. For at bruge denne metode kræves en open source unixODBC- og Oracle ODBC-driver(Basic/ODBC/Devel)-pakker. Sammen med et modul i PostgreSQL, der kan kommunikere til DSN oprettet ved hjælp af unixODBC og Oracle ODBC driver. For nogle år siden har CyberTec udgivet et ODBC-Link-modul, på nuværende tidspunkt er det forældet, men det har en implementering i dblink-stil, så PostgreSQL kan oprette forbindelse til enhver anden ODBC-kompatibel database. Vi kan bruge dette modul til grundlæggende tilslutning til Oracle. Lad os se.

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

Binære/biblioteker/konfigurationsfiler placering:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Installer Oracle ODBC-driver

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

Binær/biblioteker placering:/usr/lib/oracle/11.2/client64

Installer 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

Placering af biblioteker og SQL-filer:/opt/PostgreSQL/9.5/share/postgresql/contrib

Installationen vil oprette en ODBC-Link-modul SQL-fil i mappen $PGHOME/contrib. Indlæs SQL-filen, som vil oprette et skema ved navn "odbclink" med nødvendige funktioner i det.

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

På dette tidspunkt har vi installeret unixODBC Driver, Oracle ODBC driver og ODBC-Link modul til PostgreSQL. Som et første skridt skal vi oprette et DSN ved hjælp af Oracle ODBC.

Rediger filen /etc/odbcinst.ini, og send driverens definition

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

Rediger filen /etc/odbc.ini og opret DSN'et med driveren nævnt i /etd/odbcinst.ini

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

[Ora]
Beskrivelse =myoracledb database
Driver =MyOracle
Trace =ja
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
BrugerID =mmbruger
Adgangskode =mmbruger
Port =1521

Efter oprettelse af DSN skal du indlæse alle Oracle &unix ODBC-driverbiblioteker ved at indstille miljøvariabler og teste forbindelsen ved hjælp af OS-kommandolinjeværktøjet "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>

Indstil nu de samme miljøvariabler for postgres-brugeren til indlæsning af bibliotekerne og genstart PostgreSQL-klyngen for at træde i kraft. Opret forbindelse til PostgreSQL og kald odbclink-funktioner for at oprette forbindelse til Oracle-databasen.

[[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=# vælg odbclink.connect(‘DSN=Ora’);
tilslut
———
1
(1 række)

Fedt lige...!!!. For at hente og manipulere data henvises til ODBC-Link README-fil.

Brug af udenlandske dataindpakninger

En SQL/MED(SQL Management of External Data)-udvidelse til SQL-standarden gør det muligt at administrere eksterne data, der er lagret uden for databasen. SQL/MED leverer to komponenter udenlandske dataindpakninger og Datalink. PostgreSQL introducerede Foreign Data Wrapper(FDW) i 9.1-version med skrivebeskyttet understøttelse og i 9.3-version skriveunderstøttelse af denne SQL-standard. I dag har den seneste version en række funktioner omkring sig og mange varianter af FDW tilgængelige for at få adgang til forskellige eksterne SQL-databaser.

Oracle_fdw giver en nem og effektiv måde at få adgang til Oracle Database. IMO, det er en af ​​de fedeste metoder til at få adgang til fjerndatabasen. For at kompilere Oracle_FDW med PostgreSQL 9.5 har vi brug for Oracle Instant Client-biblioteker og pg_config sat i PATH. Vi kan bruge de samme Oracle Instant Client-biblioteker, der bruges til ODBC-Link. Lad os se, hvordan det virker.

Indstil først miljøvariabler med OIC-biblioteker og 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 oracle_fdw-modulet ud og kompiler det med PostgreSQL 9.5

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

Skift nu som 'postgres'-bruger og genstart klyngen ved at indlæse Oracle Instant Client-biblioteker, der kræves til oracle_fdw-udvidelsen, og opret udvidelsen inde i databasen.

[[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=# opret udvidelse oracle_fdw;
OPRET UDVIDELSE

Nu kan du få adgang til Oracle-databasen.

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)


Brug af Oracle Call Interface(OCI)-drivere

Oracle Call Interface (OCI) en type-2-driver, der er frit tilgængelig på Oracle-webstedet, som giver klienten mulighed for at oprette forbindelse til Oracle-databasen. EDB Postgres Advanced Server (også kaldet EPAS), et proprietært produkt, har indbygget OCI-baseret databaselinkmodul kaldet dblink_ora, som forbinder til Oracle-databasen ved hjælp af Oracle OCI-drivere. Alt du skal gøre for at bruge dblink_ora-modulet, installere EPAS (dækker ikke installationen) og fortælle EPAS, hvor det kan finde Oracle OCI-driverbiblioteker. Vi kan gøre brug af den samme Oracle Instant Client ved at angive dens bibliotekers placering i miljøvariablen LD_LIBRARY_PATH og genstarte EPAS-klyngen for at træde i kraft.

Skift først som "enterprisedb" bruger, indlæs bibliotekerne og genstart klyngen. Det er alt, vi er gode til at få adgang til Oracle-databasen.

[[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=# vælg dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
——————–
OK
(1 række)

Bemærk:EPAS opretter forbindelse til Oracle-databasen ved hjælp af Oracle Instant Client-biblioteket "libclntsh.so". Hvis du ikke kan finde biblioteket på Oracle Client Library-placeringen, skal du oprette det symbolske link med libclntsh.so, der peger på libclntsh.so.version.number. Se dokumentationen.

I eksemplet etablerer dblink_ora_connect en forbindelse til en Oracle-database med de brugerspecificerede forbindelsesoplysninger. Senere ved at bruge linknavn ('oraconn' i mit tilfælde) kan vi udføre operationer som SELECT,INSERT,DELETE,UPDATE © ved hjælp af dblink_ora*-funktioner. Alle funktioner kan du referere fra EnterpriseDB-dokumentationen her.

Alle ovenstående metoder vil være meget praktiske, hvis du arbejder på migreringsprojekter. Håber det er nyttigt. Tak


  1. Udbyderen er ikke kompatibel med versionen af ​​Oracle-klienten

  2. Hvordan opretter jeg en kommasepareret liste ved hjælp af en SQL-forespørgsel?

  3. Postgres:vakuumkommando renser ikke døde tupler

  4. SQLiteConstraintException-fejl vises efter start af hver aktivitet