GaussDB云数据库SQL应用系列-定时任务管理
GaussDB数据库定时任务主要可以用于实现定期的备份、统计信息采集、数据汇总、数据清理与优化等,它是指在指定的时间间隔内自动执行一次或多次SQL语句的程序。
一、GaussDB数据库定时任务介绍
GaussDB数据库兼容Oracle定时任务功能主要通过DBE_TASK高级功能包提供的二次封装接口实现(另可参见GaussDB提供的基础接口PKG_SERVICE,此接口也可实现定时任务创建),主要包括创建定时任务、任务到期自动执行、任务删除、修改任务属性(任务id、任务的关闭开启、任务的触发时间、触发时间间隔、任务内容)等。
创建(提交)一个定时任务:
CALL DBE_TASK.ID_SUBMIT (job_id,task_name,start_time,interval_time)
- job_id:作业号,指定job_id创建任务,其中job_id可用范围为1~32767。
- task_name:要执行的SQL语句。支持一个或多个‘DDL’(不支持DB相关操作),‘DML’,‘匿名块’,‘调用存储过程的语句’或4种混合的场景。
- start_time:任务的开始时间,可以使用 sysdate 表示立即执行。
- interval_time:任务的执行间隔,例如 'interval ''1 day''' 表示每天执行一次。
需要注意的是,该功能需要在具有相应权限的数据库会话中运行,并且需要替换相应的任务名称和其他参数。此外,该功能只是提交一个定时任务,并不会立即执行任务。任务的执行时间由start_time和interval_time参数控制。
二、创建GaussDB定时任务(场景+示例)
根据GaussDB数据库定时任务应用场景,创建测试表及定时任务。
1、设置应用场景
数据备份和恢复:例如,根据业务需要,按天备份数据库中的一张日销售信息表(累全量)。(Tips:以下是模拟一个简单的业务场景,实际生产环境时,对应的字段、更优的业务逻辑处理方式,请以真实场景为准。)
1)创建测试表
创建一张日销售信息表(sell_info)和一张销售信息全量表(sell_info_full),其中包含字段有:销售编号、销售日期、商品编号、商品名称、商品数量、商品售价。全量表sell_info_full比表sell_info多一个任务执行日期字段(etl_date)。
--日销售信息表(sell_info) CREATE TABLE sell_info ( sell_id int PRIMARY KEY ,sell_date date not null ,goods_id char(20) not null ,goods_name char(20) not null ,goods_number int not null ,sell_goods_amount int not null ); --插入一条测试数据 INSERT INTO sell_info(sell_id,sell_date,goods_id,goods_name,goods_number,sell_goods_amount) VALUES (1001,date'2023-06-02','g_001','g_001',10,10); --销售信息全量表(sell_info_full), CREATE TABLE sell_info_full ( sell_id int PRIMARY KEY ,sell_date date not null ,goods_id char(20) not null ,goods_name char(20) not null ,goods_number int not null ,sell_goods_amount int not null ,etl_date date not null ); |
2)创建存储过程,用于定时任务调度
--创建存储过程 sell_info_full_pro CREATE PROCEDURE sell_info_full_pro() IS BEGIN --累加存放每日销售信息数据 INSERT INTO sell_info_full( sell_id ,sell_date ,goods_id ,goods_name ,goods_number ,sell_goods_amount ,etl_date) SELECT sell_id ,sell_date ,goods_id ,goods_name ,goods_number ,sell_goods_amount ,sell_date as etl_date FROM sell_info; --清空日销售信息表 TRUNCATE TABLE sell_info; END; / |
3)创建定时任务
任务目标:通过创建定时任务, 每天在销售系统关闭后(22:00)进行累全操作,假设job启动日期是2023-06-02,则提交一个定时任务如下:
call dbe_task.id_submit(1,'call sell_info_full_pro();','2023-06-02 22:00:00','interval ''1 day''') |
4)查看已创建的任务
select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs; |
其中字段及其参数说明见下文第3节第1点。
5)查看执行结果
根据业务逻辑,查看相应的结果(此处略)。测试时可将定时“2023-06-02 22:00:00”改成立刻执行“sysdate”,然后查看执行结果。
2、更多适用场景
1)数据清理和优化:例如,定期归档(清理)数据库中的无用数据、过期数据和重复数据,并对数据库进行性能优化,以提高数据库的运行效率和稳定性。
2)数据统计和分析:例如,根据业务需求,定期从数据库中提取数据并进行统计和分析,以便为企业决策提供支持。
3)定时任务通知:例如,通过定时任务向用户发送邮件、短信或其他通知信息,提醒用户关注某些重要的业务活动或事件。
4)定时更新状态:例如,商品定时开售,活动到期自动修改为已结束状态,活动结束商品自动下架,超过三十分钟未支付自动取消订单,到期自动解冻账号。
……
三、管理GaussDB定时任务
1、查看已创建的任务
通过MY_JOBS视图查看当前用户所属的定时任务详情
--查看当前用户所属的定时任务详情 select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs; |
MY_JOBS视图为当前用户所属定时任务的详细信息,其字段含义参见下表:
名称 | 类型 | 描述 |
job | bigint | 作业ID。 |
log_user | name | 创建者的UserName。 |
priv_user | name | 作业执行者的UserName。 |
dbname | name | 作业创建数据库名称。 |
schema_user | name | 定时任务的默认模式。 |
start_date | timestamp without time zone | 作业的开始时间。 |
start_suc | text | 作业成功执行的开始时间。 |
last_date | timestamp without time zone | 上次运行开始时间。 |
last_suc | text | 上次成功运行的开始时间。 |
last_sec | text | 上次成功运行的开始时间,提供兼容性支持。 |
this_date | timestamp without time zone | 正在运行任务的开始时间。 |
this_suc | text | 正在运行任务成功的开始时间。 |
this_sec | text | 正在运行任务成功的开始时间,提供兼容性支持。 |
next_date | timestamp without time zone | 任务下次执行时间。 |
next_suc | text | 任务下次成功执行时间。 |
next_sec | text | 任务下次成功执行时间,提供兼容性支持。 |
total_time | numeric | 任务最近一次的执行时长。 |
broken | text | 如果任务状态为破,则为'y',否则为'n'。 |
status | "char" | 执行状态,取值范围:('r', 's', 'f', 'd'),默认为'r',取值含义:r=running、s=successfully finished、f= job failed、d=aborted |
interval | text | 用来计算下次运行时间的时间表达式,如果为null则表示定时任务只执行一次。 |
failures | smallint | 失败计数,作业连续执行失败16次,不再继续执行。 |
what | text | 可执行的作业。 |
2、停用/启用任务
语法格式:
call dbe_task.finish(id, broken, next_time); |
1)停用任务, 是将对应任务挂起,不做任何操作。
call dbe_task.finish(1,true); |
2)启用任务,则是将任务正常启动, 按任务设置执行相应的SQL语句或程序
call dbe_task.finish(1,false,'2023-06-02 22:00:00'); |
3、修改任务
1)DBE_TASK.UPDATE——修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。
2)另,可分别且单独修改其参数内容:
DBE_TASK.CONTENT ——修改可执行的SQL语句块
DBE_TASK.NEXT_TIME——修改下次执行时间属性
DBE_TASK.INTERVAL——修改执行时间间隔
4、删除任务
DBE_TASK.CANCEL——删除指定的定时任务。
小结:以上所有管理过程,均以任务作业号为唯一键进行操作。
四、总结
GaussDB数据库提供了丰富的定时任务功能。需要注意的是,定时任务的设置和使用需要谨慎,避免误删重要数据或影响业务正常运行。同时,也需要保证定时任务的可靠性和稳定性,避免出现任务漏执行或执行重复的情况。
总之,在使用GaussDB数据库时,创建定时任务可以在很多场景中应用,同时可以帮助我们提高系统的运行效率和方便性等。
——结束

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python自动化测试的配置层实现方式对标与落地 | 京东云技术团队
Python中什么是配置文件,配置文件如何使用,有哪些支持的配置文件等内容,话不多说,让我们一起看看吧~ 1 什么是配置文件? 配置文件是用于配置计算机程序的参数和初始化设置的文件,如果没有这些配置程序可能无法运行或是影响运行(运行速度、便捷性等),使用配置文件的好处在于,部分内容以及环境运行时只需要修改配置文件的参数内容,而无需去代码里查找并修改,提高便捷性、提高可维护性。 2 配置文件有哪几种? 配置主要有四种形式: 第一种是YAML、JSON、XML、TOML、INI、Linux系统中的.bashrc一类,主要应用于软件测试领域,在软件测试的领域行业中,大多数公司采用最新的YAML形式来作为配置文件,例如数据库地址、用例数据等内容的存放,而少部分公司仍然采用旧的INI配置形式 第二种是excel表格的形式,在excel表格中会有固定的title代表每个字段列的含义,有多列,以此来进行配置,多用于游戏领域中,在游戏行业大量使用excel表格的形式,已经是一个常态了。 第三种是py文件,py文件对于一个纯Python项目而言是非常方便的,它不需要做数据的读取操作,只需要进行导入即可,...
- 下一篇
HTTP请求:requests模块基础使用必知必会 | 京东云技术团队
1 背景 http请求是常见的一种网页协议,我们看到的各种网页,其实都是发送了http请求得到了服务器的响应,从而将数据库中复杂的数据以简单、直观的方式呈现出来,方便大众阅读、使用。而如何发送http请求呢?今天来探讨一下使用requests模块,达到高效、简单的http请求操作。 2 什么是requests requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,虽然标准库中的urllib2模块已经包含了平时我们使用的大多数功能,但是urllib2的API使用起来并不太友好,而requests自称“HTTP for Humans”,经过高度封装以后,可以直接调用此库的相关函数,非常方便帮助我们实现爬取HTML网页页面、模拟自动提交网络请求等操作。 requests模块一直在迭代更新,以完全适应当前的所有网络请求。 支持的 HTTP 特性: 保持活动和连接池 国际域名和 URL Cookie 持久性会话 浏览器式 SSL 验证 自动内容解码 基本 / 摘要身份验证 优雅的键 / 值 Cookie 自动减压 Unicode...
相关文章
文章评论
共有0条评论来说两句吧...