Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как создать JOB по событию / 14 сообщений из 14, страница 1 из 1
07.07.2021, 11:18
    #40082294
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Добрый день.
Помогите пожалуйста разобраться с созданием джоба по событию.
Задача: нужно как то создать событие в Oracle (которое не будет ждать конца выполнения процедуры), на которое будет реагировать JOB и запускать необходимую процедуру с параметрами.
Перечитав множество литературы, так и не понял как это всё реализовать! Может у кого то есть опыт с такой реализацией?
...
Рейтинг: 0 / 0
07.07.2021, 11:23
    #40082296
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
DBMS_JOB, DBMS_SCHEDULER
https://docs.oracle.com/database/121/ARPLS/d_job.htm#ARPLS019
https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72235
DBMS_SCHEDULER вроде как помодней, но у DBMS_JOB (хоть он в новых версиях съэмулирован через DBMS_SCHEDULER) есть одна непревзойденная фишка -- задание будет запущено только после COMMIT, и проигнорируется при ROLLBACK
...
Рейтинг: 0 / 0
07.07.2021, 12:01
    #40082307
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Вячеслав Любомудров, спасибо за ссылки. я их уже давно перечитал. мне не ясна сама методология.
Как создать событие и каким образом на это событие будет реагировать джоб или шедуллер?
...
Рейтинг: 0 / 0
07.07.2021, 12:18
    #40082313
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Тогда, наверное, стоит более подробно рассказать, что хочется
Просто создать JOB внутри процедуры, чтоб он выполнялся параллельно с выполнением основного потока, создать (из процедуры) задание, которое запустится по завершении процедуры и подтверждения транзакции или вообще какой-то внешний процесс (который сам по себе задание), который отслеживает выполняемые в текущий момент операторы и запускающий определенное задание при определенных условиях
...
Рейтинг: 0 / 0
07.07.2021, 12:45
    #40082321
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
ArtemS
Вячеслав Любомудров, спасибо за ссылки. я их уже давно перечитал. мне не ясна сама методология.
Как создать событие и каким образом на это событие будет реагировать джоб или шедуллер?

совершенно верно спрашиваете (имхо)
методологию (кроме прочего ..) помогают понять примеры

например, событие (например) создание (например) таблицы (например) в схеме вашего пользователя
например пусть посредством шедулера отправит sms (например) владельцу схемы с её именем и подробностями ..
...
Рейтинг: 0 / 0
07.07.2021, 14:23
    #40082347
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Вячеслав Любомудров, весь смысл заключается в том, что бы в процессе выполнения одной процедуры был инициирован вызов второй процедуры с параметрами и не нужно ждать ее завершения. Запустили вторую процедуру и забыли за нее, не смотря на то что она будет выполняться пол часа или два часа!
...
Рейтинг: 0 / 0
07.07.2021, 14:35
    #40082348
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
orawish, не могу найти внятный пример и по этой причине нет чёткого понимания методологии! на сколько я сейчас понял, нужно изначально создать TYPE с описанными полями, потом создать queue_table, потом создать queue и запустить его. Потом создать "программу" DBMS_SCHEDULER.CREATE_PROGRAM(..) которая будет инициировать запуск необходимой мне процедуры. Далее создать DBMS_SCHEDULER.CREATE_JOB(..) который будет инициировать запуск "программы" + указывается какой queue использовать.
Если даже весь процесс я правильно описал, тогда не понятно, для чего параметр event_condition при создание джоба и как передать параметры в программу? да и как потом порождать эти события?
...
Рейтинг: 0 / 0
07.07.2021, 14:53
    #40082359
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
ArtemS,

в старых(древних) версиях достаточто было DBMS_JOB.SUBMIT

с учетом, что нужен commit

.....
stax
...
Рейтинг: 0 / 0
08.07.2021, 13:13
    #40082639
legg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Stax
ArtemS,

в старых(древних) версиях достаточто было DBMS_JOB.SUBMIT

с учетом, что нужен commit

.....
stax

