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