openGauss之定时任务简单管理

2023年 11月 30日 80.7k 0

openGauss 之定时任务简单管理

零、概述

本文主要介绍定时任务涉及到的接口函数,并对函数中重要参数做简单说明,最后通过简单的实践来演示 openGauss 中定时任务的简单管理,关于相关函数的详细介绍请点击如下链接:PKG_SERVICE

一、定时任务涉及到的函数:

1、删除指定的定时任务

PKG_SERVICE.JOB_CANCEL(
job IN INTEGER); //指定作业号

2、禁用或启用定时任务

PKG_SERVICE.JOB_FINISH(
id IN INTEGER,
broken IN BOOLEAN, //true:禁用,false:启用
next_time IN TIMESTAMP DEFAULT sysdate); //下一次运行时间

3、提交一个系统提供的定时任务

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);

4、修改定时任务的属性

包括任务内容、下次执行时间、执行间隔。

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

二、实践操作

//创建一张表
openGauss=# create table test3(id int);
CREATE TABLE

//创建一个序列,用于向表test3中插入数据
openGauss=# create sequence seq2 start with 1 increment 1 nomaxvalue;
CREATE SEQUENCE

//创建一个存储过程作为定时任务的内容
openGauss=# create or replace procedure job_test
as
begin
insert into test3 values(seq2.nextval);
end;
openGauss$# /
CREATE PROCEDURE

//获取函数或存储过程的定义,通过系统表pg_proc查看,或通过函数pg_get_functiondef(oid)查看
openGauss=# select oid from pg_proc where proname='job_test';
oid
-------
16919
(1 row)

openGauss=# select * from pg_get_tabledef(16919);
ERROR: cache lookup failed for table 16919.
openGauss=# select * from pg_get_functiondef(16919);
headerlines | definition
-------------+-----------------------------------------------
1 | CREATE OR REPLACE PROCEDURE public.job_test()+
| AS DECLARE +
| begin +
| insert into test3 values(seq2.nextval); +
| end; +
| / +
|
(1 row)

//创建一个定时任务
openGauss=# select pkg_service.job_submit(1,'select job_test()',sysdate,'sysdate+1/(24*60)');
job_submit
------------
1
(1 row)
//第一个参数指定定时任务的作业号,如果传入的第一个参数为null值系统会自动为其生成一个作业号。
//上面的定时任务表示一分钟执行一次。
//通过系统表pg_job可以查看当前有哪些定时任务
select * from pg_job;

//检验定时任务是否成功
//1.查看表test3中是否有数据插入
openGauss=# select * from test3;
id
----
1
2
3
4
(4 rows)
//2.查看日志文件
/var/log/omm/omm/pg_log/dn_6001/postgresql-2022-05-07_085229.log
随着定时任务的开启,该日志文件会变得越来越大,记得定期清理。

//让定时任务失效,第三个参数可以省略,表示作业下一次执行的时间
openGauss=# select pkg_service.job_finish(1,true);
job_finish
------------

(1 row)
//执行过后,该定时任务的job_status会变成d,next_run_date字段会变成:4000-01-01 00:00:00
openGauss=# select * from pg_job;
-[ RECORD 1 ]--------+---------------------------
job_id | 1
current_postgres_pid | -1
log_user | omm
priv_user | omm
dbname | postgres
node_name | dn_6001
job_status | d
start_date | 2022-05-07 12:41:50.469699
next_run_date | 4000-01-01 00:00:00
failure_count | 0
interval | sysdate+1/(24*60)
last_start_date | 2022-05-07 12:48:54.693115
last_end_date | 2022-05-07 12:48:54.69783
last_suc_date | 2022-05-07 12:48:54.693115
this_run_date | 2022-05-07 12:48:54.693115
nspname | public
job_name |
end_date |
enable |
failure_msg |

//修改定时任务为一天执行一次,(注意:修改之前记得启动该定时任务pkg_service.job_finish)
openGauss=# select pkg_service.job_update(1,sysdate,'sysdate+1',null);
-[ RECORD 1 ]
job_update |

//删除定时任务,(如下显示是预先在gsql客户端执行了\x元命令)
openGauss=# select pkg_service.job_cancel(1);
-[ RECORD 1 ]
job_cancel |

本次实践中,设置的定时任务只是做了一个简单的工作,并不是特别的复杂。通过本次实践可以初步了解定时任务的创建、修改和删除过程。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论