欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【11g】Job Chains: Chains操作(Enabling、Dropping 、Running 、Disabling 、Pausing 、Stopping 、Running )

程序员文章站 2022-06-08 12:14:23
...

Enabling Chains

使用enable过程启用链。在作业运行链之前,必须启用它。启用已启用的链不会返回错误。

The following example enables chain my_chain1:

BEGIN
  DBMS_SCHEDULER.ENABLE ('my_chain1');
END;
/

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the ENABLE procedure.

Note:

Chains are automatically disabled by the Scheduler when:

  • The program that one of the chain steps points to is dropped

  • The nested chain that one of the chain steps points to is dropped

  • The event schedule that one of the chain event steps points to is dropped

 

Dropping Chains

通过使用DROP_CHAIN过程,可以删除一个链,包括它的步骤和规则。下面是一个掉链子的例子 my_chain1:

BEGIN
  DBMS_SCHEDULER.DROP_CHAIN (
   chain_name   => 'my_chain1',
   force        => TRUE);
END;
/

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the DROP_CHAIN procedure.

Running Chains

You can use the following two procedures to run a chain immediately:

  • RUN_JOB

  • RUN_CHAIN

如果您已经为一个链创建了一个链作业,那么您可以使用RUN_JOB过程来运行该作业(从而运行链),但是您必须将RUN_JOB的use_current_session参数设置为FALSE。

您可以使用RUN_CHAIN过程来运行一个链,而不必首先为该链创建一个链作业。还可以使用RUN_CHAIN只运行链的一部分。

RUN_CHAIN创建一个临时作业来运行指定的链。如果提供作业名称,则使用该名称创建作业,否则将分配缺省作业名称。

如果提供了启动步骤列表,则只有在链开始运行时才启动这些步骤。(如果不在列表中,通常会启动的步骤将不会运行。)如果没有给出启动步骤列表,则链将正常启动—也就是说,将执行初始评估,以查看启动哪些步骤。下面是一个例子,它立即运行链my_chain1:

BEGIN
  DBMS_SCHEDULER.RUN_CHAIN (
   chain_name    =>  'my_chain1',
   job_name      =>  'partial_chain_job',
   start_steps   =>  'my_step2, my_step4');
END;
/

See Also:

Dropping Chain Rules

You drop a rule from a chain by using the DROP_CHAIN_RULE procedure. An example is the following, which drops my_rule1:

BEGIN
  DBMS_SCHEDULER.DROP_CHAIN_RULE (
   chain_name   =>   'my_chain1',
   rule_name    =>   'my_rule1',
   force        =>   TRUE);
END;
/

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the DROP_CHAIN_RULE procedure.

Disabling Chains

You disable a chain by using the DISABLE procedure. An example is the following, which disables my_chain1:

BEGIN
  DBMS_SCHEDULER.DISABLE ('my_chain1');
END;
/

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the DISABLE procedure.

Note:

Chains are automatically disabled by the Scheduler when:

  • The program that one of the chain steps points to is dropped

  • The nested chain that one of the chain steps points to is dropped

  • The event schedule that one of the chain event steps points to is dropped

Dropping Chain Steps

You drop a step from a chain by using the DROP_CHAIN_STEP procedure. An example is the following, which drops my_step2 from my_chain2:

BEGIN
  DBMS_SCHEDULER.DROP_CHAIN_STEP (
   chain_name   =>   'my_chain2',
   step_name    =>   'my_step2',
   force        =>    TRUE);
END;
/

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the DROP_CHAIN_STEP procedure.

Stopping Chains

要停止正在运行的链,可以调用DBMS_SCHEDULER。STOP_JOB,传递链作业的名称(启动链的作业)。当停止链作业时,正在运行的链的所有步骤都将停止,链将结束。

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the STOP_JOB procedure.

Stopping Individual Chain Steps

There are two ways to stop individual chain steps:

  • By creating a chain rule that stops one or more steps when the rule condition is met.

  • By calling the STOP_JOB procedure.

    For each step to stop, you must specify the schema name, chain job name, and step job subname.

    BEGIN
      DBMS_SCHEDULER.STOP_JOB('oe.chainrunjob.stepa');
    END;
    /
    

    在本例中,chainrunjob是chain作业名,stepa是step作业子名。步骤作业子名称通常与步骤名称相同,但并不总是相同。您可以从*_SCHEDULER_RUNNING_CHAINS视图的STEP_JOB_SUBNAME列中获取步骤作业子名称。

When you stop a chain step, its state is set to STOPPED and the chain rules are evaluated to determine the steps to run next.

See Oracle Database PL/SQL Packages and Types Reference for more information regarding the STOP_JOB procedure.

Pausing Chains

您可以暂停整个链或链的单个分支。您可以通过使用DBMS_SCHEDULER将一个或多个步骤的PAUSE属性设置为TRUE来实现这一点。ALTER_CHAIN或ALTER_RUNNING_CHAIN。暂停链步骤使您能够在这些步骤运行之后暂停链的运行。

