傻逼 DB2 内置的计划任务调度器 (administrative task scheduler)可以定时执行任务(存储过程),傻逼 DB2 的计划任务调度器每 5 分钟检查一次。
Enable Config
首先切换到傻逼 DB2 数据库实例用户: su - db2_user
1. db2set DB2_ATS_ENABLE=YES
(设置后可能需要重启 DB2 才生效)
2. Make sure the SYSTOOLSPACE table space exists
SELECT TBSPACE FROM SYSCAT.TABLESPACES WHERE TBSPACE = 'SYSTOOLSPACE'
If not exists, creat it:
CREATE TABLESPACE SYSTOOLSPACE IN IBMCATGROUP
MANAGED BY AUTOMATIC STORAGE
EXTENTSIZE 4
3. Activate database
保证数据库处于 "激活" 状态: (每次 db2start 启动数据库后都要执行一次)
db2 activate DATABASE {{dbname}} [USER {{username}} USING {{password}}] # su - 切换到 DB2 实例用户以后可能无需指定数据库 user/pass
Usage
使用 DB2 系统存储过程 ADMIN_TASK_ADD, ADMIN_TASK_REMOVE 等(tablespace: SYSPROC)和系统 view SYSTOOLS.ADMIN_TASK_LIST 管理计划任务
ADMIN_TASK_ADD
CALL ADMIN_TASK_ADD
( 'TEST_TASK', -- task name
CURRENT_TIMESTAMP, -- begin_timestamp
NULL, -- begin_timestamp
NULL, -- end_timestamp
'* * * * *', -- schedule in UNIX cron format
'SCHEMA', -- procedure schema
'TESTP', -- procedure name
NULL, -- procedure input arguments, CLOB format. eg. 'VALUES(''param1'', 256)'
NULL, -- options, must be NULL
NULL -- remarks
)
List tasks
SELECT * from SYSTOOLS.ADMIN_TASK_LIST
Remove task
CALL ADMIN_TASK_REMOVE(
'TEST_TASK', -- task name
NULL -- end_timestamp, if not NULL, matched task(s) are removed only if their end_timestamp timestamp is less than or equal to this value
)
Modify task
call ADMIN_TASK_UPDATE(
...
)
Debug & Troubleshouting
查看 DB2 系统计划任务执行日志:
select * from SYSTOOLS.ADMIN_TASK_STATUS