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