将oracle作业更改为每天从特定时间到特定时间每5秒运行一次

将oracle作业更改为每天从特定时间到特定时间每5秒运行一次,oracle,plsql,dbms-scheduler,Oracle,Plsql,Dbms Scheduler,编辑:我需要下面的作业从晚上11点运行到早上5点35分,在该窗口中每5秒运行一次,每天 到目前为止,我所做的是将下面的设置为每5秒运行一次 BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'test_job', attribute => 'repeat_interval', value => 'freq=secondly;bysecond=5;' ); END; 然后是开始日期和结束日期,使其从今天晚上9点

编辑:我需要下面的作业从晚上11点运行到早上5点35分,在该窗口中每5秒运行一次,每天

到目前为止,我所做的是将下面的设置为每5秒运行一次

BEGIN

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

END;
然后是开始日期和结束日期,使其从今天晚上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秒规则的情况下让它每天运行。我假设我可能需要使用开始日期和持续时间,而忽略结束日期来实现我的目标,尽管我不确定如何指定持续时间。

下面的PL/SQL块创建了一个轻量级作业。轻量级作业必须引用程序,并且程序类型必须为“PLSQL_块”或“存储过程”。此外,创建作业时必须已启用该程序

参考样品。如果有帮助,请告诉我

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;
    /

下面的PL/SQL块创建了一个轻量级作业。轻量级作业必须引用程序,并且程序类型必须为“PLSQL_块”或“存储过程”。此外,创建作业时必须已启用该程序

参考样品。如果有帮助,请告诉我

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;
    /

您可以创建这样一个作业,调用名为
pr\u 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;
/
如果您希望每天运行计划程序作业,则结束时间和间隔定义(将今天的日期视为开始)更为复杂,如果没有结束日期,则此项工作将持续到第二天早上6: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;

您可以创建这样一个作业,调用名为
pr\u 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;
/
如果您希望每天运行计划程序作业,则结束时间和间隔定义(将今天的日期视为开始)更为复杂,如果没有结束日期,则此项工作将持续到第二天早上6: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;

但这只会持续到2018-01-30 05:35:00,对吗?我需要它每天从晚上11点运行到早上5点35分,每5秒运行一次。我不确定我如何才能做到这一点,或者是否真的做到了possible@GomuGomuZoro是的,准确地说,这一直持续到2018-01-30 05:35:00。请更新您的问题以包括每日选项。顺便说一下,在这种情况下,end_date参数将是无意义的。是的,我正在试图找出如何编辑作业,使其每天运行,而不是使用结束日期,它只运行一次。但这只会运行到2018-01-30 05:35:00,对吗?我需要它每天从晚上11点运行到早上5点35分,每5秒运行一次。我不确定我如何才能做到这一点,或者是否真的做到了possible@GomuGomuZoro是的,准确地说,这一直持续到2018-01-30 05:35:00。请更新您的问题以包括每日选项。顺便说一下,在这种情况下,end_date参数将是无意义的。是的,我正在试图找出如何编辑作业,使其每天运行,而不是使用结束日期,使其只运行一次。