powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / периодическое асинхронное выполнение набора процедур
16 сообщений из 16, страница 1 из 1
периодическое асинхронное выполнение набора процедур
    #39248821
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORACLE 11.2
есть необходимость организовать периодическое асинхронное выполнение набора процедур, например:
1) запускается процедура 1, время работы около 7 минут
2) не дожидаясь завершения процедуры 1 (= т.е. одновременно), запускается процедура 2, время работы - около 5 минут, но возможны вылеты
3) процедура 3 запускается только после завершения обеих процедур - 1 и 2

как это эффективно и красиво организовать встроенными средствами Oracle?
если есть ссылки на статью/блог/пример - прошу ткнуть носом в них
спасибо!
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39248837
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexus12,

В oracle >= 11 можно реализовать через пакет dbms_parallel_execute
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39248854
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12как это эффективно и красиво организовать встроенными средствами Oracle?
DBMS_SCHEDULER
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249073
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihel,
если я правильно понимаю, DBMS_PARALLLEL_EXECUTE - это "автоматически организуемое" параллельное исполнение ОДНОГО SQL или PL/SQL:авторasktom: How to Code for Parallel Processing
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4248554900346593542

Starting with Oracle Database 11g Release 2 and above – we have a new way to implement parallelism via the DBMS_PARALLLEL_EXECUTE builtin package. Using it, you can execute a SQL or PL/SQL statement in parallel by taking the data to be processed and breaking it up into multiple, smaller streams. You can implement the same approach yourself, manually, and I show how in the section on “Old School Do-It-Yourself Parallelism” that follows. The beauty of the new package though, is that it eliminates much of the tedious work that you otherwise need to perform.
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249105
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexus12,

параллелить можно не только по rowid, но и создавать параллельные куски самому самостоятельно

примерный код для одновременного запуска 2 процедур

Код: plsql
1.
2.
3.
4.
5.
6.
 DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL(task_name => V_TASK_NAME, by_rowid => false, sql_stmt =>
    'select 1 as start_id, 1 as end_id from dual union all select 2 as start_id, 2 as end_id from dual');

   DBMS_PARALLEL_EXECUTE.RUN_TASK(task_name => V_TASK_NAME, language_flag => DBMS_SQL.NATIVE, parallel_level => 2, sql_stmt => 'begin IF :start_id = 1 THEN P1; ELSE P2; END IF;  end;');

V_RESULT := DBMS_PARALLEL_EXECUTE.TASK_STATUS(TASK_NAME => V_TASK_NAME);
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249106
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд, именованные блокировки (DBMS_LOCK) помогут.
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249112
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

вы имеете в виду стартовать 2 процедуры через шедуллер, внутри сделать lock. А снаружи сделать цикл пока лок не освободится?
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249121
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а посмотреть в сторону scheduler chains?
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249133
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12ORACLE 11.2
есть необходимость организовать периодическое асинхронное выполнение набора процедур, например:
1) запускается процедура 1, время работы около 7 минут
2) не дожидаясь завершения процедуры 1 (= т.е. одновременно), запускается процедура 2, время работы - около 5 минут, но возможны вылеты
3) процедура 3 запускается только после завершения обеих процедур - 1 и 2

как это эффективно и красиво организовать встроенными средствами Oracle?
если есть ссылки на статью/блог/пример - прошу ткнуть носом в них
спасибо!


Можно через шедулер + global context. В конце каждой из процедур

Код: plsql
1.
2.
3.
DBMS_SESSION.SET_CONTEXT('your_proccess_context', 'proc&_ended',TRUE);
IF (SYS_CONTEXT('your_proccess_context', 'proc1_ended') = TRUE AND SYS_CONTEXT('your_proccess_context', 'proc2_ended')=TRUE )
THEN proc3;
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249148
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601Можно через шедулер + global context.
посмотри что требуется ТС и скажи как ?
есть готовое решение 19249091
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249170
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййora601Можно через шедулер + global context.
посмотри что требуется ТС и скажи как ?
есть готовое решение 19249091

Ну всё верно, процедуры запускаются шедулером, но для того чтобы обеспечить Alexus123) процедура 3 запускается только после завершения обеих процедур - 1 и 2 нужен global context. Как сделать написано выше в моем посте.
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249172
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вероятно, DBMS_SCHEDULER chains - лучшее решение
пример на русском: http://samag.ru/archive/article/1579
дока на аглицком: https://docs.oracle.com/cd/B28359_01/server.111/b28310/schedover005.htm
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249203
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
piheldmdmdm,

вы имеете в виду стартовать 2 процедуры через шедуллер, внутри сделать lock. А снаружи сделать цикл пока лок не освободится?

Да.

Ждем в третьей процедуре освобождения блокировки. Как освободилась - значит все, процедуры, использующие эту блокировку, завершили работу.

Если блокировка не освободилась за некий период, отвалилась по таймауту, - значит, в процедурах первого этапа какие-то проблемы, надо разбираться.
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249240
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601нужен global context.
кому он нужен ? по ссылке сходить лень ?
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39249250
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12,

Код: plsql
1.
2.
3.
4.
...
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'TRUE', 'START proc1');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'TRUE', 'START proc2');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'proc1 SUCCEEDED AND proc2 SUCCEEDED', 'START proc3');
...
Рейтинг: 0 / 0
периодическое асинхронное выполнение набора процедур
    #39253565
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййAlexus12,

Код: plsql
1.
2.
3.
4.
...
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'TRUE', 'START proc1');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'TRUE', 'START proc2');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('my_chain', 'proc1 SUCCEEDED AND proc2 SUCCEEDED', 'START proc3');



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


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