关键字:
KingbaseES、KDB_SCHEDULE、计划任务、DBMS_SCHEDULER、DBMS_JOB
什么是KDB_SCHEDULE插件
kdb_schedule是KingbaseES的一个扩展插件,其主要功能是创建计划任务。对标Oracle的dbms_scheduler包和dbms_job包。
如何创建KDB_SCHEDULE插件
kdb_schedule插件的创建主要由以下几个步骤构成:
- 加载动态库
打开配置文件kingbase.conf ,在shared_preload_libraries字段添加库名kdb_schedule。然后重启数据库,使其生效。
2. 以超级用户创建插件
如何使用KDB_SCHEDULE插件
一个完整的计划任务由三部分组成:job、program、schedule,它们的作用如表所示。
对象
作用
Job
记录任务调度情况,如当前执行状态、下次执行时间等
Program
存储任务要执行的动作,例如“create table t2(A int)”
Schedule
存储任务计划,如开始时间、结束时间、间隔时间等
KDB_SCHEDULE插件提供的用户接口可以创建、修改、删除上述三种对象。用户通过创建、修改、删除三种对象,定制自己的计划任务。例如用户想要创建一个计划任务,每分钟自动往某表插入一行数据,那么他需要进行以下操作:
- 创建program
调用存储过程DBMS_SCHEDULER.CREATE_PROGRAM,其语法格式:
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name TEXT,
program_type TEXT,
program_action TEXT,
acconnstr TEXT,
acdbname TEXT,
number_of_arguments INTEGER DEFAULT 0,
enabled BOOLEAN DEFAULT FALSE,
comments TEXT DEFAULT NULL);
参数说明:
program_name
程序的名字。
program_type
程序的类型。有下列类型:PLSQL_BLOCK、STORED_存储过程、SQL_SCRIPT、 EXECUTABLE、EXTERNAL_SCRIPT、BACKUP_SCRIPT
program_action
程序的动作。
acconnstr
数据库连接串。
acdbname
数据库名称。
number_of_arguments
程序动作的参数,暂不支持, 0为默认值。
enabled
程序的状态,true启动状态,false禁用状态。
在这里我们创建一个执行插入数据操作的program:
call DBMS_SCHEDULER.CREATE_PROGRAM('program1', 'PLSQL_BLOCK', 'insert into test_job DEFAULT VALUES', 'user=system dbname=test port=54321 password=123456', 'test', 0, true, 'this is test program');
2. 创建schedule
调用存储过程DBMS_SCHEDULER.CREATE_SCHEUDLE,其语法格式:
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name TEXT,
start_date TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval TEXT DEFAULT NULL,
end_date TIMESTAMP WITH TIME ZONE DEFAULT NULL,
comments TEXT DEFAULT NULL);
参数说明:
schedule_name
调度程序的名字。
start_date
调度程序的开始时间
repeat_interval
调度程序的间隔时间
end_date
调度程序的结束时间
comment
调度程序的注释信息
在这里我们创建一周期为每分钟一次的schedule
call DBMS_SCHEDULER.CREATE_SCHEDULE('schedule1', now(), 'Freq=MINUTELY;BYSECOND=0', NULL, 'this is a test schedule');
3. 创建job
调用存储过程DBMS_SCHEDULER.CREATE_JOB,其语法格式:
DBMS_SCHEDULER.CREATE_JOB(
job_name TEXT,
program_name TEXT,
schedule_name TEXT,
job_class TEXT DEFAULT 'Routine Maintenance',
enabled BOOLEAN DEFAULT FALSE,
auto_drop BOOLEAN DEFAULT TRUE,
comments TEXT DEFAULT NULL,
credentail_name TEXT DEFAULT NULL,
destination_name TEXT DEFAULT NULL);
参数说明:
job_name
job的名字。
program_name
程序的名字。
schedule_name
调度程序的名字。
job_class
job的类型,默认Routine Maintenance。
enabled
job的状态。true启用,false禁用
auto_drop
job完成后自动删除,暂不支持,默认true
comment
job的注释信息
credentail_name
暂不支持,默认为NULL
destination_name
暂不支持,默认为NULL
在这里我们创建一个job关联之前创建的“program1”和“schedule1”
call DBMS_SCHEDULER.CREATE_JOB('job', 'program1', 'schedule1', 'Routine Maintenance', true, true, 'this is test job');
至此一个完整的计划任务便创建完成了,观察表“test_job”可以发现每分钟都有一条数据被插入。
参考资料
《KingbaseES插件参考手册》