Obecnie organizacje przechowują informacje (dane) w różnych systemach baz danych. Każdy system baz danych ma zestaw aplikacji, które działają na nim. Te dane to tylko bity i bajty w systemie plików — i tylko baza danych może przekształcić bity i bajty danych w informacje biznesowe. Integracja i konsolidacja takich informacji (danych) w jeden system bazodanowy jest często trudna. Ponieważ wiele aplikacji działających w jednej bazie danych może nie mieć równoważnej aplikacji działającej w innej. Aby skonsolidować informacje w jednym systemie bazodanowym, potrzebujemy heterogenicznego połączenia z bazą danych. W tym poście pokażę, jak można połączyć PostgreSQL z jedną z heterogenicznych baz danych Oracle przy użyciu różnych metod.
Poniżej znajduje się kilka metod nawiązania połączenia z bazą danych Oracle w PostgreSQL.
- Korzystanie ze sterownika ODBC
- Korzystanie z zagranicznych DataWrappers
- Korzystanie ze sterownika Oracle Call Interface (OCI)
Open DataBase Connectivity (ODBC) to standardowy programowy interfejs API do korzystania z DBMS. Sterownik ODBC/Źródło danych ODBC (API) to biblioteka, która umożliwia aplikacjom łączenie się z dowolną bazą danych, dla której dostępny jest sterownik ODBC. Jest to warstwa środkowa, która tłumaczy zapytania danych aplikacji na polecenia zrozumiałe dla DBMS. Aby skorzystać z tej metody, wymagane są pakiety open source unixODBC i Oracle ODBC (Basic/ODBC/Devel). Wraz z modułem w PostgreSQL, który może komunikować się z DSN utworzonym za pomocą unixODBC i sterownika Oracle ODBC. Kilka lat temu CyberTec wypuścił moduł ODBC-Link, obecnie jest on przestarzały, jednak posiada implementację w stylu dblink dla PostgreSQL do łączenia się z każdą inną bazą danych zgodną z ODBC. Możemy użyć tego modułu do podstawowej łączności z Oracle. Zobaczmy.
Zainstaluj unixODBCtar -xvf unixODBC-2.3.4.tar.gz cd unixODBC-2.3.4/ ./configure --sysconfdir=/etc make make install
Lokalizacja plików binarnych/bibliotek/plików konfiguracyjnych:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)
Zainstaluj sterownik Oracle ODBC
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
Lokalizacja plików binarnych/bibliotek:/usr/lib/oracle/11.2/client64
Zainstaluj 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
Lokalizacja bibliotek i plików SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib
Instalacja utworzy plik SQL modułu ODBC-Link w katalogu $PGHOME/contrib. Załaduj plik SQL, który utworzy schemat o nazwie „odbclink” z niezbędnymi funkcjami.
psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql
W tym momencie zainstalowaliśmy sterownik unixODBC Drirver, sterownik Oracle ODBC i moduł ODBC-Link dla PostgreSQL. W pierwszym kroku musimy utworzyć DSN przy użyciu Oracle ODBC.
Edytuj plik /etc/odbcinst.ini i przekaż definicję sterowników
## 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
Edytuj plik /etc/odbc.ini i utwórz DSN ze sterownikiem wymienionym w /etd/odbcinst.ini
## Host: pg.raghav-node1.com, PORT: 1521 ## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser ## ODBC Data source: Ora
[Ora]
Opis =myoracledb database
Driver =MyOracle
Ślad =tak
TraceFile =/tmp/odbc_oracle.log
Baza danych =//pg.raghav-node1 .com:1521/ORA11G
Identyfikator użytkownika =mmruser
Hasło =mmruser
Port =1521
Po utworzeniu DSN załaduj wszystkie biblioteki sterowników ODBC Oracle i unix, ustawiając zmienne środowiskowe i przetestuj łączność za pomocą narzędzia wiersza poleceń systemu operacyjnego „dltest” i „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>
Teraz ustaw te same zmienne środowiskowe dla użytkownika postgres do ładowania bibliotek i zrestartuj klaster PostgreSQL, aby zaczął działać. Połącz się z PostgreSQL i wywołaj funkcje odbclink, aby połączyć się z bazą danych 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’);
połącz
———
1
(1 wiersz)
Fajne prawo…!!!. Aby pobrać i manipulować danymi, zapoznaj się z plikiem ODBC-Link README.
Korzystanie z zewnętrznych opakowań danych
Rozszerzenie SQL/MED (Zarządzanie danymi zewnętrznymi SQL) do standardu SQL umożliwia zarządzanie danymi zewnętrznymi przechowywanymi poza bazą danych. SQL/MED udostępnia dwa komponenty:Obce opakowania danych i Datalink. PostgreSQL wprowadził Foreign Data Wrapper (FDW) w wersji 9.1 z obsługą tylko do odczytu, aw wersji 9.3 do zapisu tego standardu SQL. Dziś najnowsza wersja ma wiele funkcji i wiele odmian FDW dostępnych w celu uzyskania dostępu do różnych zdalnych baz danych SQL.
Oracle_fdw zapewnia łatwy i wydajny sposób uzyskiwania dostępu do bazy danych Oracle. IMO to jedna z najfajniejszych metod dostępu do zdalnej bazy danych. Aby skompilować Oracle_FDW z PostgreSQL 9.5, potrzebujemy bibliotek Oracle Instant Client oraz pg_config ustawionego w PATH. Możemy użyć tych samych bibliotek Oracle Instant Client, które są używane w ODBC-Link. Zobaczmy, jak to działa.
Najpierw ustaw zmienne środowiskowe za pomocą bibliotek OIC i 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
Rozpakuj moduł oracle_fdw i skompiluj go za pomocą PostgreSQL 9.5
unzip oracle_fdw-1.4.0.zip cd oracle_fdw-1.4.0/ make make install
Teraz przełącz się jako użytkownik „postgres” i zrestartuj klaster, ładując biblioteki Oracle Instant Client wymagane dla rozszerzenia oracle_fdw i utwórz rozszerzenie w bazie danych.
[[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=# utwórz rozszerzenie oracle_fdw;
UTWÓRZ ROZSZERZENIE
Teraz możesz uzyskać dostęp do bazy danych 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)
Korzystanie ze sterowników Oracle Call Interface (OCI)
Oracle Call Interface (OCI) sterownik typu 2 dostępny bezpłatnie w witrynie Oracle, który umożliwia klientowi łączenie się z bazą danych Oracle. EDB Postgres Advanced Server (zwany również EPAS) to zastrzeżony produkt, który posiada wbudowany moduł łącza bazy danych oparty na OCI o nazwie dblink_ora, który łączy się z bazą danych Oracle za pomocą sterowników Oracle OCI. Wszystko, co musisz zrobić, aby użyć modułu dblink_ora, zainstalować EPAS (nie obejmuje instalacji) i powiedzieć EPAS, gdzie może znaleźć biblioteki sterowników Oracle OCI. Możemy skorzystać z tego samego klienta Oracle Instant Client, określając lokalizację jego bibliotek w zmiennej środowiskowej LD_LIBRARY_PATH i ponownie uruchomić klaster EPAS.
Najpierw przełącz się jako użytkownik „enterprisedb”, załaduj biblioteki i zrestartuj klaster. To wszystko, możemy uzyskać dostęp do bazy danych 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 wiersz)
Uwaga:EPAS łączy się z bazą danych Oracle za pomocą biblioteki Oracle Instant Client „libclntsh.so”. Jeśli nie znajdziesz biblioteki w lokalizacji Oracle Client Library, utwórz dowiązanie symboliczne z libclntsh.so wskazującym na libclntsh.so.version.number. Zapoznaj się z dokumentacją.
W tym przykładzie dblink_ora_connect nawiązuje połączenie z bazą danych Oracle przy użyciu informacji o połączeniu określonych przez użytkownika. Później używając nazwy linku (w moim przypadku „oraconn”) możemy wykonywać operacje takie jak SELECT,INSERT,DELETE,UPDATE © za pomocą funkcji dblink_ora*. Wszystkie funkcje można znaleźć w dokumentacji EnterpriseDB tutaj.
Wszystkie powyższe metody będą bardzo przydatne, jeśli pracujesz nad projektami migracyjnymi. Mam nadzieję, że to pomocne. Dziękuję