powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите разобраться с очередями
13 сообщений из 13, страница 1 из 1
Помогите разобраться с очередями
    #33989220
salexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо данные из очереди сообщений одной схемы перенести в очередь на другой.
Очередь должна быть с приоритетом.
Создаю в первой схеме, тип:
Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace type EX_TYPE as object
(
 task_id			number,
 schema_name		varchar2( 30 ),
 block			varchar2( 4000 ),
 priority			number
)
таблицу очереди:
Код: plaintext
1.
2.
3.
4.
5.
6.
begin
  sys.dbms_aqadm.create_queue_table(
    queue_table => 'EX_QT',
    queue_payload_type => EX_TYPE',
    sort_list => 'PRIORITY',
    multiple_consumers => true);
end;
очередь:
Код: plaintext
1.
2.
3.
4.
5.
begin
  sys.dbms_aqadm.create_queue(
    queue_name => 'EX_Q',
    queue_table => 'EX_QT',
    queue_type => sys.dbms_aqadm.normal_queue);
end;
Запускаю:
Код: plaintext
1.
2.
BEGIN
  dbms_aqadm.start_queue('EX_Q', TRUE, TRUE);
END;
Создаю подписчика:
Код: plaintext
1.
2.
3.
4.
5.
6.
DECLARE 
subscriber sys.aq$_agent;
BEGIN
subscriber := sys.aq$_agent('Test2',				'Test2.ex_q@bubu.du',
	null);
dbms_aqadm.add_subscriber(queue_name => 'ex_q',
subscriber => subscriber);
Код: plaintext
1.
2.
3.
4.
5.
6.
dbms_aqadm.schedule_propagation(queue_name  => 'ex_q',
destination => 'bubu.du',
start_time  => SYSDATE,
duration    => NULL,
next_time   => NULL,
latency     =>  0 );
END;
Во второй схеме создаю точно такую же очередь и такую процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
	
PROCEDURE do_loop IS
deqopt    dbms_aq.dequeue_options_t;
mprop     dbms_aq.message_properties_t;
deq_msgid RAW( 16 );
data      Test2.ex_type;
pragma exception_init(no_messages, - 25228 );
BEGIN
LOOP
deqopt.navigation    := dbms_aq.next_message;
deqopt.consumer_name := USER;
dbms_aq.dequeue(queue_name         => 'ex_q',
dequeue_options    => deqopt,
message_properties => mprop,
payload            => data,
msgid              => deq_msgid);
COMMIT;
end;
dbms_output.put_line(data.task_id);
END LOOP;
END do_loop;
Запускаю цикл:
begin
do_loop();
end;

Тестируем, в первой схеме запускаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Declare
enqopt    dbms_aq.enqueue_options_t;
mprop     dbms_aq.message_properties_t;
data      ex_type;
deq_msgid RAW( 16 );
BEGIN
mprop.priority := priority;
data           := ex_type( 1 , Test2@bubu.du, block, priority);
dbms_aq.enqueue('EX_Q', enqopt, mprop, data, deq_msgid);
commit;
Однако результат не вижу. Нужно ли создавать подписчика во второй схеме? Что тут ещё не так?
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989291
Q u a d r o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно, что вы пытаетесь достигнуть?

Один вопрос для вас - source и destination схемы в одной базе или разных?
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989366
salexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Q u a d r oНе совсем понятно, что вы пытаетесь достигнуть?

Грубо говоря таким образом я буду размножать некоторый код по серверам, в том числе и длительные запросы с отправкой результата куда-нибудь.
Q u a d r oОдин вопрос для вас - source и destination схемы в одной базе или разных?
Пока тестирую на одной
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989621
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сообщение в первой очереди появляется?
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989636
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, кстати, сейчас занимаюсь аналогичной проблемой - передачей сообщений между двумя источником и несколькими удаленными БД посредством очередей. Если интересен мой опыт, то могу выслать test case.
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989643
Valeriy Borysyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую помочь.

Я так понял, не появляются сообщения в дестинейшен очереди, да?
Какой оракл? у меня Oracle9i Enterprise Edition Release 9.2.0.5.0

Давай пройдемся по-порядку по проблемным местам...

1. Пользователи должны иметь необходимые права
У меня вот эти розданы
AQ_ADMINISTRATOR_ROLE
EXECUTE ON SYS.DBMS_AQADM
EXECUTE ON SYS.DBMS_AQ
EXECUTE ON SYS.DBMS_AQIN

2. JOB_QUEUE_PROCESSES Parameter - во что выставлен?
Выполни:
SELECT a.ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value"
FROM x$ksppi a, x$ksppcv b, x$ksppsv c
WHERE a.indx = b.indx AND a.indx = c.indx AND ksppinm='job_queue_processes';

