PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Начини за достъп до Oracle Database в PostgreSQL

Днес организациите съхраняват информация (данни) в различни системи за бази данни. Всяка система за бази данни има набор от приложения, които работят срещу нея. Тези данни са само битове и байтове във файлова система – и само база данни може да превърне битовете и байтовете данни в бизнес информация. Интегрирането и консолидирането на такава информация (данни) в една система от база данни често е трудно. Тъй като много от приложенията, които работят срещу една база данни, може да нямат еквивалентно приложение, което работи срещу друга. За да консолидираме информацията в една система от база данни, се нуждаем от хетерогенна връзка с база данни. В тази публикация ще демонстрирам как можете да свържете PostgreSQL към една от хетерогенните бази данни Oracle, като използвате различни методи.

По-долу са дадени няколко метода за свързване с базата данни на Oracle в PostgreSQL.

  • Използване на ODBC драйвер
  • Използване на чужди DataWrappers
  • Използване на драйвер на Oracle Call Interface (OCI)
Софтуер, използван в демонстрацията (включени връзки за изтегляне) – CentOS 7 64bit, PostgreSQL 9.5, EDB Postgres Advanced Server 9.5, ODBC-Link 1.0.4, unixODBC-2.3.4, Oracle Instant Client 11.x драйвери &Oracle_UDWFDW Шофьор

Open DataBase Connectivity (ODBC) е стандартен софтуерен API за използване на СУБД. ODBC драйвер/ODBC източник на данни (API) е библиотека, която позволява на приложенията да се свързват към всяка база данни, за която е наличен ODBC драйвер. Това е среден слой, който превежда заявките за данни на приложението в команди, които СУБД разбира. За да използвате този метод, са необходими пакети с отворен код unixODBC и Oracle ODBC драйвер (Basic/ODBC/Devel). Заедно с модул в PostgreSQL, който може да комуникира с DSN, създаден с помощта на unixODBC и Oracle ODBC драйвер. Преди няколко години CyberTec пусна модул ODBC-Link, който в момента е остарял, но има реализация в стил dblink за PostgreSQL за свързване с всяка друга съвместима с ODBC база данни. Можем да използваме този модул за основна връзка с Oracle. Да видим.

Инсталирайте unixODBC
tar -xvf unixODBC-2.3.4.tar.gz
cd unixODBC-2.3.4/
./configure --sysconfdir=/etc
make
make install

Местоположение на двоични/библиотеки/конфигурационни файлове:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)

Инсталирайте 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

Двоично/библиотечно местоположение:/usr/lib/oracle/11.2/client64

Инсталирайте 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

Местоположение на библиотеки и SQL файлове:/opt/PostgreSQL/9.5/share/postgresql/contrib

Инсталацията ще създаде SQL файл на модула ODBC-Link в директория $PGHOME/contrib. Заредете SQL файла, който ще създаде схема с име „odbclink“ с необходимите функции в нея.

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

В този момент сме инсталирали unixODBC драйвер, Oracle ODBC драйвер и ODBC-Link модул за PostgreSQL. Като първа стъпка трябва да създадем DSN с помощта на Oracle ODBC.

Редактирайте файла /etc/odbcinst.ini и предайте дефиницията на драйверите

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

Редактирайте файла /etc/odbc.ini и създайте DSN с драйвер, споменат в /etd/odbcinst.ini

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

[Ora]
Описание =myoracledb база данни
Драйвер =MyOracle
Проследяване =да
TraceFile =/tmp/odbc_oracle.log
База данни =//pg.raghav-node1 .com:1521/ORA11G
Потребителски идентификатор =mmruser
Парола =mmruser
Порт =1521

След като създадете DSN, заредете всички библиотеки с драйвери на Oracle и unix ODBC, като зададете променливи на средата и тествайте свързаността с помощта на инструмента на командния ред на ОС „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>

Сега задайте същите променливи на средата за потребител на postgres за зареждане на библиотеките и рестартирайте PostgreSQL клъстера, за да влезе в сила. Свържете се с PostgreSQL и извикайте функции odbclink, за да се свържете с базата данни на 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=# изберете odbclink.connect(‘DSN=Ora’);
connect
———
1
(1 ред)

