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 方式:

  1. shared_preload_libraries = 'kdb_schedule , ......'
  2.  
  3. 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

  1. create table d_test(tid varchar2(64), insdate date);
  2.  
  3. create or replace procedure p_test() as
  4. begin
  5. insert into d_test values(to_char(sysdate, 'yyyymmddhh24miss'), sysdate);
  6. commit;
  7. end;
  8. /
  9.  
  10. DECLARE
  11. v_jobid NUMBER;
  12. BEGIN
  13. dbms_job.submit(v_jobid, 'call p_test()', now(), 'Freq=Minutely;Interval=1');
  14. COMMIT;
  15. END;
  16. /
  17.  
  18. test=# call dbms_job.instance(1, 'user=system dbname=test port=54321 password=P123');
  19. CALL

注意:dbms_job.instance 的 1 表示job_id,这是为特定的job_id 设置连接串。

2、查询Job

  1. test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
  2. jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
  3. -------+---------------------------------------------+------------+------------+-------------------------------+----------------
  4. 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

  1. test=# call dbms_job.broken(1,false);
  2. CALL
  3. test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
  4. jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
  5. -------+---------------------------------------------+------------+-------------------------------+------------------------+----------------
  6. 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
  7. (1 row)

enable job 后,等待一会再查,job 是否运行。

4、Job实际上也是Schedule

  1. test=# select * from kdb_schedule.kdb_schedule;
  2. scid | scname | scdesc | scenabled | scstart | scend | screpeat_interval
  3. ------+--------+--------+-----------+----------------------------+-------+--------------------------
  4. 2 | | | t | 2021-06-22 10:11:25.586148 | | Freq=Minutely;Interval=1
  5. (1 row)
  6.  
  7. test=# select * from kdb_schedule.kdb_schedule_job;
  8. sjid | sjscid | sjjobid | sjstatus | sjlasttime | sjnexttime
  9. ------+--------+---------+----------+------------+-------------------------------
  10. 2 | 2 | 1 | s | | 2021-06-22 10:11:25.586148+08

可以看到,通过dbms_job创建的job信息,同样会在kdb_schedule 和kdb_schedule_job 显示。

5、其他Job维护操作

  1. --Job删除
    test=# call dbms_job.remove(1);
  2. CALL

二、通过dbms_scheduler管理Job

1、创建program

  1. begin
  2. dbms_scheduler.create_program(program_name => 'prog_01',
  3. program_type => 'PLSQL_BLOCK',
  4. program_action => 'call public.p_test()',
  5. acconnstr => 'user=system dbname=test port=6666 password=system',
  6. acdbname => 'test',
  7. number_of_arguments => 0,
  8. enabled => true,
  9. comments => 'test program');
  10. end;
  11. /

这里有两个地方必须注意。'PLSQL_BLOCK' 必须大写,acdbname 必须指定。

acdbname 指明了action 所在的数据库,如果没有指定,默认指 kdb_schedule 运行时指定的数据库。成功创建program后,会有如下一行信息:

  1. test=# select * from kdb_schedule.kdb_action;
  2. acid | acname | acdesc | acenabled | ackind | accode | acconnstr | acdbname | acnextrun
  3. ------+---------+--------------+-----------+--------+----------------------+-----------+----------+-----------
  4. 7 | prog_01 | test program | t | s | call public.p_test() | | test |
  5. (1 row)

2、创建Schedule

  1. begin
  2. dbms_scheduler.create_schedule(schedule_name => 'schedule_01',
  3. start_date => now(),
  4. repeat_interval => 'freq=minutely;interval=1',
  5. end_date => null,
  6. comments => 'test schedule');
  7. end;

创建schedule 后,会有如下一行信息:

  1. test=# select * from kdb_schedule.kdb_schedule;
  2. scid | scname | scdesc | scenabled | scstart | scend | screpeat_interval
  3. ------+-------------+---------------+-----------+----------------------------+-------+--------------------------
  4. 7 | schedule_01 | test schedule | t | 2021-06-22 14:28:38.536823 | | freq=minutely;interval=1
  5. (1 row)

3、创建Job

  1. begin
  2. dbms_scheduler.create_job(job_name => 'job_01',
  3. program_name => 'prog_01',
  4. schedule_name => 'schedule_01',
  5. job_class => 'routine maintenance',
  6. enabled => true,
  7. auto_drop => true,
  8. comments => 'test job',
  9. credentail_name => null,
  10. destination_name => null);
  11. end;

创建后,下表会有相关记录信息,分别记录 job 与 schedule , 以及 job 与 action 之间的关系。

  1. test=# select * from kdb_schedule.kdb_schedule_job;
  2. sjid | sjscid | sjjobid | sjstatus | sjlasttime | sjnexttime
  3. ------+--------+---------+----------+------------+------------
  4. 7 | 7 | 1 | s | |
  5.  
  6. test=# select * from kdb_schedule.kdb_job_action;
  7. jaid | jajobid | jaacid | jastatus | jalasttime
  8. ------+---------+--------+----------+------------
  9. 7 | 1 | 7 | s |

具体的job信息,可以看 kdb_job:

  1. test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
  2. jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
  3. -------+---------+------------+-------------------------------+------------------------+----------------
  4. 1 | job_01 | t | 2021-06-22 14:59:41.997986+08 | 2021-06-22 15:00:38+08 | 0
  5. (1 row)

4、Enable and Disable Job

