Запуск операции по расписанию
На страницу Пред. 1, 2
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
faded Участник со стажем
Вступление в Клуб: 17.09.2007
|
Вт Дек 11, 2007 13:49   |
|
Полезность: Нет оценки
|
итак, запуск некоего действия трижды в сутки через задания по расписанию
1. в справочнике "системные параметры" завожу экземпляр с кодом 'START_NEXT_HOUR' и значением равным 9 (почему 9 - см. код и п.4)
2. в ТБП "текстовые задания по расписанию" создаю новый экземпляр, далее редактирую текст pl/plus
Код: | v_hh number;
begin
v_hh := to_number(to_char(sysdate,'hh24'));
if to_number([SYSTEM_PARAMS]::[GET]('START_NEXT_HOUR'))=v_hh then
if v_hh>18 then
v_hh := 9;
else
v_hh := v_hh+4;
begin
debug_log(sysdate,0);--<start operation>
exception when others then
null;
end;
end if;
[SYSTEM_PARAMS]::[SET_VALUE]('START_NEXT_HOUR',false,v_hh);
end if;
end; |
3. задание ставлю в очередь с интервалом например 10 секунд
4. операция <start operation> будет запускаться в в 9:ХХ, 13:ХХ, 17:ХХ
5. если операция не будет работать больше 3 часов то ок, если будет тады ой |
|
 |
sergius_79 Участник со стажем
Вступление в Клуб: 08.07.2007
|
Ср Дек 12, 2007 14:31   |
|
Полезность: 1
|
Действительно, почему-то decode не понимает... Вот что значит непроверенные данные. А теперь проверенные данные:
v. 2.0
Код: | case when to_char(sysdate, 'HH24') < '10' then trunc(sysdate) + 10/24 when to_char(sysdate, 'HH24') < '15' then trunc(sysdate) + 15/24 when to_char(sysdate, 'HH24') < '20' then trunc(sysdate) + 20/24 else trunc(sysdate, 'HH24') + 30/24 end |
v. 2.1
Код: | case to_char(sysdate, 'HH24') when '10' then trunc(sysdate) + 15/24 when '15' then trunc(sysdate) + 20/24 else trunc(sysdate, 'HH24') + 30/24 end |
И ещё замечание - всё нужно писать одной строкой.
P.S. Сорри за оплошность. |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Ср Дек 12, 2007 18:30   |
|
Полезность: Нет оценки
|
sergius_79 пишет: | Поспешил малость (как обычно), после else нужно читать trunc(sysdate) + 30/24 |
Что-то пока не получается... На синтаксис уже не ругается, но время след.запуска устанавливает аж на 00:00 через 2-е суток (14-го).
Запуск в 18:20 с кодом case to_char(sysdate, 'HH24') when '19' then trunc(sysdate) + 20/24 when '20' then trunc(sysdate) + 21/24 else trunc(sysdate) + 19/24 end
По идее должна бы встать на 19-00. Или нет? |
|
 |
sergius_79 Участник со стажем
Вступление в Клуб: 08.07.2007
|
Чт Дек 13, 2007 16:53   |
|
Полезность: 3
|
Тебе нужно в 19, 20 и 21 час? Тогда сделай так:
Код: | case when to_char(sysdate, 'HH24') < '19' then trunc(sysdate) + 19/24 when to_char(sysdate, 'HH24') < '20' then trunc(sysdate) + 20/24 when to_char(sysdate, 'HH24') < '21' then trunc(sysdate) + 21/24 else trunc(sysdate) + 19/24 + 1 end |
И при выполнении операции "поставить задание в очередь" удали дату и время следующего выполнения... Опять же пишу умозрительно, но мне удавалось добиться необходимого поведения
Если получится, напиши, ок? |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Чт Дек 13, 2007 18:16   |
|
Полезность: Нет оценки
|
sergius_79 пишет: | Если получится, напиши, ок? |
ОК! Все получилось! Немного глючит штатный интерпретатор выражения, из-за чего с предложенным выражением программа полагает, что интервал запуска составляет две недели плюс два дня
Именно поэтому, приходится очищать поле дата/время при запуске. Но - работает! Спасибо! |
|
 |
pychick Участник
Вступление в Клуб: 28.01.2009
|
Пн Фев 15, 2010 15:36   |
|
Полезность: Нет оценки
|
sergius_79 пишет: | Действительно, почему-то decode не понимает... Вот что значит непроверенные данные. А теперь проверенные данные |
Большое спасибо, очень помогло. _________________ семь раз отпей, один отъешь |
|
 |
dimyaz86 Участник
Вступление в Клуб: 13.09.2016
|
Чт Авг 03, 2017 11:28   |
|
Полезность: Нет оценки
|
А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами. |
|
 |
Gobur Профи
Вступление в Клуб: 06.11.2012
|
Чт Авг 03, 2017 12:53   |
|
Полезность: Нет оценки
|
dimyaz86 пишет: | А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами. |
job в оракле - можешь в сессиях их даже смотреть. У ЦФТ уже реализована операция - Изменить параметры, в которой периодичность задается. Ну и плюс есть операции по останову и запуску. По останову и запуску - в ЗОД используем - определнные задания тормозим, потом снова запускаем |
|
 |
dimyaz86 Участник
Вступление в Клуб: 13.09.2016
|
Чт Авг 03, 2017 15:16   |
|
Полезность: Нет оценки
|
Gobur пишет: | dimyaz86 пишет: | А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами. |
job в оракле - можешь в сессиях их даже смотреть. У ЦФТ уже реализована операция - Изменить параметры, в которой периодичность задается. Ну и плюс есть операции по останову и запуску. По останову и запуску - в ЗОД используем - определнные задания тормозим, потом снова запускаем |
Я про то, что как обратиться к экземпляру Задания "SYSTEM_JOBS" внутри операции, которую он сам запустил? Есть ЦФТшный способ? Или надо селектить свою сессию и уже через нее выходить? |
|
 |
Guest_SPb Участник со стажем
Вступление в Клуб: 27.02.2014
|
Чт Авг 03, 2017 15:34   |
|
Полезность: Нет оценки
|
dimyaz86 пишет: |
Я про то, что как обратиться к экземпляру Задания "SYSTEM_JOBS" внутри операции, которую он сам запустил? Есть ЦФТшный способ? Или надо селектить свою сессию и уже через нее выходить? |
Смотря что понимается под словами "обратиться к экземпляру".
Возможно, под этим понимается запрос той информации, которую возвращает функция method_id(...) из библиотеки JOB_LIB в типе "Выполнение заданий по расписанию" ?
Посмотрите функции этой библиотеки - возможно тогда пропадёт половина вопросов. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|