Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Сен 19, 2011 07:27 |
|
Полезность: Нет оценки
|
nataly пишет: | Посмотрите свежим взглядом, что где проср...не учла
...
Если попался сбойный по признаку 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. Не смотрите на них. |
Я бы на них и не смотрела, только по ним как раз пользователи ориентируются, что работает, а что нет  |
|
 |
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.
Подумайте - через месяц вам понадобится сделать этот справочник историческим - что вы будете делать? Городить составной ключ?  |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Вт Окт 04, 2011 13:32 |
|
Полезность: Нет оценки
|
nataly пишет: | Random пишет: | nataly пишет: | т.е. я поубивала нафиг все джобы, а z$system|_job и z#text_job этого не видят, у них типа все работает... |
А это справочники Платформы Развития, и являются всего лишь надстройками над Oracle. Не смотрите на них. |
Я бы на них и не смотрела, только по ним как раз пользователи ориентируются, что работает, а что нет  |
В таком случае посоветую эмулировать работу польователя так, как он (пользователь) это делал бы через АРМ НАвигатор.
Например:
Код: |
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 пишет: |
Строго не ругать, пишу по памяти |
Два вложенных цикла.. Ай-яй-яй..
Коллеги, а чем обвязка TEXT_JOBS не подходит?
Зачем вы начали сочинять новую? |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Окт 05, 2011 05:54 |
|
Полезность: Нет оценки
|
maestro пишет: | Random пишет: |
Строго не ругать, пишу по памяти |
Два вложенных цикла.. Ай-яй-яй..
|
Ну можно Locate использовать, но зачем? во втором цикле вытаскивается одна запись, если она есть, и не происходит NO_DATA_FOUND, который жрет много ресурсов, если такой записи нет. ИМХО так гораздо практичнее
Ну ещё можно было запихнуть второй запрос в первый по внешнему соединению
Переписывать уже не буду
maestro пишет: | Коллеги, а чем обвязка TEXT_JOBS не подходит?
Зачем вы начали сочинять новую? |
Наверное тем, что я ее не знаю.
Расскажи, что это, и как ее применять? |
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Ср Окт 05, 2011 09:48 |
|
Полезность: 1
|
Random пишет: |
Ну можно Locate использовать, но зачем? во втором цикле вытаскивается одна запись, если она есть, и не происходит NO_DATA_FOUND, который жрет много ресурсов, если такой записи нет. ИМХО так гораздо практичнее
Ну ещё можно было запихнуть второй запрос в первый по внешнему соединению
Переписывать уже не буду  |
Сразу резанули глаз вложенные циклы. Ну а когда понял смысл того, что написано, то сразу захотелось пальчиком погрозить.
ВЛОЖЕННЫЕ ЦИКЛЫ - это один из основных тормозов системы. Проблема - в частом переключении контекста 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 пишет: | по-моему поняла что за хрень
Хренов движок не генерит пероцедуру |
По-моему, Вам пора завязывать с курением гашышА  |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Окт 12, 2011 05:35 |
|
Полезность: Нет оценки
|
vtar пишет: | По-моему, Вам пора завязывать с курением гашышА  |
Я тоже ничего не понял. |
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Ср Окт 12, 2011 13:23 |
|
Полезность: Нет оценки
|
vtar пишет: | nataly пишет: | по-моему поняла что за хрень
Хренов движок не генерит пероцедуру |
По-моему, Вам пора завязывать с курением гашышА  |
+1
Натали, разберитесь вначале как операция ЦФТ компилируется в пакет, затем уже приступайте к сложным задачам типа создания job'ов.
Как разберетесь, поэкспериментируйте с коммитами и блокировками в теле и валидаторе, получите массу полезных знаний!
И не стесняйтесь нажимать на F12!  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|