首页 > 其他分享 >如何在openGauss 2.1.0中使用Job

如何在openGauss 2.1.0中使用Job

时间:2024-04-10 11:24:48浏览次数:17  
标签:10 09 JOB id job 2021 Job openGauss 2.1

如何在 openGauss 2.1.0 中使用 Job
如何在 openGauss 2.1.0 中使用 Job
Job 类似 unix 中的 crontab,有定时执行的功能,可以在指定的时间点或每天的某个时间点等自行执行任务。在各类系统使用运行过程中,经常会遇到需要定时完成的任务,比如定时更新数据,定时统计数据生成报表等等,这些工作都可以使用 Job 来完成。在 openGauss 2.1.0 中,提供了以下接口来实现管理 Job:

接口描述

接口名称

描述

PKG_SERVICE.JOB_CANCEL

通过任务ID来删除定时任务。

PKG_SERVICE.JOB_FINISH

禁用或者启用定时任务。

PKG_SERVICE.JOB_SUBMIT

提交一个定时任务。作业号由系统自动生成或由用户指定。

PKG_SERVICE.JOB_UPDATE

修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。

PKG_SERVICE.SUBMIT_ON_NODES

提交一个任务到所有节点,作业号由系统自动生成。

PKG_SERVICE.ISUBMIT_ON_NODES

提交一个任务到所有节点,作业号由用户指定

接口定义和使用示例
PKG_SERVICE.JOB_CANCEL

存储过程 CANCEL 删除指定的定时任务。

PKG_SERVICE.JOB_CANCEL 函数原型为:

PKG_SERVICE.JOB_CANCEL( job IN INTEGER);

参数

类型

入参/出参

是否可以为空

描述

id

integer

IN

指定的作业号。

示例:

CALL PKG_SERVICE.JOB_CANCEL(101);
PKG_SERVICE.JOB_FINISH

存储过程 FINISH 禁用或者启用定时任务。

PKG_SERVICE.JOB_FINISH 函数原型为:

PKG_SERVICE.JOB_FINISH( id IN INTEGER, broken IN BOOLEAN, next_time IN TIMESTAMP DEFAULT sysdate);

参数

类型

入参/出参

是否可以为空

描述

id

integer

IN

指定的作业号。

broken

Boolean

IN

状态标志位,true代表禁用,false代表启用。根据true或false值更新当前job;如果为空值,则不改变原有job的状态。

next_time

timestamp

IN

下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为’4000-1-1’;如果参数broken状态为false,且如果参数next_time不为空值,则更新指定job的next_time值,如果next_time为空值,则不更新next_time值。该参数可以省略,为默认值。

PKG_SERVICE.JOB_SUBMIT

存储过程 JOB_SUBMIT 提交一个系统提供的定时任务。

PKG_SERVICE.JOB_SUBMIT 函数原型为:

PKG_SERVICE.JOB_SUBMIT( id IN BIGINT DEFAULT, content IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, interval_time IN TEXT DEFAULT ‘null’, job OUT INTEGER);

当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过 call 或 select 调用,如果通过 select 调用,可以不填写出参。如果在存储过程中,则需要通过 perform 调用该接口函数。如果提交的 sql 语句任务使用到非 public 的 schema,应该指定表或者函数的 schema,或者在 sql 语句前添加 set current_schema = xxx;语句。

参数

类型

入参/出参

是否可以为空

描述

id

bigint

IN

作业号。如果传入id为NULL,则内部会生成作业ID。

context

text

IN

要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。

next_time

timestamp

IN

下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。

interval_time

text

IN

用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成’d’ 不再执行。

job

integer

OUT

作业号。范围为1~32767。当使用select调用pkg_service.job_submit时,该参数可以省略。

示例:

SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1'); SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24'); CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(860+30.0)/(2460)' ,:jobid); SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24');
PKG_SERVICE.JOB_UPDATE

存储过程 UPDATE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。

PKG_SERVICE.JOB_UPDATE 函数原型为:

