Изменение задания оракула для запуска каждые 5 секунд с определенного времени до определенного времени каждый день

РЕДАКТИРОВАТЬ: Мне нужно, чтобы нижеуказанная работа выполнялась с 11 вечера до 5:35 утра, каждые 5 секунд в этом окне, каждый день.

Итак, что я сделал, так это установил следующее для запуска каждые 5 секунд.

BEGIN

DBMS_SCHEDULER.SET_ATTRIBUTE (
    name => 'test_job',
    attribute => 'repeat_interval',
    value => 'freq=secondly;bysecond=5;'
);

END;

затем start_date и end_date, чтобы запустить его с 9 вечера сегодняшнего дня до 5:35 утра завтрашнего дня.

BEGIN

DBMS_SCHEDULER.SET_ATTRIBUTE (
    name => 'test_job',
    attribute => 'start_date',
    value => TO_TIMESTAMP_TZ('2018-01-29 21:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR')
);

END;

BEGIN

DBMS_SCHEDULER.SET_ATTRIBUTE (
    name => 'test_job',
   attribute => 'end_date',
    value => TO_TIMESTAMP_TZ('2018-01-30 05:35:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR')
);

END;

Теперь проблема в том, что это будет работать один раз. Я не уверен, как заставить его работать ежедневно, не отказываясь от правила каждые 5 секунд. Я предполагаю, что мне может понадобиться использовать start_date и duration и опустить end_date для достижения моей цели, хотя я не уверен, как указать продолжительность.

3 ответа

Вы можете создать такую ​​работу, вызвав хранимую процедуру с именем pr_test выполняя некоторые операции каждые пять секунд:

begin
dbms_scheduler.create_job (
   job_name           =>  'test_job',
   job_type           =>  'STORED_PROCEDURE',
   job_action         =>  'pr_test',
   start_date         =>  TO_TIMESTAMP_TZ('2018-01-30 21:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR'),
   end_date           =>  TO_TIMESTAMP_TZ('2018-01-30 21:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR') + (17/48), -- 8.5 hours
   repeat_interval    =>  'freq=secondly; interval=5;',
   enabled            =>  true); 
end;
/

Если вы хотите, чтобы задание планировщика выполнялось каждый день, это более сложно с определениями времени окончания и интервала (учитывая сегодняшнюю дату как начало), без end_date, это работает до 06:00 следующего дня:

begin
dbms_scheduler.create_job (
   job_name           =>  'test_job',
   job_type           =>  'STORED_PROCEDURE',
   job_action         =>  'pr_test',
   start_date         =>  TO_TIMESTAMP_TZ('2018-01-30 21:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR'),
   repeat_interval    =>  'freq=secondly;interval=5;byhour=21,22,23,0,1,2,3,4,5;byday=tue,wed,thu,fri,sat,sun,mon;',
   enabled            =>  true); 
end;
/

и может отслеживать с этой точки зрения:

select * 
  from dba_scheduler_job_log l
 where l.job_name = 'TEST_JOB'
 order by l.log_date desc;

Следующий блок PL/SQL создает облегченное задание. Облегченные задания должны ссылаться на программу, а тип программы должен быть "PLSQL_BLOCK" или "STORED_PROCEDURE". Кроме того, программа должна быть уже включена при создании задания.

Смотрите образец для справки. И, пожалуйста, дайте мне знать, если это поможет.

BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
       job_name         =>  'my_lightweight_job1',
       program_name     =>  'polling_prog_n2',
       repeat_interval  =>  'FREQ=SECONDLY;INTERVAL=5',
       end_date         =>  '30-JAN-18 05.35.00 AM',
       job_style        => 'LIGHTWEIGHT',
       comments         => 'Job that polls device n2 every 5 seconds');
    END;
    /

