ADMIN_TASK_UPDATE 过程 - 更新现有任务

ADMIN_TASK_UPDATE 过程更新管理任务,这是可以封装在过程中的任何工作。

语法

Read syntax diagramSkip visual syntax diagramADMIN_TASK_UPDATE(name,begin_timestamp,end_timestamp,max_invocations,schedule,options,remarks)

模式为 SYSPROC。

过程参数

name
类型为 VARCHAR (128) 的输入参数,用于指定现有任务的名称。 此参数不能为 NULL
开始时间戳记
类型为 TIMESTAMP 的输入参数,用于指定任务可以开始执行的最早时间。 此自变量的值不能是过去的值,并且不能晚于 end_timestamp
任务执行开始时间取决于此参数和 schedule 参数的定义方式:
  • 如果 begin_timestamp 自变量不是 NULL:
    • 如果 schedule 自变量为 NULL,那么任务执行将从 begin_timestamp开始。
    • 如果 schedule 自变量不是 NULL,那么任务执行将在下次调度时间 begin_timestamp或之后开始。
  • 如果 begin_timestamp 自变量为 NULL:
    • 如果 schedule 自变量为 NULL,那么将立即开始执行任务。
    • 如果 schedule 自变量不是 NULL,那么任务执行将在下一个调度时间开始。
end_timestamp
类型为 TIMESTAMP 的输入参数,用于指定任务上次可以开始执行的时间。 此参数的值不能是过去的值,并且不能早于 begin_timestamp。 如果参数为 NULL,那么该任务可以继续无限期地按调度执行。

执行中的任务不会在其 end_timestamp处中断。

最大调用数
类型为 INTEGER 的输入参数,用于指定任务允许的最大执行次数。 如果参数为 NULL,那么对任务可以执行的次数没有限制。 如果参数为 0,那么将不会执行该任务。

如果 schedule 不是 NULL,那么此值将应用于调度。

如果同时指定了 end_timestampmax_invocations ,那么 end_timestamp 优先。 即,如果达到 end_timestamp 时间戳记,即使到目前为止的任务执行次数尚未达到 max_invocations的值,也不会再次执行该任务。

日程安排
类型为 VARCHAR (1024) 的输入参数,用于指定固定时间点的任务执行调度。 如果参数为 NULL,那么不会在固定时间点调度任务。

必须使用 UNIX cron 格式指定 schedule 字符串。

不支持多个调度。

选项
类型为 VARCHAR (512) 的输入自变量。 此自变量必须为 NULL
备注
类型为 VARCHAR (254) 的输入参数,用于指定任务的描述。 这是可设置为 NULL的可选参数。

权限

需要下列其中一个权限:
  • 对 ADMIN_TASK_UPDATE 过程的 EXECUTE 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限

虽然语句授权标识可能允许执行过程,但除非当前会话授权标识与创建任务时记录的会话授权标识相匹配,否则无法更新任务。 具有 SYSADM , SYSCTRL , SYSMAINT 或 DBADM 的用户可以更新任何现有任务。 尝试更新由不同用户添加的任务会返回 SQL0551N。

缺省 PUBLIC 特权

在非限制数据库中,自动创建过程时会将 EXECUTE 特权授予 PUBLIC。

使用说明

如果将无效参数传递到过程中,那么将返回 SQL0171N 。 消息的标记将指示哪个参数无效以及过程的名称。

直到落实工作单元并且调度程序已访存更新的任务定义之后,对任务的更改才会生效。 将工作单元保留为未落实状态可能会延迟或阻止执行现有任务。

调度程序每 5 分钟检查一次更新的任务。 为确保任务按预期执行,由 begin_timestampend_timestampschedule 参数定义的最早开始时间应至少在工作单元落实后 5 分钟。

数据库必须在所有数据库分区上处于活动状态,以确保调度程序可以执行该任务。

begin_timestampend_timestampschedule 基于数据库服务器的时区。 在夏令时 (DST) 的过渡期间调度任务时需要特别注意。 如果该任务安排在凌晨 2:01 运行,并且是时间向前的一年时间,那么该任务将不会运行,因为时钟将从凌晨 2:00 跳到凌晨 3:00。 如果在激活数据库时发生 DST 更改,并且在 DST 更改时间期间未调度任何任务,那么 DST 更改后的第一个已调度任务将不会运行。 任务将从第二个任务开始正常运行。 例如,如果在凌晨 2:00 到凌晨 3:00 之间未调度任何任务,但在凌晨 3:10 有一个任务也是 DST 更改后的第一个任务,那么此任务将不会运行。 这与调度任务的 DST 更改后的时间无关。 例如,无论调度 DST 后的第一个任务是在 DST 更改一天还是一个月后,只要该任务是 DST 更改后的第一个任务并且数据库一直保持活动状态,该任务就不会运行。 另一方面,当时间倒退一个小时时,最初安排在凌晨 2:00 到凌晨 3:00 之间的任务将执行两次。 用户负责对夏令时进行调整,以确保其所需行为。

更新任务时,将重置该任务的内部调用计数器。 要进行说明,请考虑 max_invocations 值为 10的重现任务。 如果任务执行 3 次,那么 ADMIN_TASK_STATUS 输出中有 3 个相应的状态记录。 这些条目具有调用值 1 , 2 和 3。 现在,假定任务创建者更新该任务。 此更新将重置内部调用计数器。 原始状态记录保持不变。 随着时间的推移,将使用调用值 1 , 2 和 3 等创建新的状态记录。 可使用 BEGIN_TIME 来区分原始任务执行和更新的任务执行。