DB2 Task Scheduler的用法

0.说明在前面的话

发现DB2中可以建立内置的定时任务,这对于一些轻量的批处理(懒得写代码)可以简单实现,如定时生成日报、清理日志数据、创建或删除分区等。但这个做法对运维是不友好的,有时运维人员会忽略这种定时任务的存在。但我刚好是运维人员也兼DBA,可以通过这种方式来偷懒,但请大家慎重使用这种方式。

1.前提

  • DB2的数据库实例必须设置以下参数,并重启实例:
db2set DB2_ATS_ENABLE=YES
  • DB中提前确认是否有SYSTOOLSPACE的表空间

2.注册任务:ADMIN_TASK_ADD

使用ADMIN_TASK_ADD这个函数添加任务,其语法如下:

ADMIN_TASK_ADD
(
name,
begin_timestamp,
end_timestamp,
max_invocations,
schedule,
procedure_schema,
procedure_name,
procedure_input,
options,
remarks
)

上述参数说明如下:

  • name:任务名称,类型为VARCHAR(128),不能为空。
  • begin_timestamp:任务最早开始时间,类型为TIMESTAMP,不能为过去时间,且不能晚于end_timestamp。
  • end_timestamp:任务最晚开始时间,类型为TIMESTAMP,不能为过去时间,不能早于begin_timestamp,若为空,则任务可无限期执行。
  • max_invocations:任务最大执行次数,类型为INTEGER,若为空,则无执行次数限制;若为0,则任务不执行。
  • schedule:任务执行时间表,类型为VARCHAR(1024),使用UNIX cron格式,若为空,则任务不按固定时间执行。
  • procedure_schema:任务执行过程的模式,类型为VARCHAR(128),不能为空。
  • procedure_name:任务执行过程的名称,类型为VARCHAR(128),不能为空。
  • procedure_input:任务执行过程的输入参数,类型为CLOB(2M),必须包含返回一行数据的SQL语句,若为空,则不向过程传递参数。
  • options:类型为VARCHAR(512),必须为空。
  • remarks:任务描述,类型为VARCHAR(254),可选,可为空。

以下是我创建的一个任务的例子:

-- 定时任务于每天5:30调用TEST.INSERT_MSG_SUMMARY_DATA这个无参数的存储过程。
call ADMIN_TASK_ADD
(
'REQ_DAILY_REPORT',
NULL,
NULL,
NULL,
'30 5 * * *',
'TEST',
'INSERT_MSG_SUMMARY_DATA',
NULL,
NULL,
'生成昨日请求汇总结果并写入汇总表'
);

3.删除任务:ADMIN_TASK_REMOVE

使用本函数删除所创建的定时任务,语法如下:

ADMIN_TASK_REMOVE
(
name,end_timestamp
)

参数说明如下:

  • name 类型为 VARCHAR (128) 的输入参数,用于指定任务的名称。
  • end_timestamp 类型为 TIMESTAMP 的输出参数,用于指定状态记录 end_timestamp 时间戳记

其中end_timestamp的取值有讲究,除去任务的行为取决于如何定义 name 和 end_timestamp 参数:

  • 如果 end_timestamp 自变量为 NULL:
    • 如果 name 参数为 NULL,那么将除去所有任务和状态记录。 如果一个或多个任务当前正在运行,那么不会除去该任务和关联的状态记录。 在此情况下,将返回 SQL1464W 。
    • 如果 name 自变量不是 NULL,那么将除去与 name 匹配的任务记录。 如果指定的任务当前正在运行,那么不会除去该任务并返回 SQL20453N 。 如果除去了指定的任务,那么将除去所有关联的状态记录。
  • 如果 end_timestamp 自变量不是 NULL:
    • 如果 name 自变量为 NULL,那么将除去 end_timestamp 时间戳记小于或等于 end_timestamp 的所有状态记录。 未除去任何任务记录。 此过程将不会除去任何状态值为以下值的状态记录:RUNNING.
    • 如果 name 自变量不是 NULL,那么当任务的 end_timestamp 时间戳记小于或等于 end_timestamp时,将除去与 name 匹配的任务的状态记录。 未除去任何任务记录。 此过程将不会除去任何状态值为以下值的状态记录:RUNNING.

以下为我删除上文所创建的定时任务:

CALL ADMIN_TASK_REMOVE
(
'REQ_DAILY_REPORT_2',NULL
);

4.更新任务:ADMIN_TASK_UPDATE

语法如下,参数说明请参考上文:

ADMIN_TASK_UPDATE
(
name
,
begin_timestamp
,
end_timestamp
,
max_invocations
,
schedule
,
options
,
remarks
)

5.查看定时任务

在执行ADMIN_TASK_ADD存储过程后,在SYSTOOLS下有ADMIN_TASK_LIST、ADMIN_TASK_STAT两个视图,可查看现有任务详情及任务的执行情况。

  • 执行后SYSTOOLS.ADMIN_TASK_STAT的结果
    image
posted @ 2025-08-05 11:21  潇雨锁清秋  阅读(22)  评论(0)    收藏  举报