CftClub.ru
Клуб специалистов ЦФТ-Банк

Программное создание джобов
На страницу Пред.  1, 2, 3, 4  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Сен 19, 2011 07:27    Ответить с цитатой
Полезность: Нет оценки
nataly пишет:
Посмотрите свежим взглядом, что где проср...не учла Smile
...
Если попался сбойный по признаку FAILURES>1, то форма выдает ошибку, типа сори, сбойнула, почистите пож уже сформированные неполные данные ручками и удалите умершие и живые джобы.


Заведите справочник, в который при создании джоба будете записывать информацию типа: "Нужно сделать то-то".

В запускаемый джоб передайте идентификатор записи и первым же действием путь он установит статус у своей записи - я работаю.
Таким образом вы из сессии, из которой запускали джобы в работу, будете знать, что данная порция работы начала выполняться.

Вторым действием при старте джоба в эту же запись поместите sid и serial# из v$session. Их выдают DBMS_DEBUG_JDWP.current_session_id; и DBMS_DEBUG_JDWP.current_session_serial;

По ним можно отслеживать то, что сессии джобов живут и делают дело, а не стоят в сторонке и курят (а также подсматривать - что именно они делают, и долго ли этим будут еще заниматься).

Перед тем, как самоудалиться, то есть в тот момент, когда его существование уже не важно, так как вся работа выполнена, заставьте его сменить статус на "Ваш приказ выполнен, сэр!"

По окончании работы не забудьте сбросить эти значения в null, так как все уникальные идентификаторы сессий имеют свойство повторяться с периодичностью так в неделю.

А Failures не нужно использовать, так как это - количество неудачных попыток запуска одного джоба. То есть ничего не значит до тех пор, пока джоб не сломается (broken).


Последний раз редактировалось: Random (Пн Сен 19, 2011 07:35), всего редактировалось 1 раз
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Сен 19, 2011 07:29    Ответить с цитатой
Полезность: Нет оценки
nataly пишет:
т.е. я поубивала нафиг все джобы, а z$system|_job и z#text_job этого не видят, у них типа все работает...


А это справочники Платформы Развития, и являются всего лишь надстройками над Oracle. Не смотрите на них.
nataly
Участник со стажем


Вступление в Клуб: 22.07.2011
СообщениеПт Сен 30, 2011 16:16    Ответить с цитатой
Полезность: Нет оценки
Random пишет:
nataly пишет:
т.е. я поубивала нафиг все джобы, а z$system|_job и z#text_job этого не видят, у них типа все работает...


А это справочники Платформы Развития, и являются всего лишь надстройками над Oracle. Не смотрите на них.


Я бы на них и не смотрела, только по ним как раз пользователи ориентируются, что работает, а что нет Sad
nataly
Участник со стажем


Вступление в Клуб: 22.07.2011
СообщениеПт Сен 30, 2011 16:20    Ответить с цитатой
Полезность: Нет оценки
По вопросу создания справочника.
Пытаюсь создать программным путем из интерфейса, он мне создается с полем id и первичным ключем по нему. мне оно нафиг не нужно, этот справочник будет носить характер временного, первичный ключ по id тут совсем ни к чему.
Как бы избавиться от этого id ?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеВт Окт 04, 2011 13:14    Ответить с цитатой
Полезность: Нет оценки
nataly пишет:
По вопросу создания справочника.
Пытаюсь создать программным путем из интерфейса, он мне создается с полем id и первичным ключем по нему. мне оно нафиг не нужно, этот справочник будет носить характер временного, первичный ключ по id тут совсем ни к чему.
Как бы избавиться от этого id ?


Нельзя!

Это сейчас не надо, а потом понадобится.
Привыкайте сразу к нормальной 3-ей форме.

У меня коллега как-то тоже создал справочник без id, вроде и не нужен был... Как я потом (через год примерно) ругался!

Кроме того, Платформа Развития не предполагает существование справочников без id.

Подумайте - через месяц вам понадобится сделать этот справочник историческим - что вы будете делать? Городить составной ключ? Smile
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеВт Окт 04, 2011 13:32    Ответить с цитатой
Полезность: Нет оценки
nataly пишет:
Random пишет:
nataly пишет:
т.е. я поубивала нафиг все джобы, а z$system|_job и z#text_job этого не видят, у них типа все работает...


А это справочники Платформы Развития, и являются всего лишь надстройками над Oracle. Не смотрите на них.


