Job And Schedule (V8R6C4)
KingbaseES 数据库提供了 kdb_schedule 扩展,使得用户能通过类似oracle job 的方式进行job调用。kdb_schedule 提供了三个Schema :dbms_job and dbms_scheduler 分别类似于 oracle 的 dbms_job 和 dbms_schedule 包,数据字典信息放于kdb_schedule 模式下。
一、配置系统参数
V8R6C3 以及之前的版本要运行job,必须先运行 kdb_schedule 操作系统进程,通过kdb_schedule 连接数据库执行。新版本通过library 方式:
shared_preload_libraries = 'kdb_schedule , ......' alter system set job_queue_processes=5;
create extension kdb_schedule;
注意事项:
1、job_queue_processes 必须大于0 , 为0 表示不开启job
2、kdb_schedule 必须放在 shared_preload_libraries 最前面
二、通过dbms_job管理Job
1、创建Job
create table d_test(tid varchar2(64), insdate date); create or replace procedure p_test() as
begin
insert into d_test values(to_char(sysdate, 'yyyymmddhh24miss'), sysdate);
commit;
end;
/ DECLARE
v_jobid NUMBER;
BEGIN
dbms_job.submit(v_jobid, 'call p_test()', now(), 'Freq=Minutely;Interval=1');
COMMIT;
END;
/ test=# call dbms_job.instance(1, 'user=system dbname=test port=54321 password=P123');
CALL
注意:dbms_job.instance 的 1 表示job_id,这是为特定的job_id 设置连接串。
2、查询Job
test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
-------+---------------------------------------------+------------+------------+-------------------------------+----------------
1 | internal_job1:2021-06-22 08:11:39.797681+08 | f | | 2021-06-22 08:11:39.797681+08 | 0
可以看到,Job 创建后,默认的状态是 jobenabled=false,也就是实际没有启用。
Note:早期版本 kdb_job 表是schema kdb_schedule下,后面移到pg_catalog schema下。
3、启用Job
job 创建后,默认是 broken(disabled) ,需要enable
test=# call dbms_job.broken(1,false);
CALL
test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
-------+---------------------------------------------+------------+-------------------------------+------------------------+----------------
1 | internal_job1:2021-06-22 08:11:39.797681+08 | t | 2021-06-22 08:22:39.062009+08 | 2021-06-22 08:23:39+08 | 0
(1 row)
enable job 后,等待一会再查,job 是否运行。
4、Job实际上也是Schedule
test=# select * from kdb_schedule.kdb_schedule;
scid | scname | scdesc | scenabled | scstart | scend | screpeat_interval
------+--------+--------+-----------+----------------------------+-------+--------------------------
2 | | | t | 2021-06-22 10:11:25.586148 | | Freq=Minutely;Interval=1
(1 row) test=# select * from kdb_schedule.kdb_schedule_job;
sjid | sjscid | sjjobid | sjstatus | sjlasttime | sjnexttime
------+--------+---------+----------+------------+-------------------------------
2 | 2 | 1 | s | | 2021-06-22 10:11:25.586148+08
可以看到,通过dbms_job创建的job信息,同样会在kdb_schedule 和kdb_schedule_job 显示。
5、其他Job维护操作
--Job删除
test=# call dbms_job.remove(1);
CALL
二、通过dbms_scheduler管理Job
1、创建program
begin
dbms_scheduler.create_program(program_name => 'prog_01',
program_type => 'PLSQL_BLOCK',
program_action => 'call public.p_test()',
acconnstr => 'user=system dbname=test port=6666 password=system',
acdbname => 'test',
number_of_arguments => 0,
enabled => true,
comments => 'test program');
end;
/
这里有两个地方必须注意。'PLSQL_BLOCK' 必须大写,acdbname 必须指定。
acdbname 指明了action 所在的数据库,如果没有指定,默认指 kdb_schedule 运行时指定的数据库。成功创建program后,会有如下一行信息:
test=# select * from kdb_schedule.kdb_action;
acid | acname | acdesc | acenabled | ackind | accode | acconnstr | acdbname | acnextrun
------+---------+--------------+-----------+--------+----------------------+-----------+----------+-----------
7 | prog_01 | test program | t | s | call public.p_test() | | test |
(1 row)
2、创建Schedule
begin
dbms_scheduler.create_schedule(schedule_name => 'schedule_01',
start_date => now(),
repeat_interval => 'freq=minutely;interval=1',
end_date => null,
comments => 'test schedule');
end;
创建schedule 后,会有如下一行信息:
test=# select * from kdb_schedule.kdb_schedule;
scid | scname | scdesc | scenabled | scstart | scend | screpeat_interval
------+-------------+---------------+-----------+----------------------------+-------+--------------------------
7 | schedule_01 | test schedule | t | 2021-06-22 14:28:38.536823 | | freq=minutely;interval=1
(1 row)
3、创建Job
begin
dbms_scheduler.create_job(job_name => 'job_01',
program_name => 'prog_01',
schedule_name => 'schedule_01',
job_class => 'routine maintenance',
enabled => true,
auto_drop => true,
comments => 'test job',
credentail_name => null,
destination_name => null);
end;
创建后,下表会有相关记录信息,分别记录 job 与 schedule , 以及 job 与 action 之间的关系。
test=# select * from kdb_schedule.kdb_schedule_job;
sjid | sjscid | sjjobid | sjstatus | sjlasttime | sjnexttime
------+--------+---------+----------+------------+------------
7 | 7 | 1 | s | | test=# select * from kdb_schedule.kdb_job_action;
jaid | jajobid | jaacid | jastatus | jalasttime
------+---------+--------+----------+------------
7 | 1 | 7 | s |
具体的job信息,可以看 kdb_job:
test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
-------+---------+------------+-------------------------------+------------------------+----------------
1 | job_01 | t | 2021-06-22 14:59:41.997986+08 | 2021-06-22 15:00:38+08 | 0
(1 row)
4、Enable and Disable Job
Job 创建时,可以指定enable or disable ,后续也可以手动修改。
begin
dbms_scheduler.disable(name => 'job_01');
end;
/ test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
-------+---------+------------+-------------------------------+------------------------+----------------
1 | job_01 | f | 2021-06-22 15:06:42.303189+08 | 2021-06-22 15:07:38+08 | 0
(1 row) begin
dbms_scheduler.enable(name => 'job_01');
end;
/ test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
-------+---------+------------+-------------------------------+------------------------+----------------
1 | job_01 | t | 2021-06-22 15:08:07.365179+08 | 2021-06-22 15:08:38+08 | 0
(1 row)
5、其他操作
begin
dbms_scheduler.drop_job(job_name => 'job_01');
end;
/ begin
dbms_scheduler.drop_schedule(schedule_name => 'schedule_01');
end;
/ begin
dbms_scheduler.drop_program(program_name => 'prog_01');
end;
/ begin
dbms_scheduler.run_job(job_name => 'job_01');
end;
/
三、故障排查
kdb_schedule.kdb_jobsteplog 记录了job 调用的具体信息,如果有错误的,jsloutput 会显示具体的错误信息。 sys_log/sys_jobbgworker.log 也记录了相关的日志信息。
Job And Schedule (V8R6C4)的更多相关文章
- KingbaseES R6 集群测试job管理测试
案例说明: 本案例参考<Job And Schedule (V8R6C4)>(https://www.cnblogs.com/kingbase/p/15194227.html)单实例环境下 ...
- [LeetCode] Course Schedule II 课程清单之二
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- [LeetCode] Course Schedule 课程清单
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- POJ 1325 Machine Schedule——S.B.S.
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13731 Accepted: 5873 ...
- Spring Schedule 任务调度实现
我们都知道任务调度可以用Quartz,但对于简单的定时任务,可以直接用Spring内置的Schedule来实现.可以由两种方式,注释+XML配置 注解方式: 注解也要先在sping.xml配置文件中配 ...
- HDU 3572 Task Schedule(拆点+最大流dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- Spring Shedule Task之注解实现 (两次启动Schedule Task 的解决方案)
在spring 中的新引入的task 命名空间.可以部分取代 quartz 功能,配置和API更加简单,并且支持注解方式. 第一步: 在Spring的相关配置文件中(applicationContex ...
- Schedule 学习
现在做的项目都有用到Schedule,现在用一点时间来总结. 一.首先要到Nuget中下载Quartz.net. 二.下载下来了,你需要对它进行配置,使它能给你正常的使用. 三.在Global.asa ...
- Spring 4.x Task 和 Schedule 概述(代java配置)
转载请注明https://zhangzhaoyu.github.io/2016/09/30/spring-task-and-schedule-deep-research/ 摘要 在很多业务场景中,系统 ...
随机推荐
- Git下载(快速快速快速下载!!)
在安装Git环境的时候,需要下载Git的安装包,但是官网的下载网速实在是太慢的(几十M的安装包,下载速度只有几十K) (所以可以在镜像中下载,速度超快) Git镜像下载链接-------------- ...
- idea显示 RunDashboard ,多个启动项时列表显示
在.idea(项目所在文件夹中)下的workspace.xml文件中找到 <component name="RunDashboard"> 标签,然后添加如下节点 < ...
- for循环 --和复合赋值
阶乘 1.n!=1x2x3x4x...xn 2.写出一个程序,让用户输入n,然后计算输出n! *变量: *显然读用户的输入需要一个int的n,然后计算的结果需要用一个变量保存,可以是int的facto ...
- MISC 2022/4/21 刷题记录-千字文
1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...
- 【docker专栏6】详解docker容器状态转换管理命令
docker容器有三种状态运行.停止.暂停,镜像可以创建.运行容器,镜像和容器也可以转换成tar压缩包进行存储.本文为大家介绍容器的状态转换命令及镜像创建运行容器.tar包导入导出相关的命令及使用场景 ...
- java面试题(2022最新)
1.String是基本数据类型么?不是基本数据类型,byte int char long flout duable boolem short 2.int 和integer区别int是基本数据类型,in ...
- 01 开发App真机调试问题
逍遥安卓模拟器 :https://juejin.cn/post/7062922018710093831 HBuilderX真机调试插上手机却提示"未检测到手机或浏览器"的问题:ht ...
- 算法竞赛进阶指南0x33同余
定义 如果整数a,b除以正整数m的余数相同,那么a,b模m同余 . 知识点 拓展欧几里得算法 代码 #include <bits/stdc++.h> using namespace std ...
- 关于 CMS 垃圾回收器,你真的懂了吗?
大家好,我是树哥. 前段时间有个小伙伴去面试,被问到了 CMS 垃圾回收器的详细内容,没答出来.实际上,CMS 垃圾回收器是回收器历史上很重要的一个节点,其开启了 GC 回收器关注 GC 停顿时间的历 ...
- 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...