oracle_fdw. Оболочка сторонних данных для работы с СУБД Oracle
Версия: 1.2.1.
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Расширение представляет собой внешнюю оболочку данных (fdw – foreign-data wrapper) для простого и эффективного доступа к базам данных Oracle из СУБД Pangolin. Возможности включают отображение условий WHERE и требуемых столбцов, а также всестороннюю поддержку EXPLAIN. Расширение позволяет получать доступ к таблицам и представлениям Oracle (включая материализованные представления) через сторонние таблицы.
Доработка
Доработка: Добавлена совместимость с защищенным засекреченным хранилищем паролей
pg_auth_config.Версия: 4.5.0.
Ограничения
Расширение появилось в версии 4.5.0 СУБД Pangolin, поэтому для использования расширения необходимо обновить версию СУБД Pangolin до 4.5.0 или выше.
Установка
Для установки расширения выполните действия:
-
Установите
oracle clientверсии не ниже 11.2:sudo yum localinstall oracle-instantclient19.18-basic-19.18.0.0.0-2.x86_64.rpm -
Добавьте в систему библиотеки клиента:
-
Добавьте строку
/usr/lib/oracle/19.18/client64/lib/в файл/etc/ld.so.conf:sudo vi /etc/ld.so.conf -
Сохраните файл и выйдите из редактора.
-
Создайте связки и кеш динамических библиотек:
sudo ldconfig -N
-
-
Выполните настройку необходимых переменных окружения:
-
для использования расширения достаточно переменной окружения
LD_LIBRARY_PATHприсвоить значение, равное пути, где расположены библиотекиoracle clientдля установленной версии, например,/usr/lib/oracle/19.18/client64/lib.vim ~/.bash_profile
# добавить путь к переменной
export LD_LIBRARY_PATH=/usr/pangolin-X.X.X/lib:/usr/lib/oracle/19.18/client64/lib
export ORACLE_HOME="/usr/lib/oracle/19.14/client64"
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8" -
для обновления версии Pangolin необходимо создать символьную ссылку на библиотеку
libclntsh.so.18.1в каталоге системных библиотек/usr/lib64:ln -s /usr/lib/oracle/19.18/client64/lib/libclntsh.so.18.1 /usr/lib64/libclntsh.so.18.1
noteПеременные среды необходимо устанавливать для оболочки, в которой запускается сервер PostgreSQL.
Порядок установки переменной
LD_LIBRARY_PATHописан в документе «Руководство по системному администрированию», раздел «Порядок установки переменнойLD_LIBRARY_PATHв окружении Patroni». -
-
Перезагрузите сервер базы данных для применения переменных среды. Пример для инсталляции standalone:
pg_ctl restartПосле выполнения описанных действий необходимые библиотеки и файлы клиента Oracle появятся в системе.
-
Добавьте расширение в БД (необходимы права суперпользователя):
CREATE EXTENSION oracle_fdw SCHEMA ext;noteВ случае получения ошибки следующего вида проверьте правильность установки переменных среды (п. 2 – 4).
ERROR: could not load library "{$PGHOME}/lib/oracle_fdw.so": libclntsh.so.18.1: cannot open shared object file: No such file or directory -
Дайте права на использование расширения
oracle_fdwдля необходимой роли:GRANT USAGE ON FOREIGN DATA WRAPPER oracle_fdw TO <role_name>; -
При необходимости обновите расширение:
ALTER EXTENSION oracle_fdw UPDATE;
Настройка
Настройка не требуется.
Использование модуля
Пример использования расширения oracle_fdw описан в подразделе «Функциональность FOREIGN DATA WRAPPER для БД Oracle» документа «Руководство администратора», раздел «Сценарии администрирования».
-
Создать «сервер» – атрибут, который содержит параметры подключения к серверу базы данных Oracle:
CREATE SERVER ora_db FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//oracle_server:1521/oracle_db');где:
ora_db– произвольное имя сервера;dbserver– параметр подключения к серверу баз данных Oracle.
-
Создать сопоставление пользователя на внешнем сервере для подключения к созданному серверу
ora_db:CREATE USER MAPPING FOR pguser SERVER ora_db OPTIONS (user 'ora_user');где:
pguser– имя пользователя в базе данных Pangolin, который сможет пользоваться внешними данными;ora_db– имя созданного сервера внешних данных;ora_user– имя пользователя в базе данных Oracle, который имеет право на чтение внешних данных.
-
Выдать права для использования стороннего сервера Oracle для пользователя, которому было создано сопоставление (
USER MAPPING):GRANT USAGE ON FOREIGN SERVER ora_db TO pguser;где:
ora_db– имя созданного сервера внешних данных;pguser– имя пользователя в базе данных Pangolin, которому предоставляются права на использование созданного сервера внешних данных.
-
Добавить пароль для пользователя базы данных Oracle в засекреченное хранилище. Приведены два способа:
-
функция
add_auth_record_to_storageтребует явного ввода пароля в строке запуска, что небезопасно:SELECT add_auth_record_to_storage('FQDN_hostname-OR-IPaddress', 1521, 'oracle_db', 'ora_user', '<пароль>');Пример вывода результата:
add_auth_record_to_storage
----------------------------
(1 row) -
утилита
pg_auth_ configс интерактивным вводом пароля:pg_auth_config add --host <FQDN_hostname-OR-IPaddress> --port 1521 --database oracle_db --user ora_userПо запросу утилиты ввести интерактивно дважды пароль пользователя:
enter password:
*******************
confirm password:
*******************В случае успешного завершения утилита выдает сообщение:
Going to add auth record for user: "ora_user", host: "<FQDN_hostname-OR-IPaddress>", port: "1521", database: "oracle_db"
new record added
Внимание!При проверке хранилища паролей расширение не проверяет пароль пользователя БД Oracle.
-
-
Вывод содержимого целевой тестовой таблицы
SCOPE_TEST1в базе данных Oracle:SQL> SELECT * FROM SCOPE_TEST1;
COL1 COL2
---------- -------------------------------------------------
4034 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
734 GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
32 BUFFER_POOL DEFAULT FLASH_CACHE
74 POOL DEFAULT FLASH_CACHE
297 GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
84 GROUPS POOL DEFAULT FLASH_CACHE
532 BUFFER_POOL DEFAULT
574 POOL DEFAULT
297 GROUPS 1 BUFFER_POOL DEFAULT
584 GROUPS POOL DEFAULT
10 rows selected. -
Структура целевой тестовой таблицы
SCOPE_TEST1в базе данных Oracle:SQL> DESCRIBE SCOPE_TEST1;
Name Null? Type
----------------------------- -------- ----------------------
COL1 NOT NULL NUMBER(19)
COL2 NOT NULL VARCHAR2(128 CHAR) -
Создать внешнюю таблицу по отношению к существующей таблицы в базе данных Oracle (атрибуты и типы данных должны соответствовать):
CREATE FOREIGN TABLE ext.ora_scope_test1(col1 numeric(19,0), col2 varchar(128)) SERVER ora_db OPTIONS (SCHEMA 'PG_USER', TABLE 'SCOPE_TEST1');где:
ext.ora_scope_test1– полное название внешней таблицы, создаваемой в базе данных Pangolin;col1,col2– столбцы таблицы, которые должны соответствовать по названию и типу данных структуре внешней таблице в базе данных Oracle;ora_db– имя сервера внешних данных Oracle;PG_USER– имя схемы в базе данных Oracle;SCOPE_TEST1– имя тестовой таблицы в базе данных Oracle.
-
Проверка работы расширения: можно обращаться к целевой таблице во внешней базе данных Oracle, как к обычной таблице PostgreSQL в СУБД Pangolin:
SELECT * FROM ext.ora_scope_test1;Пример вывода результата запроса:
col1 | col2
------+---------------------------------------------------
4034 | FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
734 | GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
32 | BUFFER_POOL DEFAULT FLASH_CACHE
74 | POOL DEFAULT FLASH_CACHE
297 | GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
84 | GROUPS POOL DEFAULT FLASH_CACHE
532 | BUFFER_POOL DEFAULT
574 | POOL DEFAULT
297 | GROUPS 1 BUFFER_POOL DEFAULT
584 | GROUPS POOL DEFAULT
(10 rows) -
Созданная внешняя таблица присутствует в списке системного каталога:
\d+ ora_scope_test1Foreign table "ext.ora_scope_test1"
Column | Type | Collation | Nullable | Default | FDW options | Storage | Stats target | Description
--------+------------------------+-----------+----------+---------+-------------+----------+--------------+-------------
col1 | numeric(19,0) | | | | | main | |
col2 | character varying(128) | | | | | extended | |
Server: ora_db
FDW options: (schema 'PG_USER', "table" 'SCOPE_TEST1') -
Удалить внешнюю таблицу:
DROP FOREIGN TABLE ext.ora_scope_test1;
Ссылки на документацию
- Описание расширения: Подраздел Функциональность FOREIGN DATA WRAPPER для БД Oracle документа «Сценарии администрирования».
- Дополнительно поставляемый модуль oracle_fdw: https://github.com/laurenz/oracle_fdw.