sql >> Databáze >  >> RDS >> PostgreSQL

Způsoby přístupu k databázi Oracle v PostgreSQL

Dnes organizace ukládají informace (data) do různých databázových systémů. Každý databázový systém má sadu aplikací, které proti němu běží. Tato data jsou pouze bity a bajty v systému souborů – a pouze databáze může tyto bity a bajty proměnit v obchodní informace. Integrace a konsolidace takových informací (dat) do jednoho databázového systému je často obtížná. Protože mnoho aplikací, které běží proti jedné databázi, nemusí mít ekvivalentní aplikaci, která běží proti jiné. Ke konsolidaci informací do jednoho databázového systému potřebujeme připojení k heterogenní databázi. V tomto příspěvku ukážu, jak můžete připojit PostgreSQL k jedné z heterogenních databází Oracle pomocí různých metod.

Níže je uvedeno několik metod pro připojení k databázi Oracle v PostgreSQL.

  • Použití ovladače ODBC
  • Použití Foreign DataWrapper
  • Používání ovladače Oracle Call Interface (OCI)
Software použitý v ukázce (včetně odkazů ke stažení) – CentOS 7 64bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, ovladače Oracle Instant Client 11.x &Oracle_FDWPoužívání ODBC Řidič

Open DataBase Connectivity (ODBC) je standardní softwarové API pro použití DBMS. Ovladač ODBC/zdroj dat ODBC (API) je knihovna, která umožňuje aplikacím připojit se k jakékoli databázi, pro kterou je k dispozici ovladač ODBC. Je to střední vrstva, která převádí datové dotazy aplikace do příkazů, kterým DBMS rozumí. Chcete-li použít tuto metodu, jsou vyžadovány balíčky open source unixODBC a Oracle ODBC driver (Basic/ODBC/Devel). Spolu s modulem v PostgreSQL, který umí komunikovat s DSN vytvořeným pomocí unixODBC a ovladače Oracle ODBC. Před několika lety CyberTec vydal modul ODBC-Link, v současnosti je zastaralý, nicméně má implementaci ve stylu dblink pro PostgreSQL pro připojení k jakékoli jiné databázi vyhovující ODBC. Tento modul můžeme použít pro základní konektivitu k Oracle. Uvidíme.

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

Umístění binárních/knihoven/konfiguračních souborů:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Nainstalujte 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

Umístění binárních souborů/knihoven:/usr/lib/oracle/11.2/client64

Nainstalujte 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

Umístění knihoven a souborů SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib

Instalace vytvoří soubor SQL modulu ODBC-Link v adresáři $PGHOME/contrib. Načtěte soubor SQL, který vytvoří schéma s názvem „odbclink“ s potřebnými funkcemi.

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

V tuto chvíli jsme nainstalovali unixODBC Drirver, Oracle ODBC ovladač a ODBC-Link modul pro PostgreSQL. Jako první krok musíme vytvořit DSN pomocí Oracle ODBC.

Upravte soubor /etc/odbcinst.ini a předejte definici ovladačů

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

Upravte soubor /etc/odbc.ini a vytvořte DSN s ovladačem uvedeným v /etd/odbcinst.ini

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

[Ora]
Popis =databáze myoracledb
Ovladač =MyOracle
Trace =ano
TraceFile =/tmp/odbc_oracle.log
Databáze =//pg.raghav-node1 .com:1521/ORA11G
ID uživatele =mmruser
Heslo =mmruser
Port =1521

Po vytvoření DSN načtěte všechny knihovny ovladačů Oracle a unix ODBC nastavením proměnných prostředí a otestujte konektivitu pomocí nástroje příkazového řádku OS „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>

Nyní nastavte stejné proměnné prostředí pro uživatele postgres pro načítání knihoven a restartujte cluster PostgreSQL, aby se projevil. Připojte se k PostgreSQL a zavolejte funkce odbclink pro připojení k databázi 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’);
připojit
———
1
(1 řádek)

