介绍
公司国产化业务最近在使用人大金仓替换Mysql,其中设备状态表数据量过大,需要只保存当天的数据,意思就是前一天的数据都要清掉,这样就需要每天凌晨清除前一天的数据。人大金仓数据库的自动定时任务是类似于Oracle的,是使用一个扩展插件kdb_schedule来完成的。 kdb_schedule又该如何使用呢?
使用
人大金仓 V9R1版本的数据库事先安装好
添加kdb_schedule
kdb_schedule插件是人大金仓数据库KingbaseES V8R6 自带的插件,不需要自己下载,但是我们需要把他添加到参数中:
在 数据库的安装目录下找到kingbase.conf 文件修改shared_preload_libraries参数,把kdb_schedule添加到里面。
shared_preload_libraries = 'kdb_schedule'
修改kdb_schedule所需参数
kdb_schedule的参数也是需要在kingbase.conf 文件修改,直接添加就行:
- job_queue_processes 允许用户启动的最大并发数,当其值设置为0时,表示不启动自动作业功能,默认为0,不开启自动作业。
- sys_job.log_level 用于设置JOB后台进程的日志级别,更改后需要重新加载配置文件,可选项:LOG_ERROR,LOG_WARNING,LOG_DEBUG,默认为LOG_ERROR。
- sys_job.poll_time 用于设置轮询系统表间隔时间,单位秒,默认值为10秒
命令行执行:
alter system set job_queue_processes=5;
重启数据库
systemctl stop kingbase 停止数据库
systemctl start kingbase 启动数据库
因为加载kdb_schedule是需要重启数据库的
加载kdb_schedule插件,在Kstudio客户端执行
create extension kdb_schedule;
dbms_scheduler
创建program
call DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'clear_device_state',
program_type => 'PLSQL_BLOCK',
program_action => 'TRUNCATE TABLE `iot_dev`.device_states;',
acconnstr => 'user=system dbname=test port=54321 password=123456',
acdbname => 'test',
number_of_arguments => 0,
enabled => TRUE,
comments => 'Clear device_state table every day at midnight');
创建program命令
call DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'clear_device_state_schedule',
start_date => now(),
repeat_interval => 'FREQ=DAILY;BYHOUR=0;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
comments => 'Schedule to run every day at midnight');
创建job
call DBMS_SCHEDULER.CREATE_JOB(
job_name => 'clear_device_states_job',
program_name => 'clear_device_state',
schedule_name => 'clear_device_state_schedule',
job_class => 'Routine Maintenance',
enabled => TRUE,
auto_drop => TRUE,
comments => 'Automatically clear device_state table every day');
创建完之后,我们在Kstudio 上可以看到计划任务