|
AQ propagation
|
|||
---|---|---|---|
#18+
Не могу просто уже… настроить propagation между двумя очередями. Исходная – в Oracle 18c XE 64-bit under Windows 10. Что сделал: 1 Есть очередь и таблица очередей с payload = sys.xmltype 2 Есть db_link на target database Target = Oracle 19c развернута на cloud.oracle.com. Конкретно Autonomous transaction Database. Имена пользователей что там, что там – одинаковые. Нюанс имеется – при заходе на cloud надо использовать wallet. Tnsnames.ora имеет вид Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вот что создано в пользовательской схеме, откуда собираюсь делать propagation: Db_link: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Создана очередь, таблица очередей, подписчик и джоб на propagation Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
На стороне target database в одноименной схеме Создана очередь и таблица очередей: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
job_queue_processes на обоих базах имеют ненулевые значения. Aq_tm_processes тоже. Локально обе очереди позволяют делать в них enqueue. Но вот propagation не работает!!! Возвращает ora-02019. Код: plsql 1. 2. 3.
Что забавно( точнее ни хера не забавно): Прочие запросы на селект, инсерт в таблицу по данному линку работают. Обычные джобы – тоже. Не работает, конкретно и предметно именно advanced queueing. Хелп плиз… ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 08:10 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
А если так: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 09:55 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
micis, буду пробовать. Пока что ушел в сторону от propagation через dbms_aqadm, пробую через dbms_propagation_adm. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 10:44 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Я может и не в тему, но между 18.6 и 19.3 у меня в свое время тоже не получилось Точнее, результат был неоднозначный -- то работало, то нет Честно, пытался следовать всем металинковским нотам, но не помогло -- решили просто написать приблуду, которая сама перекладывает из очередей одной БД в другую К сожалению PS. Что хуже всего не поехали очереди и внутри 18.8 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 12:21 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Перешел на dbms_propagation_adm. Поменял алиас в tnsnames.ora на cloud1.adb.oraclecloud.com. И database link также назвал. Т.е. привел их в полное соответствие с service_name удаленной базы. Ошибка теперь - ORA-12514. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:35 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Хм... Выставил global_names = true ошибка ORA-12514 исчезла, но джоб впал в кому, выдавая в tracefile бесчисленные Код: plsql 1.
Сообщения он ждет , видите ли... Так оно есть: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Параметры аудита отключены: Код: plsql 1. 2.
Буду копать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 18:38 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
После дальних странствий воротясь... Висит... не видит сообщений... Не понял откуда в trace file стойко появляется запись Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 00:17 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Андрей Климов, Сравни, что бы поле address таблицы user_queue_subscribers и aq$_agent.address совпадало (попробуй полное/короткое имя линка, global_names). Плюс, посмотри обычным селектом в CLOUD_QTAB поле address. А пробовал сделать продвижение в исходную базу (дб-линк на локалхост)? Вячеслав Любомудров решили просто написать приблуду, которая сама перекладывает из очередей одной БД в другую ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 04:39 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
micis Сравни, что бы поле address таблицы user_queue_subscribers и aq$_agent.address совпадало ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 04:58 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
micis Вячеслав Любомудров решили просто написать приблуду, которая сама перекладывает из очередей одной БД в другую У нас идет опрос 4+4 очередей раз в 20 сек. -- вроде бизнес устраивает ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 06:20 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
micis, Он значение схемы и имя очереди в user_queue_subscribers.address заключает в двойные кавычки. Не думаю, что это можно считать расхождением. Переключился на propagation между схемами. Как Вячеслав правильно заметил - не работает. Когда задаю подписчика без линка - Оракл скромно так добавляет в адрес линк @AQ_LOCAL. Пробую с линком сам-на-себя. P.S. Вячеслав, а в 12.2 с propagation между схемами в одной БД не практиковались? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 13:47 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Андрей Климов, Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 14:10 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Андрей Климов Переключился на propagation между схемами. Как Вячеслав правильно заметил - не работает. Я сказал, что не смог настроить, возможно просто где-то накосячил. Я это впервые настраивал. Андрей Климов Вячеслав, а в 12.2 с propagation между схемами в одной БД не практиковались? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 14:49 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Андрей Климов Не могу просто уже… настроить propagation между двумя очередями. Техподдержка молчит? И обычная, и облачная? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 19:44 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Хех, получилось однако... На CLOUD закинуть. Подробности в скором времени, ибо сутки не спал. Скажу тока, что пришлось ручками лесть в aq$_radio_i и править там колонку subscriber# ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 20:30 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Итак, к чему я пришел в итоге. Есть очередь stern.radio_q. Из нее хочу публиковать в две очереди.
BANNER_FULL"Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.5.0.0.0" Для соединения с CLOUD создан DB LINK Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Памятуя о всяких бяках на самом деле description я вытянул в одну строку, убрав все пробелы. Все очереди с payload_type = RAW Параметры audit_sys_operations FALSE audit_trail NONE global_names FALSE Подписчики описаны без расхождений с документацией: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Под каждого подписчика создан свой шедулер: Код: plsql 1. 2. 3. 4. 5.
Код: plsql 1. 2. 3. 4. 5.
Если я в процедуре, или в анонимном блоке, который делает enqueue, явно специфицирую получателя в recipient_list, вот так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
а для CLOUD так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
то происходит полная несуразица. Оракл почему-то не в состоянии сличить этих получателей с тем списком, который он себе завел после процедур add_subscriber! Джобы виснут, т.к. не видят куда публиковать сообщения из очереди. Если же я делаю вставку в очередь без всякого указания recipients, то все происходит честно, сообщение уходит к обоим подписчикам. Т.е. каждый джоб доставляет сообщение, как ему и было указано. Вот такой вариант, самый простой, без recipients в итоге прокатывает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Видимо, если я не хочу, чтобы сообщение отправлялось всем, придется в создание подписчика добавить rule , и в момент enqueue делать "целеуказание" с явным прописыванием свойства сообщения, соответствующему правилу для того пдописчика, которому я это сообщение адресую. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 16:39 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Для каждой очереди, намеченной для публикации, т.е. имеющей подписчиков, Оракл держит вспомогательное вью AQ$<queue_table_name> где хранит историю propagation. В колонках этого вью: Колонка описание MSG_ID ИД исходного сообщения MSG_STATE Состояние исходного сообщения PROPAGATED_MSGID ИД лоставленного сообщения CONSUMER_NAME Имя подписчика-кому доставлено ADDRESS Адрес подписчика- кому доставлено PROTOCOL Протокол подписчика- кому доставлено В документации об этом ни слова нет. И, по-моему, это единственный способ очистить очередь - источник от сообщений, отправленных всем получателям в списке. При очистке очереди-источника от сообщений, хранящихся в этой таблице, они из нее также исчезают. Если задать просто expiration , то есть риск, что сообщение удалится не будучи доставлено всем требуемым подписчикам. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 19:27 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Если кому интересно, что за таблицы, которые Оракл плодит для очередей, вот, что нарыл: Multiple Consumer Queues Database Objects AQ$_<queue_table_name>_T e.g AQ$_QT3_T IOT used queue monitor to manage timed operations AQ$_<queue_table_name>_I IOT that maintains state for dequeue operations One row per message per recipient/subscriber AQ$_<queue_table_name>_S Heap table containing information about subscribers AQ$_<queue_table_name>_H IOT used to store dequeue history One row per message per recipient/subscriber AQ$_<queue_table_name>_G IOT correlating messages to subscriber signatures ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 19:55 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Собственно, пошел по тому же пути, что и форумчанин: https://www.sql.ru/forum/1093254/aq-propagation-i-spisok-poluchateley?hl=schedule_propagation Столько лет прошло, а Оракл и ухом не ведет... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 20:27 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Кстати, спешу напомнить, что если вы хотите, чтобы propagation работало периодически, то значение параметра next_time следует задавать в кавычках, например Код: plsql 1.
В чистом виде значение типа date не поглотит... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 21:57 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Андрей Климов Для каждой очереди, намеченной для публикации, т.е. имеющей подписчиков, Оракл держит вспомогательное вью AQ$<queue_table_name> где хранит историю propagation. В колонках этого вью: Колонка описание MSG_ID ИД исходного сообщения MSG_STATE Состояние исходного сообщения PROPAGATED_MSGID ИД лоставленного сообщения CONSUMER_NAME Имя подписчика-кому доставлено ADDRESS Адрес подписчика- кому доставлено PROTOCOL Протокол подписчика- кому доставлено В документации об этом ни слова нет. И, по-моему, это единственный способ очистить очередь - источник от сообщений, отправленных всем получателям в списке. При очистке очереди-источника от сообщений, хранящихся в этой таблице, они из нее также исчезают. Если задать просто expiration , то есть риск, что сообщение удалится не будучи доставлено всем требуемым подписчикам. Пожалуй, я погорячился... Что за суррогат держит Оракл в этом вью, еще надо разобраться. Потому что, как только отработают все шедулеры по всем подписчикам, сообщение из очереди автоматически удаляется. В документации об этом нет, но у меня именно так оно и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 00:14 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
После Код: plsql 1. 2.
можно выставить Код: plsql 1. 2. 3.
Аудирование вышеупомянутых пакетов , вызывало падение propagation job'a в удаленную базу с ошибками ORA-02002: ошибка записи в контрольный журнал ORA-01024: неверный тип данных в OCI ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 03:45 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
После выполнения Код: plsql 1. 2.
Вернул назад Код: plsql 1. 2.
Шедулер перестал ошибаться! Нет больше ошибок ORA-02002: ошибка записи в контрольный журнал ORA-01024: неверный тип данных в OCI ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 17:13 |
|
AQ propagation
|
|||
---|---|---|---|
#18+
Интересно, что когда задаешь шедулеру задание распространить сообщение в очередь, которая для очереди-источника не является подписчиком, AQ автоматически добавляет в таблицу AQ$_<queue_name>_S подписчика с адресом, который совпадает со значением параметра destination_queue в вызове функции dbms_aqadm.schedule_propagation . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 03:29 |
|
|
start [/forum/topic.php?fid=52&msg=40050858&tid=1880363]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 230ms |
0 / 0 |