PKG_SERVICE.JOB_UPDATE( id IN BIGINT, next_time IN TIMESTAMP, interval_time IN TEXT, content IN TEXT);

参数

类型

入参/出参

是否可以为空

描述

id

integer

IN

指定的作业号。

next_time

timestamp

IN

下次运行时间。如果该参数为空值,则不更新指定job的next_time值,否则更新指定job的next_time值。

interval_time

text

IN

用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval_time值;如果该参数不为空值,会校验interval_time是否为有效的时间类型或interval类型,则更新指定job的interval_time值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成’d’ 不再执行。

content

text

IN

执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的content值,否则更新指定job的content值。

示例:

CALL PKG_SERVICE.JOB_UPDATE(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440'); CALL PKG_SERVICE.JOB_UPDATE(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440');
PKG_SERVICE.SUBMIT_ON_NODES

存储过程 SUBMIT_ON_NODES 创建一个所有 CN/DN 上的定时任务,仅 sysadmin 有此权限。

PKG_SERVICE.SUBMIT_ON_NODES 函数原型为:

PKG_SERVICE.SUBMIT_ON_NODES( node_name IN TEXT, database IN TEXT what IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, job_interval IN TEXT DEFAULT 'null', job OUT INTEGER);

参数

类型

入参/出参

是否可以为空

描述

node_name

text

IN

指定作业的执行节点,当前仅支持值为’ALL_NODE’(在所有节点执行)与’CCN’(在central coordinator执行)。

database

text

IN

集群作业所使用的database,节点类型为’ALL_NODE’时仅支持值为’postgres’。

what

text

IN

要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。

nextdate

timestamp

IN

下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。

job_interval

text

IN

用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成’d’不再执行。

job

integer

OUT

作业号。范围为1~32767。当使用select调用dbms.submit_on_nodes时,该参数可以省略。

示例:

select pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); select pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second''');
PKG_SERVICE.ISUBMIT_ON_NODES

ISUBMIT_ON_NODES 与 SUBMIT_ON_NODES 语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT 最后一个参数是出参,表示系统自动生成的作业号。仅 sysadmin 有此权限。

JOB 的使用示例
创建测试表

gaussdb@postgres> create table t_job (value TIMESTAMP);
CREATE TABLE

gaussdb@postgres> insert into t_job values(sysdate);
INSERT 0 1

gaussdb@postgres> select * from t_job;
+---------------------+| value ||---------------------|
| 2021-10-09 04:36:20 |+---------------------+
SELECT 1
创建任务,每一分钟插入一条记录

gaussdb@postgres> select pkg_service.job_submit(null, 'insert into t_job values(sysdate);',sysdate,'sysdate + 1/1440');
+--------------+| job_submit ||--------------|| 15566 |+--------------+
SELECT 1
检查 JOB 运行结果

gaussdb@postgres> select * from t_job;
+---------------------+| value ||---------------------|
| 2021-10-09 04:36:20 || 2021-10-09 04:40:54 || 2021-10-09 04:41:54 || 2021-10-09 04:42:54 |+---------------------+
SELECT 4
从系统视图中检查 JOB 运行情况

gaussdb@postgres> select job_id,dbname,start_date,next_run_date,interval,failure_count from pg_job;
+----------+----------+----------------------------+---------------------+------------------+-----------------+
| job_id | dbname | start_date | next_run_date | interval | failure_count |
|----------+----------+----------------------------+---------------------+------------------+-----------------|
| 15566 | postgres | 2021-10-09 04:40:54.072363 | 2021-10-09 04:56:54 | sysdate + 1/1440 | 0 |
+----------+----------+----------------------------+---------------------+------------------+-----------------+
SELECT 1Time: 0.089sgaussdb@postgres> select * from pg_catalog.pg_job_proc pjp where job_id=15566;
+----------+------------------------------------+|
job_id | what |
|----------+------------------------------------|
| 15566 | insert into t_job values(sysdate);
|+----------+------------------------------------+
SELECT 1Time: 0.089s
修改为 2 分钟执行一次

gaussdb@postgres> select pkg_service.job_update(15566,null,'sysdate + 2/1440',null);
+--------------+| job_update |
|--------------|| |
+--------------+SELECT 1
检查修改情况和运行结果

[gaussdb@postgres> select job_id,interval from pg_job where job_id=15566;
+----------+------------------+| job_id | interval ||----------+------------------|| 15566 | sysdate + 2/1440 |+----------+------------------+
SELECT 1](<gaussdb@postgres%3E select * from t_job;
+---------------------+| value ||---------------------|| 2021-10-09 04:36:20 || 2021-10-09 04:40:54 || 2021-10-09 04:41:54 || 2021-10-09 04:42:54 || 2021-10-09 04:43:54 || 2021-10-09 04:44:54 || 2021-10-09 04:45:54 || 2021-10-09 04:46:54 || 2021-10-09 04:47:54 || 2021-10-09 04:48:54 || 2021-10-09 04:49:54 || 2021-10-09 04:50:54 || 2021-10-09 04:51:54 || 2021-10-09 04:52:54 || 2021-10-09 04:53:54 || 2021-10-09 04:54:54 || 2021-10-09 04:55:54 || 2021-10-09 04:56:54 || 2021-10-09 04:57:54 || 2021-10-09 04:58:54 || 2021-10-09 04:59:54 || 2021-10-09 05:00:55 || 2021-10-09 05:01:56 | <---| 2021-10-09 05:03:57 | <--- 开始间隔2分钟+---------------------+
SELECT 24Time: 0.088sgaussdb@postgres> select job_id,interval,next_run_date from pg_job where job_id=15566;
+----------+------------------+---------------------+| job_id | interval | next_run_date ||----------+------------------+---------------------|| 15566 | sysdate + 2/1440 | 2021-10-09 05:05:57 |+----------+------------------+---------------------+
SELECT 1Time: 0.078s>
禁用和启用任务

禁用和启用都是同样的函数 pkg_service.job_finish,传入不同的参数表示是禁用还是启用。

gaussdb@postgres> select pkg_service.job_finish(15566,true,null);
+--------------+| job_finish ||--------------|| |+--------------+
SELECT 1Time: 0.089sgaussdb@postgres> select job_id,next_run_date,job_status from pg_job where job_id=15566;
+----------+---------------------+--------------+| job_id | next_run_date | job_status ||----------+---------------------+--------------|| 15566 | 4000-01-01 00:00:00 | d |+----------+---------------------+--------------+
SELECT 1Time: 0.075sgaussdb@postgres> select pkg_service.job_finish(15566,false,null);+--------------+| job_finish ||--------------|| |+--------------+SELECT 1Time: 0.091sgaussdb@postgres> select job_id,next_run_date,job_status from pg_job where job_id=15566;+----------+---------------------+--------------+| job_id | next_run_date | job_status ||----------+---------------------+--------------|| 15566 | 4000-01-01 00:00:00 | s |+----------+---------------------+--------------+
SELECT 1Time: 0.080s
可以看到如果重新启用任务的时候,没有指定下次运行时间,那么下次运行时间会始终保持在 4000 年,意味着仍然不会启动,所以如果禁用任务之后再重新启动,需要手动显式指定下次运行时间。

gaussdb@postgres> select pkg_service.job_finish(15566,false,sysdate);+--------------+| job_finish ||--------------|| |+--------------+SELECT 1Time: 0.088sgaussdb@postgres> select job_id,next_run_date,job_status from pg_job where job_id=15566;+----------+---------------------+--------------+| job_id | next_run_date | job_status ||----------+---------------------+--------------|| 15566 | 2021-10-09 05:16:22 | s |+----------+---------------------+--------------+SELECT 1Time: 0.086s
删除任务

gaussdb@postgres> select pkg_service.job_cancel(15566);+--------------+| job_cancel ||--------------|| |+--------------+SELECT 1Time: 0.082sgaussdb@postgres> select job_id,next_run_date,job_status from pg_job where job_id=15566;+----------+-----------------+--------------+| job_id | next_run_date | job_status ||----------+-----------------+--------------|+----------+-----------------+--------------+SELECT 0Time: 0.086sgaussdb@postgres> select * from pg_catalog.pg_job_proc pjp where job_id=15566;+----------+--------+| job_id | what ||----------+--------|+----------+--------+SELECT 0Time: 0.087s
opengauss

标签:10,09,JOB,id,job,2021,Job,openGauss,2.1
From: https://www.cnblogs.com/helloopenGauss/p/18125649

相关文章

  • el-table(V 2.15.14)在使用树结构表格并且设置align = 'center'后 树结构层级不明显问
    开发中遇到的小问题:如图所示三个层级区分并不明显,用户体验差解决方案:自定义CSS:首先取消此列的align="center"然后插入以下代码(此CSS为更改图示第二列的样式如果是其它列请自己获取样式名称)//标题居中::v-deepth.el-table_1_column_2.is-leaf.el-table__cell{t......
  • 算法模板 v1.12.1.20240409
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • openGauss Gin 索引
    openGaussGin索引概述GIN(GeneralizedInvertedIndex)通用倒排索引,是首选的文本搜索索引类型。倒排索引对应的列上的数据类型通常是一个多值类型,索引中包含每个单词的索引条目,以及所匹配的位置的压缩列表。如果搜索条件是多个单词,可以先使用第一个单词进行匹配,再在找到的结果中......
  • openGauss2.1.0新特性-账本数据库实验
    openGauss2.1.0新特性-账本数据库实验账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。当用户创建防篡改用户表时,系统将自动为该表添加一个hash列来保存每行数据的hash摘要信息,同时在blockchain模式下会创建一张用户历史表来记录对应用户......
  • 如何在openGauss 2.1.0中使用Job
    如何在openGauss2.1.0中使用Job如何在openGauss2.1.0中使用JobJob类似unix中的crontab,有定时执行的功能,可以在指定的时间点或每天的某个时间点等自行执行任务。在各类系统使用运行过程中,经常会遇到需要定时完成的任务,比如定时更新数据,定时统计数据生成报表等等,这些......
  • VMware下CentOS7.6安装openGauss
    VMware下CentOS7.6(7.9)安装openGausscentos安装这里我使用的是vmwareworkstationPro15虽然官网了解了一下openGauss最适合的centos版本为centos7.6但是因为centos7.6版本已经停更,所以我这里下载的是7.9版本的镜像文件下载完成后打开vmware,创建新的虚拟机......
  • openGauss升级脚本撰写
    概述重要提示:升级过程通过执行升级sql脚本实现系统表变更,这些脚本必须由开发人员在修改系统表的同时一并提供升级sql脚本,请将这些脚本代码提交至openGauss-server/src/include/catalog/upgrade_sql目录下,该目录结构如下所示。1.1.升级目录介绍src/include/catalog/up......
  • openGauss 2.1.0 闪回特性
    openGauss2.1.0闪回特性openGauss2.1.0于2021年9月30日发布,是openGauss的一个Preview版本,该版本生命周期仅为半年。该版本的新增功能如下:存储过程兼容性增强SQL引擎能力增强支持Ustore存储引擎支持段页式存储基于Paxos分布式一致性协议的高可用AI4DB和......
  • JDBC驱动连接MogDB/opengauss
    JDBC驱动连接MogDB/opengauss一、环境说明[root@node1~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@node1ext]#java-versionjavaversion"1.8.0_301"Java(TM)SERuntimeEnvironment(build1.8.0_301-b09)JavaHotSpot(TM)64-Bit......
  • 在ECS上安装部署openGauss数据库指导手册
    在ECS上安装部署openGauss数据库指导手册文档下载:在ECS上安装部署openGauss数据库指导手册.docx前言简介openGauss是关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。本实验主要描述openGauss数据库在......