当您暂停一个步骤时,在该步骤运行之后,它的状态属性更改为pause,并且它的complete属性仍然为FALSE。因此,依赖于暂停步骤完成的步骤不会运行。如果将暂停步骤的PAUSE属性重置为FALSE,则将其state属性设置为完成状态(成功、失败或停止),然后可以运行等待暂停步骤完成的步骤。

Figure 29-1 Chain with Step 3 Paused

【11g】Job Chains: Chains操作(Enabling、Dropping 、Running 、Disabling 、Pausing 、Stopping 、Running )
Description of "Figure 29-1 Chain with Step 3 Paused"
 

在图29-1中,步骤3暂停。直到步骤3停止,步骤5才会运行。如果只暂停步骤2,那么步骤4、6和7将不会运行。但是步骤1、3和5可以运行。在这两种情况下,您只挂起链上的一个分支。
要暂停整个链,需要暂停链的所有步骤。要取消一个链的暂停,您需要取消一个、多个或所有链步骤的暂停。对于图29-1中的链,暂停步骤1也将在步骤1运行后实现整个链的暂停。

See Also:

The DBMS_SCHEDULER.ALTER_CHAIN and DBMS_SCHEDULER.ALTER_RUNNING_CHAIN procedures in Oracle Database PL/SQL Packages and Types Reference

Skipping Chain Steps

您可以跳过链中的一个或多个步骤。为此,可以使用DBMS_SCHEDULER将一个或多个步骤的SKIP属性设置为TRUE。ALTER_CHAIN或ALTER_RUNNING_CHAIN。如果一个步骤的SKIP属性为TRUE,那么当满足运行该步骤的链条件时,该步骤将被视为立即成功,而不是正在运行。将SKIP设置为TRUE对正在运行的步骤、计划在延迟之后运行的步骤或已经运行的步骤没有影响。

在测试链时,跳过步骤特别有用。例如,当测试图29-1所示的链时,跳过步骤7可以大大缩短测试时间,因为这一步是一个嵌套链。

Running Part of a Chain

There are two ways to run only a part of a chain:

  • 使用ALTER_CHAIN过程将一个或多个步骤的PAUSE属性设置为TRUE,然后要么使用RUN_JOB启动链作业,要么使用RUN_CHAIN启动链。依赖于暂停步骤的任何步骤都不会运行。(不过,暂停的步骤确实会运行。)

    此方法的缺点是,必须将PAUSE属性设置为FALSE,以便在链的未来运行中执行受影响的步骤。

  • 使用RUN_CHAIN过程只启动链的某些步骤,跳过不想运行的步骤。
    这是一种更直接的方法,还允许您在启动步骤之前设置步骤的初始状态。

You may have to use both of these methods to skip steps both at the beginning and end of a chain.

See the discussion of the RUN_CHAIN procedure in Oracle Database PL/SQL Packages and Types Reference for more information.

See Also:

"Skipping Chain Steps"

Monitoring Running Chains

You can view the status of running chains with the following two views:


*_SCHEDULER_RUNNING_JOBS
*_SCHEDULER_RUNNING_CHAINS

*_SCHEDULER_RUNNING_JOBS视图包含链作业的一行和每个运行步骤的一行。*_SCHEDULER_RUNNING_CHAINS视图包含每个链步骤的一行(包括任何嵌套的链),并包含每个步骤的运行状态(NOT_STARTED、RUNNING、STOPPED、succeed,等等)。

See Oracle Database Reference for details on these views.

Handling Stalled Chains

在完成一个步骤时,总是对链规则进行评估,以确定接下来要运行的步骤。如果没有任何规则导致另一个步骤启动,没有任何规则导致链结束,并且链的evaluation_interval为NULL,则链进入停顿状态。当一个链停止时,没有运行任何步骤,没有计划运行任何步骤(在等待指定的时间间隔之后),也没有事件步骤等待事件。除非您手动干预,否则该链无法取得进一步的进展。在本例中,正在运行链的作业的状态被设置为chain_。. (However, the job is still listed in the *_SCHEDULER_RUNNING_JOBS views.)

您可以使用ALL_SCHEDULER_RUNNING_CHAINS视图(它显示链中的所有步骤的状态(包括任何嵌套的链))和ALL_SCHEDULER_CHAIN_RULES(它包含所有链规则)来故障诊断停顿的链。
通过使用ALTER_RUNNING_CHAIN过程更改其中一个步骤的状态,可以使链继续。例如,如果步骤11正在等待步骤9开始成功,并且如果这样做有意义,您可以将步骤9的状态设置为“成功”。

或者,如果一个或多个规则不正确,可以使用DEFINE_CHAIN_RULE过程替换它们(使用相同的规则名称),或者创建新规则。新的和更新的规则适用于运行链和所有未来的链运行。在添加或更新规则之后,必须在停止的chain作业上运行EVALUATE_RUNNING_CHAIN来触发任何必需的操作。