В дополнение к средствам чтения таблиц базы данных и записи в эти таблицы в PL/SQL предлагаются два встроенных модуля, предназначенных для взаимодействия между соединениями, или сеансами (sessions). Это модули DBMS_PIPE и DBMS_ALERT. Их можно использовать для обмена сообщениями между сеансами, соединенными с одним и тем же экземпляром базы данных. Эти модули чрезвычайно удобны и выполняют множество полезных функций. В данном разделе детально рассмотрен только модуль DBMS_PIPE, предназначенный для реализации программных каналов базы данных. Модуль DBMS_ALERT, реализующий систему оповещения базы данных подробно описан в [3].
Посредством модуля DBMS_PIPE реализуются программные каналы баз данных (database pipe). Канал базы данных не зависит от операционной системы, и будет работать в любой среде, в которой функционирует ORACLE. Различные сеансы, соединенные с одним и тем же экземпляром ORACLE, могут посылать и получать сообщения по такому каналу. Канал могут использовать несколько сеансов, получающих сообщения, или получателей (readers), и несколько сеансов, посылающих сообщения, или отправителей (writers). При этом сеанс может посылать и получать несколько сообщений. Все эти сеансы могут находиться на разных машинах и работать в различных средах выполнения программ PL/SQL. Все, что требуется от сеансов, – соединиться с одним и тем же экземпляром ORACLE, а также иметь возможность выполнять блоки РL/SQL.
Программные каналы асинхронны – они функционируют независимо от транзакций. После того как сообщение послано по каналу, вернуть его невозможно, даже если был выполнен откат той транзакции, которая выдала сообщение. Следовательно, их можно использовать для реализации автономных транзакций, которые можно завершать или откатывать независимо от родительской транзакции.
В прикладном программном интерфейсе DBMS_PIPE и для посылки, и для получения сообщений применяется локальный буфер сообщений. Отправитель упаковывает в буфере группу элементов данных, а затем его содержимое посылается по каналу в буфер сообщений принимающего сеанса. Принимающий сеанс распаковывает буфер и получает в результате реальную информацию. Подробнее процессы посылки и получения сообщений по программному каналу описываются в следующих параграфах.