gpt4 book ai didi

Oracle DBMS_SCHEDULER 用例一次运行 1 个作业,但将后续作业排队以运行 FIFO

转载 作者:行者123 更新时间:2023-12-03 20:44:43 30 4
gpt4 key购买 nike

创建资源,并将作业限制为 1

begin dbms_scheduler.create_resource(resource_name=>'SO_TEST_RESOURCE',units=>'1'); END;
虽然我可以创建作业、分配资源甚至优先级,但排队的后续作业(分配给相同资源和各种优先级)以随机顺序运行,而不是按 FIFO 和优先级顺序运行。寻找一种方法来强制排队(分配给同一资源)的下一个作业成为运行 的作业。下一个 .
DBMS_SCHEDULER.create_job (
job_name => 'SO_JOB1_TEST_RESOURCE',
job_type => 'PLSQL_BLOCK',
job_action => 'begin DBMS_SESSION.sleep(40); end;',
auto_drop => true,
start_date => systimestamp,
enabled => false);

DBMS_SCHEDULER.set_resource_constraint (
object_name => 'SO_JOB1_TEST_RESOURCE',
resource_name => 'SO_TEST_RESOURCE',
units => 1);

DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME => 'SO_JOB1_TEST_RESOURCE',
ATTRIBUTE => 'job_priority',
VALUE =>1 );

DBMS_SCHEDULER.enable('SO_JOB1_TEST_RESOURCE');

.... adding more jobs 2, 3, 4 run in random order

最佳答案

甲骨文 DBMS_SCHEUDLER CHAINS可能是您正在寻找的。您可以先创建一个链

BEGIN
DBMS_SCHEDULER.CREATE_CHAIN (
chain_name => 'my_chain1',
rule_set_name => NULL,
evaluation_interval => NULL,
comments => 'My first chain');
END;
/
...然后将每个计划的作业作为链中的步骤添加到链中。
BEGIN
DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
chain_name => 'my_chain1',
step_name => 'my_step1',
program_name => 'my_program1');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
chain_name => 'my_chain1',
step_name => 'my_step2',
program_name => 'my_chain2');
END;
/
作业链还可以做很多事情,比如检查状态、实现重启逻辑等。Oracle 文档将是很好的引用。

关于Oracle DBMS_SCHEDULER 用例一次运行 1 个作业,但将后续作业排队以运行 FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66211326/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com