|
Не работает resource_constraint при параллельном запуске джобов
|
|||
---|---|---|---|
#18+
Пытаюсь решить такую задачу: Есть процедура, которая должна выполняться в монопольном режиме (т.е. одновременно в базе должно выполняться не более 1 "запуска" этой процедуры). Процедура должна выполняться при каждом наступлении некоторого события (1 событие = 1 запуск процедуры). Если 2 события произошли почти одновременно, то процедура выполняется 2 раза, причем второй запуск выполняется сразу после завершения первого. Что делаю: Создал очередь для событий (dbms_aqadm.create_queue), расписание на основе этой очереди (dbms_scheduler.create_event_schedule), программу (DBMS_SCHEDULER.create_program) и джоб (DBMS_SCHEDULER.CREATE_JOB). Записал в очередь 3 сообщения подряд. При этом джоб выполнился только 1 раз. Нашел, что это поведение по умолчанию, чтобы его переопределить, нужно установить значение атрибута: Код: plsql 1.
С этим атрибутом джоб стал запускаться 3 раза, но не последовательно, а почти одновременно. Пробовал изменить это поведение с помощью создания resource_constraint: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Это не помогло, джобы всё равно запускаются одновременно. Нашел на эту тему такую ноту на металинке: Oracle Support Document 2272234.1 (12cR2 DBMS_SCHEDULER Resource_Queues Not Working) Но в ней говорится о несрабатывании resource_constraint при ручном запуске джобов (DBMS_SCHEDULER.run_JOB). Это, как выяснилось, норма (хотя нигде и не указано): авторCAUSE A manual run won't enforce the constraint defined for the job. SOLUTION Schedule the jobs to run at the same time to get the Resource Constraints enabled. Но у меня-то именно запуск по расписанию, по идее должно работать. Или расписание на основе событий не считается за расписание? В общем, вопросов много, а идеи закончились... Знаю, что исходную задачу можно решить с помощью dbms_lock в самой процедуре. Но хотелось бы все-таки сделать средствами самого dbms_scheduler, раз уж такая возможность заявлена. Буду признателен за советы! Версия базы: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 10:57 |
|
|
start [/forum/topic.php?fid=52&fpage=33&tid=1880757]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 156ms |
0 / 0 |