Как подключить Oracle 12.2 к PostgreSQL через DBLink

Как подключить Oracle 12.2 к PostgreSQL через DBLink

Ранее мы рассматривали возможность подключения СУБД Oracle к другим платформам – MySQL и MS SQL. Пришла очередь научить Oracle напрямую общаться с PostgreSQL. Это также возможно через DBLink и ODBC. Настраиваем гетерогенное соединение на Oracle Linux 7.3.

🧰 Что понадобится

  • Oracle 12.2
  • PostgreSQL с сетевым доступом
  • unixODBC (уже есть в системе)
  • драйвер PostgreSQL версии 13 (или выше)

🔧 Установка ODBC-драйвера PostgreSQL

Первым шагом на всякий случай удаляем уже установленные библиотеки (если были установлены более старые версии – до 13). Добавляем репозиторий PostgreSQL и устанавливаем пакет.

yum remove postgresql-odbc
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql13-odbc

📂 Настройка odbcinst.ini

Далее, по аналогии с MySQL, добавляем в /etc/odbcinst.ini конфигурацию для PostgreSQL:

[PostgreSQL]
Description=ODBC for PostgreSQL (Unicode)
Driver=/usr/pgsql-13/lib/psqlodbcw.so
Setup=/usr/lib64/libodbcpsqlS.so
FileUsage=1

📂 Настройка odbc.ini

Следующий файл настройки непосредственно подключения к БД:

[pgodbc]
Driver = PostgreSQL
Servername = pg-srv
Port = 5432
Database = mypgdb
SSLmode = disable

🧪 Проверка соединения

isql -v pgodbc username password

⚙️ Настройка Oracle Gateway (initpgodbc.ora)

Файл с параметрами инициализации подключения из Oracle. Расположение: $ORACLE_HOME/hs/admin/. Имя файла должно иметь вид init<sid>.ora, где <sid> – имя DSN для ODBC с учётом регистра (в нашем случае pgodbc).

HS_FDS_CONNECT_INFO = pgodbc
HS_FDS_SHAREABLE_NAME = /usr/pgsql-13/lib/psqlodbcw.so
HS_LANGUAGE = AMERICAN_AMERICA.AL32UTF8
HS_FDS_TRACE_LEVEL = OFF

set ODBCINI=/etc/odbc.ini
set ODBCSYSINI=/etc

📡 Настройка listener.ora

Добавлем настройки в прослушиватель для обработки входящих запросов на подключение. Расположение: $ORACLE_HOME/network/admin/.

(SID_DESC =
  (SID_NAME = pgodbc)
  (PROGRAM = dg4odbc)
  (ENVS = "LD_LIBRARY_PATH=/usr/lib64:/usr/pgsql-13/lib")
  (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1)
)

После обновления конфигурации перезапускаем прослушиватель.

lsnrctl reload

📫 Настройка tnsnames.ora

И добавляем описание имени подключения. Расположение: $ORACLE_HOME/network/admin/.

pgodbc =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA = (SID = pgodbc))
    (HS = OK)
  )

🔗 Создание DBLink в Oracle

В самой БД остаётся создать ссылку на внешнюю БД для использования в запросах.

CREATE DATABASE LINK pg_link
  CONNECT TO username IDENTIFIED BY "password"
  USING 'PGODBC';

✅ Проверка подключения

SELECT * FROM your_table@pg_link;

Соединение прекрасно работает и с кириллическими именами таблиц! Для обращения к такой таблице необходимо имя заключать в двойные кавычки с точным соблюдением регистра. Например так:

SELECT * FROM "ИмяТаблицы"@pg_link;

Аналогично обращение к полям с кириллическими именами.

🎉 Всё готово!

Теперь Oracle работает с PostgreSQL через DBLink. Но при работе необходимо помнить об ограничениях ODBC-драйвера. Это касается длинных текстовых полей (более 255 символов) и нестандартных типов данных, которые будет необходимо преобразовывать вручную для получения данных. Но это уже другая история.

Close Menu