具有多个频率的 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 调度程序作业的主要内容,如果未能解决你的问题,请参考以下文章

在matlab中提取具有多个频率分量的信号

在操作系统中,啥是进程的作业调度,交换调度和进程调度?

软件测试第二次作业 - 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。

Java定时调度任务的实现

数据仓库任务调度系统平台建设

如何缩放具有不同频率的多个KDE图?