Страхотно точно...!!!. За извличане и манипулиране на данни се обърнете към ODBC-Link README файл.

Използване на чужди DataWrappers

Разширението на SQL/MED (SQL управление на външни данни) към SQL стандарта позволява управление на външни данни, съхранявани извън базата данни. SQL/MED предоставя два компонента Обвивки за чужди данни и връзка с данни. PostgreSQL представи Foreign Data Wrapper (FDW) във версия 9.1 с поддръжка само за четене и във версия 9.3 поддръжка за запис на този SQL стандарт. Днес най-новата версия има редица функции около себе си и много разновидности на FDW, достъпни за достъп до различни отдалечени SQL бази данни.

Oracle_fdw предоставя лесен и ефективен начин за достъп до Oracle Database. IMO, това е един от най-готините методи за достъп до отдалечената база данни. За да компилираме Oracle_FDW с PostgreSQL 9.5, се нуждаем от Oracle Instant Client библиотеки и pg_config, зададен в PATH. Можем да използваме същите Oracle Instant Client библиотеки, използвани за ODBC-Link. Нека видим как работи.

Първо, задайте променливи на средата с OIC библиотеки и 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

Разархивирайте модула oracle_fdw и го компилирайте с PostgreSQL 9.5

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

Сега превключете като потребител на „postgres“ и рестартирайте клъстера, като заредите библиотеките на Oracle Instant Client, необходими за разширението oracle_fdw, и създайте разширението в базата данни.

[[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=# създаване на разширение oracle_fdw;
СЪЗДАВАНЕ НА РАЗШИРЕНИЕ

Сега имате достъп до базата данни на 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)


Използване на драйвери на Oracle Call Interface (OCI)

Oracle Call Interface (OCI) драйвер тип 2, свободно достъпен на сайта на Oracle, който позволява на клиента да се свърже с базата данни на Oracle. EDB Postgres Advanced Server (наричан още EPAS) патентован продукт има вграден модул за връзка към базата данни, базиран на OCI, наречен dblink_ora, който се свързва с базата данни на Oracle, използвайки Oracle OCI драйвери. Всичко, което трябва да направите, за да използвате модула dblink_ora, да инсталирате EPAS (не покрива инсталацията) и да кажете на EPAS къде може да намери библиотеките на Oracle OCI драйвери. Можем да използваме същия Oracle Instant Client, като посочим местоположението на неговите библиотеки в променливата на средата LD_LIBRARY_PATH и за да влезе в сила, рестартираме клъстера EPAS.

Първо, превключете като потребител на „enterprisedb“, заредете библиотеките и рестартирайте клъстера. Това е всичко, ние имаме достъп до базата данни на 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=# изберете dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
———————
OK
(1 ред)

Забележка:EPAS се свързва с базата данни на Oracle с помощта на библиотеката на Oracle Instant Client „libclntsh.so“. Ако няма да намерите библиотеката в местоположението на Oracle Client Library, тогава създайте символната връзка с libclntsh.so, сочеща libclntsh.so.version.number. Обърнете се към документацията.

В примера dblink_ora_connect установява връзка с база данни на Oracle с посочената от потребителя информация за връзка. По-късно използвайки име на връзката („oraconn“ в моя случай), можем да изпълняваме операции като SELECT, INSERT, DELETE, UPDATE © с помощта на dblink_ora* функции. Всички функции, които можете да препратите от документацията на EnterpriseDB тук.

Всички горепосочени методи ще бъдат много удобни, ако работите по проекти за миграция. Надявам се да е полезно. Благодаря ви


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как Cos() работи в PostgreSQL

  2. Функции на прозореца или общи таблични изрази:пребройте предишните редове в рамките на диапазона

  3. Как да форматирам bigint поле в дата в Postgresql?

  4. Как да конвертирате jsonb типа на PostgreSQL 9.4 в float

  5. Postgres е най-готината база данни – Причина №1:Разработчиците я обичат!