【问题标题】:Oracle Scheduler Jobs with multiple frequency具有多个频率的 Oracle 调度程序作业
【发布时间】:2020-03-12 06:12:22
【问题描述】:

我正在创建调度程序作业以通过存储过程进行备份,我处于这样一种情况,用户将选择多个频率,例如

在第一种情况下,用户选择每月作为工作的频率。

在第二种情况下,用户选择每周作为工作频率(可能是不同的日期组合)。

在第三种情况下,用户选择 Daily 作为 Job 的频率,依此类推。

因此,就目前而言,同一个作业有 3 个(根据用户的安排可能更多)频率。最好的方法是什么? 我必须以多个频率或任何其他更好的方式安排相同的工作。

【问题讨论】:

  • 我认为实现它的最佳和干净的方法是为不同的频率创建 3 个不同的 JOBS,并根据用户的输入启用/禁用它们。
  • 感谢您的快速回复。我也是这么想的,但只是想知道有没有更好的方法来实现这一点。
  • 我假设您正在运行不同的命令。在不同频率上运行相同的命令会很奇怪。如果是这样,您必须为每个频率创建一个工作。
  • 请记住,Daily 作业也会每周和每月执行一次,那么为什么需要多个频率?
  • @Wernfried Domscheit 我从事过不同频率的多个工作。我必须这样做,因为我们不知道用户需要运行哪些模式。

标签: sql oracle dbms-job


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-02-19
    相关资源
    最近更新 更多