具有多个频率的 Oracle 调度程序作业
Posted
技术标签:
【中文标题】具有多个频率的 Oracle 调度程序作业【英文标题】:Oracle Scheduler Jobs with multiple frequency 【发布时间】:2020-03-12 06:12:22 【问题描述】:我正在创建调度程序作业以通过存储过程进行备份,我处于这样一种情况,用户将选择多个频率,例如
在第一种情况下,用户选择每月作为工作的频率。
在第二种情况下,用户选择每周作为工作频率(可能是不同的日期组合)。
在第三种情况下,用户选择 Daily 作为 Job 的频率,依此类推。
因此,就目前而言,同一个作业有 3 个(根据用户的安排可能更多)频率。最好的方法是什么? 我必须以多个频率或任何其他更好的方式安排相同的工作。
【问题讨论】:
我认为实现它的最佳和干净的方法是为不同的频率创建 3 个不同的 JOBS,并根据用户的输入启用/禁用它们。 感谢您的快速回复。我也是这么想的,但只是想知道有没有更好的方法来实现这一点。 我假设您正在运行不同的命令。在不同频率上运行相同的命令会很奇怪。如果是这样,您必须为每个频率创建一个工作。 请记住,Daily 作业也会每周和每月执行一次,那么为什么需要多个频率? @Wernfried Domscheit 我从事过不同频率的多个工作。我必须这样做,因为我们不知道用户需要运行哪些模式。 【参考方案1】:我认为实现它的最佳和干净的方法是为不同的频率创建 3 个不同的 JOBS,并根据用户的输入启用/禁用它们
如何在 PL/SQL 中启用/禁用作业:
BEGIN
dbms_scheduler.disable('<JOB_NAME>');
END;
/
BEGIN
dbms_scheduler.enable('<JOB_NAME>');
END;
/
干杯!!
【讨论】:
【参考方案2】:您可以创建一个过程并根据用户的输入动态更改以下参数:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'job_name',
job_type => 'STORED_PROCEDURE',
job_action => 'PROCEDURE_NAME',
start_date => 'START_DATE',
repeat_interval => 'FREQ=DAILY;INTERVAL=1', /* every other day */
end_date => 'END_DATE',
auto_drop => FALSE,
comments => 'My new job');
END;
/
【讨论】:
感谢您的快速响应。如果用户想每年、每月和每周(整个星期一)安排相同的工作怎么办? 然后您可以为同一程序创建多个作业,因为最终您只想执行程序。你不能在一个工作中同时提到DAILY and MONTHLY
。以上是关于具有多个频率的 Oracle 调度程序作业的主要内容,如果未能解决你的问题,请参考以下文章