я в прошлой доработке как раз с подобной задачей столкнулся . и DBMS_JOB.SUBMIT в моем случае наиболее удобным показался. никаких лишних приседаний. единственный минус - прибить такой процесс сложнее. но работает как часы.
...
Рейтинг: 0 / 0
08.07.2021, 14:46
    #40082688
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Бросил гиблое дело разобраться с созданием джоба по событию и создал процедуру которая создает джоб через пакет шедуллера после отрабатывания автоматически удаляется. то что мне по сути и нужно было!
Вот пример процедуры, может кому то понадобиться:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
create or replace PROCEDURE RunProcedIndependSesNotWait(
                                                        In_OwnerJOB         IN VARCHAR2, 
                                                        In_NameRunProcedure IN VARCHAR2, 
                                                        In_CntArgumentProc  IN NUMBER,
                                                        In_ArrArgument      IN ARRAY_ARGUMENT_TAB
                                                        ) is

v_OwnerJOB          VARCHAR2(100):='"'||In_OwnerJOB||'"';
v_TmpNameJob        VARCHAR2(100);
BEGIN

        v_TmpNameJob:='"TMP'||TO_CHAR(SYS_CONTEXT ('USERENV', 'SID'))||'"';

        DBMS_SCHEDULER.CREATE_JOB (
                                   job_name             =>  v_OwnerJOB||'.'||v_TmpNameJob, --название джоба
                                   job_type             =>  'STORED_PROCEDURE', --тип джоба
                                   job_action           =>  In_NameRunProcedure,-- вызываемая процедура
                                   number_of_arguments  =>  In_CntArgumentProc, --кол-во входных параметров у процедуры
                                   start_date           =>  sysdate,  --время старта джоба                              
                                   enabled              =>  FALSE,  -- по умолчанию при создание нельзя включать джоб
                                   auto_drop            =>  TRUE,   -- автоудаление джоба по завершению выполнения процедуры
                                   comments             =>  ''      -- комментарий к джобу
                                   );
        FOR i in 1..In_ArrArgument.count LOOP

            DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(      -- присваивание значение входным параметрам согласно номеру по порядку параметра
                         job_name => v_OwnerJOB||'.'||v_TmpNameJob, -- название джоба
                         argument_position => In_ArrArgument(i).NUM_ARGUMENT,                -- номер параметра
                         argument_value => In_ArrArgument(i).VAL_ARGUMENT);    --значение параметра
        END LOOP;

            DBMS_SCHEDULER.SET_ATTRIBUTE( -- отключение логирования
                     name => v_OwnerJOB||'.'||v_TmpNameJob, 
                     attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);

            DBMS_SCHEDULER.enable( -- включение джоба
                     name => v_OwnerJOB||'.'||v_TmpNameJob);
                     
        EXCEPTION 
            WHEN OTHERS 
            THEN 
                
                RAISE;

END RunProcedIndependSesNotWait;



Процедура может создавать джобы в разных схемах, но не забывает о грантах!

Модератор: Используйте тег SRC
...
Рейтинг: 0 / 0
08.07.2021, 16:31
    #40082722
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
ArtemS
Код: plsql
1.
2.
3.
4.
5.
EXCEPTION 
            WHEN OTHERS 
            THEN 
                
                RAISE;

Пиши побольше бесполезного кода, чудак.
...
Рейтинг: 0 / 0
08.07.2021, 17:09
    #40082733
ArtemS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
Elic, а сложно было немного подраскинуть мыслями и понять что тут не просто RAISE, а была интерфейсная процедура подсистемы логирования, которая разработана сторонней организацией и согласно договорным отношениям я не имею права где либо ее публиковать? смысл публикации примера процедуры не в обработки ошибок типа OTHERS, а сама реализация необходимого инструмента!
...
Рейтинг: 0 / 0
08.07.2021, 19:44
    #40082771
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
ArtemS
а сложно было немного подраскинуть мыслями и понять что тут не просто RAISE, а была интерфейсная процедура подсистемы логирования, которая разработана сторонней организацией и согласно договорным отношениям я не имею права где либо ее публиковать?
Чудак, ты просто не умеешь вырезать "секретный" код правильно. А мне твои интимные проблемы, о которых ты наивно полагаешь, что кто-либо был обязан догадаться, глубоко побоку.
...
Рейтинг: 0 / 0
09.07.2021, 11:49
    #40082940
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как создать JOB по событию
ArtemS

Код: plsql
1.
        v_TmpNameJob:='"TMP'||TO_CHAR(SYS_CONTEXT ('USERENV', 'SID'))||'"';



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


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