暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss定时任务功能函数

原创 言笑 2024-10-18
338

适用范围

openGauss定时任务接口介绍

Pkg Service简介

在openGauss中,pkg service(Package Service)是一个用于管理和部署数据库扩展包的服务。数据库扩展包是一组扩展功能的集合,可以通过安装和卸载扩展包来增加或删除数据库的功能。

pkg service提供的定时任务接口再通过compat-tools工具封装为DBMS_JOB模块后,保持与Oracle的DBMS_JOB模块一致的定时任务功能。

定时任务创建后会分配对应的id,可通过视图pg_job查看任务执行状态。

下面将介绍该模块的相关接口函数:

定时任务函相关函数

#开启定时任务
select 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);

#暂停或者恢复定时任务
select PKG_SERVICE.JOB_FINISH(
id          IN   INTEGER,
broken       IN   BOOLEAN,  //true:禁用,false:启用
next_time    IN   TIMESTAMP  DEFAULT  sysdate);  //下一次运行时间

#修改定时任务
select PKG_SERVICE.JOB_UPDATE(
id             IN   BIGINT,
next_time      IN   TIMESTAMP,
interval_time  IN   TEXT,
content        IN   TEXT);

#删除定时任务
select PKG_SERVICE.JOB_CANCEL(
job  IN  INTEGER);  //指定作业号

测试流程

创建一个基本表

openGauss=# create  table job_table(id int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "job_table_pkey" for table "job_table"
CREATE TABLE

创建一个序列

openGauss=# create sequence job_seq start with 1 increment 1 nomaxvalue;
CREATE SEQUENCE

创建一个存储过程

#利用存储过程结合序列自增给job_table插入数据
openGauss=# create or replace procedure job_proc() as 
openGauss$# begin
openGauss$# insert into job_table values (job_seq.nextval);
openGauss$# end;
openGauss$# /
CREATE PROCEDURE

查看存储过程oid

openGauss=# select oid from pg_proc where proname='job_proc';
-[ RECORD 1 ]
oid | 41190

openGauss=# select * from pg_get_functiondef(41190);
-[ RECORD 1 ]------------------------------------------------
headerlines | 1
definition  | CREATE OR REPLACE PROCEDURE public.job_proc()
            | AS  DECLARE 
            | begin
            | insert into job_table values (job_seq.nextval);
            | end;
            | /
            | 

开启一个定时任务

openGauss=# select PKG_SERVICE.JOB_SUBMIT(1,'call job_proc()',sysdate,'sysdate+1/(24*60*60)');
-[ RECORD 1 ]-
job_submit | 1
#每1s检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 22
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 24
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 25

暂停该定时任务

openGauss=# select pkg_service.job_finish(1,true);
-[ RECORD 1 ]
job_finish | 
#每1s检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136

修改该定时任务执行周期

#10s执行一次
openGauss=# select pkg_service.job_update(1,sysdate,'sysdate+1/(24*60*6)','call job_proc()');
-[ RECORD 1 ]
job_update |

重新启用该定时任务

openGauss=# select pkg_service.job_finish(1,false);
-[ RECORD 1 ]
job_finish | 
#每5秒检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 146

openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 146

openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 147

openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 147

删除该定时任务

openGauss=# select pkg_service.job_cancel(1);      
-[ RECORD 1 ]
job_cancel | 

openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165

openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165

openGauss=# 
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165

openGauss=# select * from pg_job;
(No rows)

参考文档

https://docs.opengauss.org/zh/docs/3.0.0/docs/Developerguide/PKG_SERVICE.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论