人大金仓数据库KingbaseES kdb_schedule插件介绍
kdb_schedule是KingbaseES的一个扩展插件,其主要功能是创建计划任务。对标Oracle的dbms_scheduler包和dbms_job包。
关键字:
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插件提供的用户接口可以创建、修改、删除上述三种对象。用户通过创建、修改、删除三种对象,定制自己的计划任务。例如用户想要创建一个计划任务,每分钟自动往某表插入一行数据,那么他需要进行以下操作:
- 创建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插件参考手册》
更多推荐
所有评论(0)