关键字:

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。然后重启数据库,使其生效。

  • 以超级用户创建插件

  • 普通用户创建插件会失败

如何使用KDB_SCHEDULE插件

一个完整的计划任务由三部分组成:job、program、schedule,它们的作用如表所示。

对象

作用

Job

记录任务调度情况,如当前执行状态、下次执行时间等

Program

存储任务要执行的动作,例如“create table t2(A int)”

Schedule

存储任务计划,如开始时间、结束时间、间隔时间等

KDB_SCHEDULE插件提供的用户接口可以创建、修改、删除上述三种对象。用户通过创建、修改、删除三种对象,定制自己的计划任务。例如用户想要创建一个计划任务,每分钟自动往某表插入一行数据,那么他需要进行以下操作:

  1. 创建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插件参考手册》

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