Job 创建时,可以指定enable or disable ,后续也可以手动修改。

  1. begin
  2. dbms_scheduler.disable(name => 'job_01');
  3. end;
  4. /
  5.  
  6. test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
  7. jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
  8. -------+---------+------------+-------------------------------+------------------------+----------------
  9. 1 | job_01 | f | 2021-06-22 15:06:42.303189+08 | 2021-06-22 15:07:38+08 | 0
  10. (1 row)
  11.  
  12. begin
  13. dbms_scheduler.enable(name => 'job_01');
  14. end;
  15. /
  16.  
  17. test=# select jobid,jobname,jobenabled,joblastrun,jobnextrun,jobrepeattimes from kdb_job;
  18. jobid | jobname | jobenabled | joblastrun | jobnextrun | jobrepeattimes
  19. -------+---------+------------+-------------------------------+------------------------+----------------
  20. 1 | job_01 | t | 2021-06-22 15:08:07.365179+08 | 2021-06-22 15:08:38+08 | 0
  21. (1 row)

5、其他操作

  1. begin
  2. dbms_scheduler.drop_job(job_name => 'job_01');
  3. end;
  4. /
  5.  
  6. begin
  7. dbms_scheduler.drop_schedule(schedule_name => 'schedule_01');
  8. end;
  9. /
  10.  
  11. begin
  12. dbms_scheduler.drop_program(program_name => 'prog_01');
  13. end;
  14. /
  15.  
  16. begin
  17. dbms_scheduler.run_job(job_name => 'job_01');
  18. end;
  19. /

三、故障排查

kdb_schedule.kdb_jobsteplog 记录了job 调用的具体信息,如果有错误的,jsloutput 会显示具体的错误信息。 sys_log/sys_jobbgworker.log 也记录了相关的日志信息。

Job And Schedule (V8R6C4)的更多相关文章

  1. KingbaseES R6 集群测试job管理测试

    案例说明: 本案例参考<Job And Schedule (V8R6C4)>(https://www.cnblogs.com/kingbase/p/15194227.html)单实例环境下 ...

  2. [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 ...

  3. [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 ...

  4. POJ 1325 Machine Schedule——S.B.S.

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13731   Accepted: 5873 ...

  5. Spring Schedule 任务调度实现

    我们都知道任务调度可以用Quartz,但对于简单的定时任务,可以直接用Spring内置的Schedule来实现.可以由两种方式,注释+XML配置 注解方式: 注解也要先在sping.xml配置文件中配 ...

  6. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. Spring Shedule Task之注解实现 (两次启动Schedule Task 的解决方案)

    在spring 中的新引入的task 命名空间.可以部分取代 quartz 功能,配置和API更加简单,并且支持注解方式. 第一步: 在Spring的相关配置文件中(applicationContex ...

  8. Schedule 学习

    现在做的项目都有用到Schedule,现在用一点时间来总结. 一.首先要到Nuget中下载Quartz.net. 二.下载下来了,你需要对它进行配置,使它能给你正常的使用. 三.在Global.asa ...

  9. Spring 4.x Task 和 Schedule 概述(代java配置)

    转载请注明https://zhangzhaoyu.github.io/2016/09/30/spring-task-and-schedule-deep-research/ 摘要 在很多业务场景中,系统 ...

随机推荐

  1. 4种方法教你如何查看java对象所占内存大小

    摘要:本文讲述4种查看java对象所占内存大小的方法 本文分享自华为云社区<查看java对象所占内存大小>,作者:xiewenci. 计算java对象所占内存大小 1.使用jdk8自带AP ...

  2. flex大法:一网打尽所有常见布局

    flex全称Flexible Box模型,顾名思义就是灵活的盒子,不过一般都叫弹性盒子,所有PC端及手机端现代浏览器都支持,所以不用担心它的兼容性,有了这玩意,妈妈再也不用担心我们的布局. 先简单介绍 ...

  3. js--js实现基础排序算法

    前言 文本来总结常见的排序算法,通过 JvavScript  来实现 正文 1.冒泡排序 算法思想:比较相邻两个元素的大小,如果第一个比第二个大,就交换它们.从头遍历到尾部,当一轮遍历完后,数组最后一 ...

  4. Tapdata 与阿里云 PolarDB 开源数据库社区联合共建开放数据技术生态

      近日,阿里云 PolarDB 开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态.在此之际,一直专注实时数据服务平台的 Tapdata ,也宣布开源其数据源开发框架--PDK(Plu ...

  5. IDEA的项目结构和IDEA的HelloWord

    IDEA首次驱动 1. 选择不导入任何设置,点击 OK 2. 选择 Create New Project 3. 点击 new 按钮,配置安装的 JDK9 版本 选择 JDK9 目录,点击确定 4. 不 ...

  6. ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

    本次 Apache ShardingSphere 5.1.2 版本更新为大家带来了三大全新功能,其中之一即为使用 ShardingSphere-Proxy chart 在云环境中快速部署一套 Shar ...

  7. Windows安装face_recognition

    安装提供的python和cmake,最好都添加一下环境变量 安装dlib,pip install dlib-19.7.0-cp36-cp36m-win_amd64.whl 安装face_recogni ...

  8. 【前端面试】Vue面试题总结(持续更新中)

    Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...

  9. 串口通信:接受数据(仿真task写法)

    1.功能描述 设计一个串口数据接收模块.能够以设定的波特率(与发射端口速率匹配)接收数据,并输出保存到一个寄存器中. 2.过程描述 ①边沿检测器,识别出起始位时让接收使能端有效.这里需要排除边沿脉冲的 ...

  10. 基于infiniband(IB)网的MVAPICH2安装

    一.下载安装包 下载链接:http://mvapich.cse.ohio-state.edu/downloads/  二.解压编译安装 mkdir /home/xujb/mvapich2 tar -x ...