Я бы на них и не смотрела, только по ним как раз пользователи ориентируются, что работает, а что нет Sad


В таком случае посоветую эмулировать работу польователя так, как он (пользователь) это делал бы через АРМ НАвигатор.

Например:
Код:

declare
s$short varchar2(32767) := &METHOD$SNAME; -- короткое имя операции
s$class varchar2(32767) := &METHOD$CLASS; -- класс операции
s$name varchar2(32767) := &METHOD$NAME; -- длинное имя операции
r$system_job   ref [SYSTEM_JOBS];

begin
   for (select p(p:id, p.[STOP_TIME]) in ::[SYSTEM_JOBS] all where p.[METHOD_CLASS] = s$class and p.[SHORT_NAME] = s$short) loop
      for (select x(x.[FAILURES]:failures$, x.[EXECUTE]:execute$, x.[JOB]:job$, x.[START_TIME]:start_time$, x.[STOP_TIME]:stop_time$
               ) in ::[SYSTEM_JOBS] all where x = p.[id]) loop
         if x.[failures$] = 0 then
            if x.[execute$] = '1' then
               null;
            elsif x.[job$] = 0 then
               null;
            elsif x.[start_time$] is null then
               null;
            elsif x.[stop_time$] is null then
               pragma error('Задание активно. Подождите завершения задания и повторите операцию');
            end if;
         end if;
         exit;
      end loop;
      /*r$system_job := p.[id];
-- так можно удалить задание
      r$system_job.delete_job; -- из очереди
      r$system_job.remove_job; -- из списка
*-/
      exit;
   end loop;

   /*if r$system_job is null then
-- добавляем задание в список
      r$system_job := ::[SYSTEM_JOBS].NEW#AUTO(s$class, s$short, s$name);
   end if;
-- ... добавляем в очередь
   r$system_job.ADD_JOB;

r$system_job.[FIRST_TIME] := null; -- время первого запуска пока не определено
r$system_job.[INTERVAL] := v$tmp; --' тут полная фантазия определения интервала запуска';
-- v_start - типа date, содержит дату/время, когда стартовать
-- ... и активируем
   r$system_job.SUBMIT_JOB(s$name, v_start, v$tmp, false);

end;

Строго не ругать, пишу по памяти
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеВт Окт 04, 2011 14:09    Ответить с цитатой
Полезность: Нет оценки
Random пишет:

Строго не ругать, пишу по памяти

Два вложенных цикла.. Ай-яй-яй.. Smile

Коллеги, а чем обвязка TEXT_JOBS не подходит?
Зачем вы начали сочинять новую?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Окт 05, 2011 05:54    Ответить с цитатой
Полезность: Нет оценки
maestro пишет:
Random пишет:

Строго не ругать, пишу по памяти

Два вложенных цикла.. Ай-яй-яй.. Smile

Ну можно Locate использовать, но зачем? во втором цикле вытаскивается одна запись, если она есть, и не происходит NO_DATA_FOUND, который жрет много ресурсов, если такой записи нет. ИМХО так гораздо практичнее Smile

Ну ещё можно было запихнуть второй запрос в первый по внешнему соединению Smile
Переписывать уже не буду Smile

maestro пишет:
Коллеги, а чем обвязка TEXT_JOBS не подходит?
Зачем вы начали сочинять новую?

Наверное тем, что я ее не знаю.
Расскажи, что это, и как ее применять?
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеСр Окт 05, 2011 09:48    Ответить с цитатой
Полезность: 1
Random пишет:

Ну можно Locate использовать, но зачем? во втором цикле вытаскивается одна запись, если она есть, и не происходит NO_DATA_FOUND, который жрет много ресурсов, если такой записи нет. ИМХО так гораздо практичнее Smile

Ну ещё можно было запихнуть второй запрос в первый по внешнему соединению Smile
Переписывать уже не буду Smile

Сразу резанули глаз вложенные циклы. Ну а когда понял смысл того, что написано, то сразу захотелось пальчиком погрозить.
ВЛОЖЕННЫЕ ЦИКЛЫ - это один из основных тормозов системы. Проблема - в частом переключении контекста SQL и PL/SQL, а также в излишних фетчах. Когда смотришь трейс какого-нть отчета, построенного на вложенных циклах, то наворачиваются слезы.
Поэтому, когда у Вас возникает желание вложить один цикл в другой, подумайте: А нельзя ли все красиво оформить в виде одного SQL-запроса?

(Если же смотреть на Ваш пример, то достаточно будет клаузу select из 2-го запроса перенести в 1й.)
Random пишет:

maestro пишет:
Коллеги, а чем обвязка TEXT_JOBS не подходит?
Зачем вы начали сочинять новую?

Наверное тем, что я ее не знаю.
Расскажи, что это, и как ее применять?
[/quote]
Рассказывать долго.
Вкратце - это как раз то, что вы здесь обсуждаете. TEXT_JOBS - потомок SYSTEM_JOBS и служит для управления JOBами.
SYSTEM_JOBS - для создания периодически-запускаемых заданий по расписанию.
TEXT_JOBS - для разовых заданий. Хорошо применяется для распараллеливания тяжелых операций. Может принимать на вход PL+.

Более подробную информацию можно получить из примеров использования, которые ищутся поиском.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Окт 05, 2011 18:29    Ответить с цитатой
Полезность: Нет оценки
maestro пишет:
Сразу резанули глаз вложенные циклы. Ну а когда понял смысл того, что написано, то сразу захотелось пальчиком погрозить.
ВЛОЖЕННЫЕ ЦИКЛЫ - это один из основных тормозов системы. Проблема - в частом переключении контекста SQL и PL/SQL, а также в излишних фетчах.

Правильно. Однако в данном случае у нас копеечный объем - несколько десятков, максимум - сотен джобов.

А особенные тормоза наступают, когда контекст SQL переключается на контекст pl/sql. когда наоборот - этого почти не заметно (практически аналог nested-соединения).
Именно поэтому функции в SQL-запросах - зло!
maestro пишет:

Когда смотришь трейс какого-нть отчета, построенного на вложенных циклах, то наворачиваются слезы.
Поэтому, когда у Вас возникает желание вложить один цикл в другой, подумайте: А нельзя ли все красиво оформить в виде одного SQL-запроса?

(Если же смотреть на Ваш пример, то достаточно будет клаузу select из 2-го запроса перенести в 1й.)

Я уже написал, что переписывать уже не буду.
Иллюстрация есть, чего еще нужно...

maestro пишет:
TEXT_JOBS - потомок SYSTEM_JOBS и служит для управления JOBами.
SYSTEM_JOBS - для создания периодически-запускаемых заданий по расписанию.
TEXT_JOBS - для разовых заданий. Хорошо применяется для распараллеливания тяжелых операций. Может принимать на вход PL+.

Спасибо.
nataly
Участник со стажем


Вступление в Клуб: 22.07.2011
СообщениеВт Окт 11, 2011 17:54    Ответить с цитатой
Полезность: Нет оценки
Еще одну хрень понять не могу, вот есть у меня в отчете операция "Проверка" и "Тело"
вот разнесла я логику по этим двум закладкам, в Проверке запускаются джобы, во-второй проверяется их состояние и при удачном завершении - обработка сформированных джобами данных.
С какого-то хрена в одних формах у меня запускаются обе части, а в некоторых - только то, что в Проверке.
Запустив джобы, прога выходит на форму параметром и Тело уже в упор не видит (((
nataly
Участник со стажем


Вступление в Клуб: 22.07.2011
СообщениеВт Окт 11, 2011 18:09    Ответить с цитатой
Полезность: Нет оценки
по-моему поняла что за хрень
Хренов движок не генерит пероцедуру ...EXECUTE
Вернее генерит как-то, но там я вижу старый код, а внесенные исправления не попадают.
Что за ерунда-то?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Окт 11, 2011 21:01    Ответить с цитатой
Полезность: Нет оценки
nataly пишет:
по-моему поняла что за хрень
Хренов движок не генерит пероцедуру

По-моему, Вам пора завязывать с курением гашышА Cool
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Окт 12, 2011 05:35    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
По-моему, Вам пора завязывать с курением гашышА Cool

Я тоже ничего не понял.
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеСр Окт 12, 2011 13:23    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
nataly пишет:
по-моему поняла что за хрень
Хренов движок не генерит пероцедуру

По-моему, Вам пора завязывать с курением гашышА Cool

+1

Натали, разберитесь вначале как операция ЦФТ компилируется в пакет, затем уже приступайте к сложным задачам типа создания job'ов.

Как разберетесь, поэкспериментируйте с коммитами и блокировками в теле и валидаторе, получите массу полезных знаний!

И не стесняйтесь нажимать на F12! Smile
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4  След.
Страница 2 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru