Buffered Messaging (Queue)
Начиная с 10gR2 официально появился механизм очередей, чьи сообщения хранились не в таблице, а прямо в SGA.
Кажется, изначально это было придумано еще для Oracle Streams, и возможно механизм существовал еще раньше.
Конечно, обмен через такие очереди существенно быстрее, чем через persistent, зато в случае сбоя сообщения теряются.
Познакомиться, как это работает, можно в документации.
Но декларируется, что этот механизм работает в RAC !
И даже больше. Кажется, что именно через buffered queue работают dbms_schedule и data pump.
А раз так, настройка этого механизма становиться жизненно важной.
К нашему ужасу, после установки кластера при попытке работы с buffered queue с разных узлов мы получили сообщение:
ORA-25306 CANNOT CONNECT TO BUFFERED QUEUE'S OWNER INSTANCE
Оказалось, что для обращение с другого узла используется механизм db link. Т.е. сессия при первом обращении строит db link, затем через него обращается к другому узлу. Так вот, из-за этого механизма и могут проистекать разные проблемы.
Конечно у Вас должен быть установлен параметр REMOTE_LISTENER, но будьте аккуратны при написании соответсвующего alias в tnsnames. Он парсится для построения db link.
Затем, у Вас должен быть установлен параметр db_domain.
И конечно заданы значения для STREAM_SIZE.
На основании информации REMOUTE_LISTENER и tnsnames.ora и строится db link. Его можно посмотреть с помощью запроса
select OWNER, DB_LINK, USERNAME, HOST from DBA_DB_LINKS where db_link like '%AQ$%'
а затем и протестировать
select 'x' from dual@your_db_link_name_here
И только если такой запрос пройдет, у Вас начнут работать buffered queue в среде RAC.
Кстати, так как используется db link, то не пытайтесь создавать buffered queue в схеме sys.
Подсоединиться как sys через db link Вам никогда не удасться.
PS
Кстати, после изменения параметра db_domain пришлось перестроить репозиторий DB Control. Об этом напишу в одном из следующих постов.
Как мне кажется, проблемы с buffered queue возникают из-за того, что при работе DBCA вводится не полное имя БД (БД + домен), а короткое.
PS
Внимательные пользователи заметят, что читаться очередь между узлами пойдет ...через публичную сеть.
Поддерживаемого workaround пока я не знаю.
Комментариев нет:
Отправить комментарий