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]()

浙公网安备 33010602011771号