IBM Db2/Scheduler

IBM Db2/Scheduler

傻逼 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

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.admin.trb.doc/doc/t0054385.html

查看 DB2 系统计划任务执行日志:

select * from SYSTOOLS.ADMIN_TASK_STATUS


Last update: 2018-03-19 07:51:58 UTC