Oracle之job浅析

本文介绍了 Oracle 中使用 job 实现定时任务的方法,包括如何创建、运行、修改及删除定时任务。并提供了实用的 SQL 代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大的项目开发中,封装底层访问数据库的代码常见于使用存储过程,易于维护和扩展。介于不同的业务逻辑,有时会用到job。同时在工作中,时长用到数据沉淀,方便写语句统计实时月报和日报表。也经常用到job。

job是一种oracle定时器

先上一段代码:

variable ps_job1 number;
begin
dbms_job.submit(:ps_job1,'p_sm_test;',to_date('2017-04-21  02:20:00', 'yyyy-mm-dd hh24:mi:ss'),'trunc(sysdate+1, ''dd'')+2/24');
dbms_job.run(:ps_job1);
end;
/
以上功能定义了'p_sm_test' 这个过程在'2017-04-21'的02:20执行,依次+1天,每日执行一次。

job参数是由submit()过程返回的唯一标识来控制一条任务。相信通过以上代码,大家能体会到每个参数所代表的意义。

下面给出一些常用的执行频率,以供参考:

1、每分钟执行:trunc(sysdate,'mi')+1/(24*60)

2、每天定时执行:trunc(sysdate+1, ''dd'')+2/24'

3、每月定时执行:eg:每月1日凌晨2点:trunc(last_day(sysdate)+1+2/24

基本都是这么演化的,可以通过dual表去编写自己想要的时间。


在以上的脚本执行完成后,往往会生成一个job_id,需要及时备注一下。

可以通过这个id去找到执行情况,当然只是上次执行的时间,和执行是否成功,并不能定位里面的过程是否正确跑完,需要自行在过程内添加日志来监控。

select a.* from user_jobs a where a.job ='413';

如果发现执行时间有误,可以通过以下语句来修改,同时也用到了job_id:

exec DBMS_JOB.change(414, NULL, to_date('20170520040000', 'yyyy-mm-dd hh24:mi:ss'), 'trunc(sysdate+1)+4/24');
job_id:
执行完后,不要忘记提交事务。

如果需要失效job,可以执行以下语句:exec DBMS_JOB.remove(412);
切记,不要忘记提交事务。


当然oracle的定时机制不止这一种,我目前知道且接触到的仅有job,以后再遇到别的,我会继续补充










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值