Днес организациите съхраняват информация (данни) в различни системи за бази данни. Всяка система за бази данни има набор от приложения, които работят срещу нея. Тези данни са само битове и байтове във файлова система – и само база данни може да превърне битовете и байтовете данни в бизнес информация. Интегрирането и консолидирането на такава информация (данни) в една система от база данни често е трудно. Тъй като много от приложенията, които работят срещу една база данни, може да нямат еквивалентно приложение, което работи срещу друга. За да консолидираме информацията в една система от база данни, се нуждаем от хетерогенна връзка с база данни. В тази публикация ще демонстрирам как можете да свържете PostgreSQL към една от хетерогенните бази данни Oracle, като използвате различни методи.
По-долу са дадени няколко метода за свързване с базата данни на Oracle в PostgreSQL.
- Използване на ODBC драйвер
- Използване на чужди DataWrappers
- Използване на драйвер на Oracle Call Interface (OCI)
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. Да видим.
Инсталирайте unixODBCtar -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-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
Местоположение на библиотеки и 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 тук.
Всички горепосочени методи ще бъдат много удобни, ако работите по проекти за миграция. Надявам се да е полезно. Благодаря ви