admin管理员组文章数量:1794759
KingbaseES数据库 kdb
KingbaseES数据库 kdb_schedule 自动定时任务
文章目录- KingbaseES数据库 kdb_schedule 自动定时任务
- 前言
- 一 安装插件 kdb_schedule
- 1. 添加kdb_schedule
- 2. 修改kdb_schedule所需参数:
- 3. 重启数据库
- 4. 加载kdb_schedule插件
- 二 dbms_scheduler
- 2.1 创建program
- 创建program命令
- 成功创建program后,查看结果:
- 参数说明
- 删除program
- 2.2 创建Schedule
- 成功创建Schedule后,查看结果:
- 参数说明
- 删除 Schedule
- 2.3 创建Job
- 成功创建Job后,查看结果:
- 参数说明
- 四 查看 kdb_job表:
- 日历(设置时间)
- 参数说明
- 具体示例
- 备注
- 后记
人大金仓数据库的自动定时任务是类似于Oracle的,是使用一个扩展插件kdb_schedule来完成的。 kdb_schedule又该如何使用呢?
一 安装插件 kdb_schedule 1. 添加kdb_schedulekdb_schedule插件是人大金仓数据库KingbaseES V8R6 自带的插件,不需要自己下载,但是我们需要把他添加到参数中: 在 数据库的安装目录下找到kingbase.conf 文件修改shared_preload_libraries参数,把kdb_schedule添加到里面。
shared_preload_libraries = 'kdb_schedule' 2. 修改kdb_schedule所需参数:kdb_schedule的参数也是需要在kingbase.conf 文件修改,直接添加就行
命令行执行:
alter system set job_queue_processes=5; 3. 重启数据库 systemctl stop kingbase 停止数据库 systemctl start kingbase 启动数据库因为加载kdb_schedule是需要重启数据库的
4. 加载kdb_schedule插件 create extension kdb_schedule;如果这部报错,可以查看此版本的KingbaseES是否带了这个插件。
select * from pg_available_extensions; 二 dbms_scheduler 2.1 创建program 创建program命令 begin ; call dbms_scheduler.create_program(program_name => 'prog_01-cs', program_type => 'PLSQL_BLOCK', program_action => 'call hrmw.p_test()', acconnstr => 'user=postgres dbname=cs port=6666 password=postgres123', acdbname => 'test', number_of_arguments => 0, enabled => true, comments => 'test program'); end; 成功创建program后,查看结果: select * from kdb_schedule.kdb_action; 参数说明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禁用状态。 |
comments | 程序的注释信。 |
program_name | 程序的名字。 |
force | 暂不支持,默认值为false。 |
说实话,如果你没关联,直接在kdb_schedule.kdb_action上删除相应记录就行了。
2.2 创建Schedule begin ; call dbms_scheduler.create_schedule(schedule_name => 'schedule_01', start_date => now(), repeat_interval => 'freq=daily;byhour=10;interval=1', end_date => null, comments => 'test schedule'); end; 成功创建Schedule后,查看结果: select * from kdb_schedule.kdb_schedule; 参数说明schedule_name | 调度程序的名字。 |
start_date | 调度程序的开始时间 |
repeat_interval | 调度程序的间隔时间 |
end_date | 调度程序的结束时间 |
comment | 调度程序的注释信 |
schedule_name | 调度程序的名字。 |
force | 暂不支持,默认值为false。 |
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 |
FREQ | 重复时间的类型。 这里有yearly、monthly、weekly、daily、hourly、minutely |
INTERVAL | 重复的频率,默认值是1。 |
BYMONTH | 指定月份。 |
BYMONTHDAY | 指定一月中的某一天。 |
BYHOUR | 指定一天中的某一个小时。 |
BYBYMINTUE | 指定一个小时中的秒一分。 |
BYSECOND | 指定一分钟内的某一秒。 |
每天早上10点 FREQ =daily,BYHOUR=10,BYBYMINTUE=0,BYSECOND=0; 每隔7天的早上10点 FREQ =daily,INTERVAL=7,BYHOUR=10,BYBYMINTUE=0,BYSECOND=0; 每年10月1号早上10点 FREQ =yearly,BYMONTH=10,BYMONTHDAY=1,BYHOUR=10,BYBYMINTUE=0,BYSECOND=0;
备注插件 kdb_schedule 目前是只支持Oracle版KingbaseES,不支持pg版本的。
查看数据库兼容:
show database_mode;这里出现pg是指postgresql数据库 ,出现oracle是oracle版本的KingbaseES V8R6,一等要注意 pg版本的目前是有这功能的,但是他报错,不支持!不支持!不支持! 报错如下: 1:创建Job时报错;
call dbms_scheduler.create_job(job_name => ‘job_01’, program_name => ‘prog_01-cs’, schedule_name => ‘schedule_01’, job_class => ‘routine maintenance’, enabled => true, auto_drop => true, comments => ‘test job’, credentail_name => null, destination_name => null)
错误: 函数 get_next_date(timestamp without time zone, unknown, timestamp without time zone, cstring) 不存在 LINE 2: …bjobid, job_name, cjjclid, enabled, now(), now(), get_next_d… ^ HINT: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换. QUERY: insert into kdb_job(jobid, jobname, jobjclid, jobenabled, jobcreated, jobchanged, jobnextrun, jobrepeattimes, jobdesc, jobdbname) select subjobid, job_name, cjjclid, enabled, now(), now(), get_next_date(scstart, null, scend, screpeat_interval::cstring), 0, comments, current_database() from kdb_schedule.kdb_schedule where scname=schedule_name CONTEXT: 在SQL语句的第37行的PL/pgSQL函数dbms_scheduler.create_job(text,text,text,text,boolean,boolean,text,text,text)
2:运用dbms_job.submit()函数时报错
call dbms_job.submit(jobid, 'CREATE TABLE T1(A int)', now(), 'Freq=daily;BYHOUR=10;BYMINUTE=10;BYSECOND=10', false, 0, false);call dbms_job.submit(jobid, ‘CREATE TABLE T1(A int)’, now(), ‘Freq=daily;BYHOUR=10;BYMINUTE=10;BYSECOND=10’, false, 0, false) 错误: 字段 “jobid” 不存在 LINE 1: call dbms_job.submit(jobid, ‘CREATE TABLE T1(A int)’, now(),… ^
后记如果本文章有何错误,请您评论中指出,或联系我,我会改正,如果您觉得这篇文章有用,请帮忙一键三连,让更多的人看见,谢谢 作者 yang_z_1 csdn博客地址: blog.csdn/yang_z_1?type=blog
本文标签: 数据库KingbaseESkdb
版权声明:本文标题:KingbaseES数据库 kdb 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686481553a72389.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论