PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sposoby dostępu do bazy danych Oracle w PostgreSQL

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)
Oprogramowanie używane w wersji demonstracyjnej (w zestawie linki do pobrania) – CentOS 7 64bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, sterowniki Oracle Instant Client 11.x i Oracle_FDWKorzystanie z ODBC Kierowca

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 unixODBC
tar -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-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

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ę


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak emulować ignorowanie wstawiania i aktualizację zduplikowanych kluczy (sql merge) za pomocą postgresql?

  2. Hibernacja użycia sekwencji PostgreSQL nie wpływa na tabelę sekwencji

  3. Jak zamienić tablicę json w wiersze w postgresie?

  4. Zapowiedź repmgr 2.0

  5. Jak uzyskać pierwszy i ostatni rekord z zapytania sql?