V pohodě...!!!. Informace o získávání a manipulaci s daty naleznete v souboru README ODBC-Link.

Použití Foreign DataWrapper

Rozšíření SQL/MED (SQL Management of External Data) ke standardu SQL umožňuje správu externích dat uložených mimo databázi. SQL/MED poskytuje dvě komponenty Foreign data wrapper a Datalink. PostgreSQL představil Foreign Data Wrapper (FDW) ve verzi 9.1 s podporou pouze pro čtení a ve verzi 9.3 s podporou zápisu tohoto standardu SQL. Dnes má nejnovější verze kolem sebe řadu funkcí a mnoho druhů FDW dostupných pro přístup k různým vzdáleným SQL databázím.

Oracle_fdw poskytuje snadný a efektivní způsob přístupu k databázi Oracle. IMO, je to jedna z nejlepších metod přístupu ke vzdálené databázi. Ke kompilaci Oracle_FDW s PostgreSQL 9.5 potřebujeme knihovny Oracle Instant Client a pg_config nastavený v PATH. Můžeme použít stejné knihovny Oracle Instant Client používané pro ODBC-Link. Podívejme se, jak to funguje.

Nejprve nastavte proměnné prostředí pomocí knihoven OIC a 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

Rozbalte modul oracle_fdw a zkompilujte jej pomocí PostgreSQL 9.5

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

Nyní přepněte jako uživatel „postgres“ a restartujte cluster načtením knihoven Oracle Instant Client požadovaných pro rozšíření oracle_fdw a vytvořením rozšíření v databázi.

[[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=# vytvořit rozšíření oracle_fdw;
VYTVOŘIT ROZŠÍŘENÍ

Nyní máte přístup k databázi 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)


Používání ovladačů Oracle Call Interface (OCI)

Oracle Call Interface (OCI) ovladač typu 2 volně dostupný na webu Oracle, který umožňuje klientovi připojit se k databázi Oracle. EDB Postgres Advanced Server (také nazývaný EPAS), proprietární produkt, má vestavěný modul propojení databáze založený na OCI s názvem dblink_ora, který se připojuje k databázi Oracle pomocí ovladačů Oracle OCI. Jediné, co musíte udělat, je použít modul dblink_ora, nainstalovat EPAS (nezahrnující instalaci) a sdělit EPAS, kde může najít knihovny ovladačů Oracle OCI. Můžeme použít stejného klienta Oracle Instant Client zadáním umístění jeho knihoven v proměnné prostředí LD_LIBRARY_PATH a restartovat cluster EPAS.

Nejprve se přepněte jako uživatel „enterprisedb“, načtěte knihovny a restartujte cluster. To je vše, máme dobrý přístup k databázi 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 řádek)

Poznámka:EPAS se připojuje k databázi Oracle pomocí knihovny Oracle Instant Client „libclntsh.so“. Pokud knihovnu nenajdete v umístění Oracle Client Library, vytvořte symbolický odkaz s libclntsh.so ukazující na libclntsh.so.version.number. Viz dokumentace.

V příkladu dblink_ora_connect naváže připojení k databázi Oracle s informacemi o připojení zadanými uživatelem. Později pomocí názvu odkazu (v mém případě ‚oraconn‘) můžeme provádět operace jako SELECT, INSERT, DELETE, UPDATE © pomocí funkcí dblink_ora*. Všechny funkce, na které se můžete odkázat z dokumentace EnterpriseDB zde.

Všechny výše uvedené metody budou velmi užitečné, pokud pracujete na migračních projektech. Doufám, že je to užitečné. Děkuji


  1. ExecuteNonQuery vrací hodnotu -1 při použití sql COUNT navzdory řetězci dotazu

  2. Funkce SQRT() v Oracle

  3. Jak mohu získat výpis postgres databáze ve formátu prostého textu na heroku?

  4. Přejmenujte sloupec SQL Server 2008