sql >> Databasteknik >  >> RDS >> PostgreSQL

Sätt att komma åt Oracle Database i PostgreSQL

Idag lagrar organisationer information(data) i olika databassystem. Varje databassystem har en uppsättning applikationer som körs mot sig. Dessa data är bara bitar och byte i ett filsystem – och bara en databas kan omvandla bitar och byte av data till affärsinformation. Integrering och konsolidering av sådan information(data) i ett databassystem är ofta svårt. Eftersom många av applikationerna som körs mot en databas kanske inte har en likvärdig applikation som körs mot en annan. För att konsolidera informationen till ett databassystem behöver vi en heterogen databasanslutning. I det här inlägget ska jag demo om hur du kan ansluta PostgreSQL till en av heterogena databaser Oracle med olika metoder.

Nedan finns några metoder för att göra anslutning till Oracle-databasen i PostgreSQL.

  • Använda ODBC-drivrutin
  • Använda utländska DataWrappers
  • Använda Oracle Call Interface(OCI)-drivrutin
Programvara som används i demo (inkluderade nedladdningslänkar) – 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_FDWAnvända ODBC Drivrutin

Open DataBase Connectivity (ODBC) är ett standardprogramvaru-API för att använda DBMS. ODBC-drivrutinen/ODBC-datakällan (API) är ett bibliotek som tillåter applikationer att ansluta till vilken databas som helst för vilken en ODBC-drivrutin är tillgänglig. Det är ett mellanlager som översätter applikationens datafrågor till kommandon som DBMS förstår. För att använda den här metoden krävs ett unixODBC- och Oracle ODBC-drivrutinspaket med öppen källkod (Basic/ODBC/Devel). Tillsammans med en modul i PostgreSQL som kan kommunicera till DSN skapad med unixODBC och Oracle ODBC-drivrutin. För några år sedan har CyberTec släppt en modul ODBC-Link, för närvarande är den föråldrad, men den har en implementering i dblink-stil för att PostgreSQL ska kunna ansluta till vilken annan ODBC-kompatibel databas som helst. Vi kan använda den här modulen för grundläggande anslutning till Oracle. Låt oss se.

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

Binära/bibliotek/konfigurationsfiler plats:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Installera Oracle ODBC-drivrutin

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

Binary/Libraries plats:/usr/lib/oracle/11.2/client64

Installera 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

Plats för bibliotek och SQL-filer:/opt/PostgreSQL/9.5/share/postgresql/contrib

Installationen kommer att skapa en SQL-fil för ODBC-Link-modulen i katalogen $PGHOME/contrib. Ladda SQL-filen, som kommer att skapa ett schema med namnet "odbclink" med nödvändiga funktioner i den.

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

Vid det här laget har vi installerat unixODBC Drirver, Oracle ODBC-drivrutin och ODBC-Link-modul för PostgreSQL. Som ett första steg måste vi skapa ett DSN med Oracle ODBC.

Redigera filen /etc/odbcinst.ini och skicka in drivrutinsdefinitionen

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

Redigera filen /etc/odbc.ini och skapa DSN med drivrutinen som nämns i /etd/odbcinst.ini

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

[Ora]
Beskrivning =myoracledb databas
Drivrutin =MyOracle
Trace =ja
TraceFile =/tmp/odbc_oracle.log
Databas =//pg.raghav-node1 .com:1521/ORA11G
Användar-ID =mmruser
Lösenord =mmruser
Port =1521

När du har skapat DSN, ladda alla Oracle &unix ODBC-drivrutinsbibliotek genom att ställa in miljövariabler och testa anslutningen med OS-kommandoradsverktyget "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>

Ställ nu in samma miljövariabler för postgres-användare för att ladda biblioteken och starta om PostgreSQL-klustret för att träda i kraft. Anslut till PostgreSQL och anrop odbclink-funktioner för att ansluta till 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älj odbclink.connect(‘DSN=Ora’);
anslut
———
1
(1 rad)

Coolt va...!!!. För att hämta och manipulera data se ODBC-Link README-fil.

Använda utländska DataWrappers

En SQL/MED (SQL Management of External Data)-tillägg till SQL Standard tillåter hantering av externa data som lagras utanför databasen. SQL/MED tillhandahåller två komponenter Foreign data wrappers och Datalink. PostgreSQL introducerade Foreign Data Wrapper(FDW) i version 9.1 med skrivskyddad stöd och i version 9.3 skrivstöd för denna SQL-standard. Idag har den senaste versionen ett antal funktioner runt sig och många varianter av FDW tillgängliga för åtkomst till olika fjärrbaserade SQL-databaser.

Oracle_fdw ger ett enkelt och effektivt sätt att komma åt Oracle Database. IMO, det är en av de coolaste metoderna för att komma åt fjärrdatabasen. För att kompilera Oracle_FDW med PostgreSQL 9.5 behöver vi Oracle Instant Client-bibliotek och pg_config inställda i PATH. Vi kan använda samma Oracle Instant Client-bibliotek som används för ODBC-Link. Låt oss se hur det fungerar.

Ställ först in miljövariabler med OIC-bibliotek och 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

Packa upp oracle_fdw-modulen och kompilera den med PostgreSQL 9.5

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

Byt nu som "postgres"-användare och starta om klustret genom att ladda Oracle Instant Client-bibliotek som krävs för oracle_fdw-tillägget och skapa tillägget 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=# skapa tillägg oracle_fdw;
SKAPA TILLÄGG

Nu kan du komma åt 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)


Använda drivrutiner för Oracle Call Interface (OCI)

Oracle Call Interface (OCI) en typ-2-drivrutin som är fritt tillgänglig på Oracle-webbplatsen som låter klienten ansluta till Oracle-databasen. EDB Postgres Advanced Server (även kallad EPAS) en egenutvecklad produkt har en inbyggd OCI-baserad databaslänkmodul kallad dblink_ora, som ansluter till Oracle-databasen med Oracle OCI-drivrutiner. Allt du behöver göra för att använda dblink_ora-modulen, installera EPAS (täcker inte installationen) och berätta för EPAS var den kan hitta Oracle OCI-drivrutinsbibliotek. Vi kan använda samma Oracle Instant Client genom att ange dess biblioteksplats i miljövariabeln LD_LIBRARY_PATH och starta om EPAS-klustret för att träda i kraft.

Byt först som "enterprisedb" användare, ladda biblioteken och starta om klustret. Det är allt, vi är bra för att komma åt 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älj dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
——————–
OK
(1 rad)

Obs:EPAS ansluter till Oracle-databasen med Oracle Instant Client-biblioteket "libclntsh.so". Om du inte hittar biblioteket på Oracle Client Library-platsen skapar du den symboliska länken med libclntsh.so som pekar på libclntsh.so.version.number. Se dokumentationen.

I exemplet upprättar dblink_ora_connect en anslutning till en Oracle-databas med den användarspecificerade anslutningsinformationen. Senare med hjälp av länknamn ('oraconn' i mitt fall) kan vi utföra operationer som SELECT, INSERT, DELETE,UPDATE © med dblink_ora*-funktioner. Alla funktioner kan du referera från EnterpriseDB-dokumentationen här.

Alla ovanstående metoder kommer att vara mycket praktiska om du arbetar med migreringsprojekt. Hoppas det är till hjälp. Tack


  1. Få bara datum utan tid i Oracle

  2. MySQL :transaktion inom en lagrad procedur

  3. Hur man snabbar på att ladda data från oracle sql till pandas df

  4. Hur man skapar ett Amazon Aurora-kluster