В этом случае лучше всего создать два отдельных расписания (две работы не нужны). Затем используйте repeat_interval=>'v1,v2' в качестве расписания. См. ниже

       set echo on
 
 begin
   dbms_scheduler.drop_schedule( schedule_name => 'v1');
   dbms_scheduler.drop_schedule( schedule_name => 'v2');
 end;
 /
 begin
   dbms_scheduler.create_schedule( schedule_name => 'v1',
      repeat_interval=>'FREQ=SECONDLY;INTERVAL=30;BYHOUR=0,1,2,3,4,23');
   dbms_scheduler.create_schedule( schedule_name => 'v2',
        repeat_interval => ' FREQ=SECONDLY;INTERVAL=30;BYHOUR=5;'|| 
  'BYMINUTE=0,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');
 end;
 /
 set serveroutput on
 begin
   print_dates('v1,v2', to_timestamp_tz('01-JAN-2022 20:00:00',
                         'DD-MON-YYYY HH24:MI:SS'), 100);
   print_dates('v1,v2', to_timestamp_tz('02-JAN-2022 04:50:00',
                         'DD-MON-YYYY HH24:MI:SS'), 100);
 end;
 /
 

Примечание. Я использовал interval=30, чтобы уменьшить выходные данные теста, а ниже приведена функция print_dates, которая принимает Repeat_Interval в качестве входных данных и создает список дат выполнения для интервала повторения.

      create or replace procedure print_dates 
 (
  cal_string in varchar2,
  start_date in timestamp with local time zone,
  nr_of_dates in pls_integer
 )
is
  date_after timestamp with local time zone := 
                   start_date - interval '1' second;
  next_execution_date timestamp with local time zone;
begin
  for i in 1 .. nr_of_dates
  loop
    dbms_scheduler.evaluate_calendar_string
     (cal_string, start_date, date_after, next_execution_date);

    dbms_output.put_line(to_char(next_execution_date,
                                 'DY DD-MON-YYYY (DDD-IW) HH24:MI:SS'));

    date_after := next_execution_date;
  end loop;
end;
/

И, наконец, вывод кода:

       SQL> SQL> SQL> SQL>   2    3    4    5  
 PL/SQL procedure successfully completed.
 
 SQL>   2    3    4    5    6    7    8  
 PL/SQL procedure successfully completed.
 
 SQL> SQL>   2    3    4    5  -->
 SAT 01-JAN-2022 (001-52) 23:00:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:00:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:01:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:01:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:02:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:02:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:03:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:03:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:04:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:04:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:05:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:05:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:06:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:06:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:07:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:07:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:08:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:08:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:09:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:09:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:10:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:10:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:11:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:11:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:12:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:12:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:13:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:13:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:14:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:14:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:15:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:15:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:16:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:16:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:17:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:17:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:18:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:18:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:19:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:19:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:20:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:20:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:21:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:21:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:22:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:22:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:23:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:23:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:24:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:24:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:25:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:25:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:26:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:26:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:27:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:27:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:28:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:28:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:29:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:29:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:30:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:30:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:31:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:31:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:32:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:32:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:33:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:33:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:34:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:34:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:35:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:35:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:36:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:36:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:37:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:37:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:38:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:38:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:39:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:39:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:40:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:40:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:41:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:41:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:42:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:42:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:43:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:43:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:44:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:44:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:45:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:45:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:46:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:46:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:47:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:47:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:48:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:48:30  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:49:00  +00 +00:00
 SAT 01-JAN-2022 (001-52) 23:49:30  +00 +00:00
 -->
 SUN 02-JAN-2022 (002-52) 04:50:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:50:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:51:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:51:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:52:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:52:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:53:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:53:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:54:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:54:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:55:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:55:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:56:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:56:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:57:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:57:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:58:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:58:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:59:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 04:59:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:00:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:00:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:01:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:01:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:02:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:02:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:03:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:03:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:04:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:04:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:05:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:05:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:06:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:06:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:07:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:07:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:08:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:08:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:09:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:09:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:10:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:10:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:11:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:11:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:12:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:12:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:13:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:13:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:14:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:14:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:15:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:15:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:16:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:16:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:17:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:17:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:18:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:18:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:19:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:19:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:20:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:20:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:21:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:21:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:22:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:22:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:23:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:23:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:24:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:24:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:25:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:25:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:26:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:26:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:27:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:27:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:28:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:28:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:29:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:29:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:30:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:30:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:31:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:31:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:32:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:32:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:33:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:33:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:34:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:34:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:35:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 05:35:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:00:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:00:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:01:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:01:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:02:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:02:30  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:03:00  +00 +00:00
 SUN 02-JAN-2022 (002-52) 23:03:30  +00 +00:00
 
 PL/SQL procedure successfully completed.
Другие вопросы по тегам