Значение этого параметра должно быть как минимум 2*(кол-во propagation schedules)
Можно установить так, например
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20;

3. Название ДБ-линка должно быть fully – qualifyed
Example: ‘MY_LINK.US.DB.COM‘ instead of 'MY_LINK‘ – it’s important for propagation to work.

4. Подписчиков создавать необязательно, можно вместо этого при постановке в очередь указать список получателей dbms_aq.message_properties_t recipient_list
Recipient Address should be in form schema.remote_queue_name@DB_Link

вот так, например:
declare
vrecipient_list dbms_aq.AQ$_RECIPIENT_LIST_T;
....
begin
--Prepare recipient_list
vrecipient_list(1):= sys.aq$_agent('AQ_TEST','aq_test.main_queue_d@aq_d.us.db.com', NULL);
..... дальше ставим в очередь
...
msgProp.recipient_list:=vrecipient_list;

dbms_aq.enqueue(queue_name => queueName,
enqueue_options => enqOpt,
message_properties => msgProp,
payload => xmlmsg,
msgid => msgHdl);
COMMIT; -- коммит нужен !!!


5. Проверка, совместимы ли очереди
/* Verify that the source and destination queues have the same type. */
DECLARE
rc BINARY_INTEGER;
BEGIN
DBMS_AQADM.VERIFY_QUEUE_TYPES( src_queue_name => 'main_queue', dest_queue_name => 'main_queue_d',
destination=>'aq_d.us.db.com', rc => rc);
DBMS_OUTPUT.PUT_LINE(rc);
END;

6. Если получишь ORA-25228 то это решается вот так DEQUEUE_OPTIONS_T.WAIT:=1 (какое-то ненулевое значение)

Все имена проставь свои, спешу я очень, надеюсь, это поможет....
Все вышеописанное для случая с разными базами.

Пару ссылок по теме
http://%5Ddownload-west.oracle.com/docs/cd/B10501_01/appdev.920/a96620/xdb22aq.htm#1028991%5B/url]
http://]citforum.ru/database/articles/oraclexmlmess.shtml
http://]www.lc.leidenuniv.nl/awcourse/oracle/appdev.920/a96587/qintro.htm#64906
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33989669
Valeriy Borysyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочешь, вышлю полностью рабочий пример с XML-сообщениями?
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33991674
salexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tolmachov DmitiryА сообщение в первой очереди появляется? Я, кстати, сейчас занимаюсь аналогичной проблемой - передачей сообщений между двумя источником и несколькими удаленными БД посредством очередей. Если интересен мой опыт, то могу выслать test case.
Конечно, иначе зачем я её создавал. Перед тем как попасть в очередь они кидаются в табличку, что-то наподобии справочника заданий (часть результата будет возвращено сюда же). Далее процедурка разбирает что куда слать и кидает в очередь. Чей-то чужой опыт всегда инетересен, особенно в данном случае, высылайте.

Valeriy BorysyukПопробую помочь.
Я так понял, не появляются сообщения в дестинейшен очереди, да?
Какой оракл? у меня Oracle9i Enterprise Edition Release 9.2.0.5.0

Вроде такой же, уточню в понедельник. Да,сообщения не появляются во 2 очереди.
1. раздавал
2,3. в понедельник посмотрю,проверю
4. пробовал, та же беда.
5. 2 очередь - копия 1
6. а где эту ошиббку посмотреть? в ..shedule..?
Спасибо за ссылки, почитаю. Если есть примеры, кидайте, всегда рад=)
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #33993478
salexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем снес я все, написал по новой, поставил гранты и заработало, делал без подписчиков. Однако 5 не работает. Пишет, что connection description for remote databse not found.Спасибо за советы, работаю дальше. примеры все ещё жду, интересно посмотреть у кого как реализовано=)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите разобраться с очередями
    #36111352
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Очень много вопросов по пропаганде сообщений из одной БД в другую возникает offline. Поэтому прикладываю живой пример. Сообщения идут из БД Gedis в БД Omega через db-link OMEGA_AQXML. Тип сообщения - Oracle object type.
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #36221114
KReoN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriy Borysyuk,

спасибо огромное. Ссылка очень помогла.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите разобраться с очередями
    #39728446
vipi voxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть без db лика, очередь из одной схему не перенести в другую?
...
Рейтинг: 0 / 0
Помогите разобраться с очередями
    #39732280
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vipi voxa,

Никаких проблем перенести сообщения из одной очереди в другую без БД линка. Если, конечно, обе очереди в одной базе.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите разобраться с очередями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]