编辑:我需要以下工作从晚上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点到明天上午05: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来实现我的目标,尽管我不确定如何指定持续时间。
答案 0 :(得分:0)
以下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;
/
答案 1 :(得分:0)
您可以创建这样一个作业,调用名为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 am第二天:
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;