踩坑系列の Oracle dbms_job简单使用
二话不说先上代码
--创建存储过程
create or replace procedure job_truncateState is
begin
--此处就是要定时执行的sql
execute immediate 'TRUNCATE TABLE T_TOKEN';
end;
/
declare job number;
begin
sys.dbms_job.submit(job, 'job_truncateState;', sysdate, 'TRUNC(sysdate)+1+12/(24)');
end
commit;
/
commit;
细节说明
这段代码可用plsql工具new菜单栏下的sql window执行,如果不想创建存储过程procedure,可以直接用job window创建,只是此时生成的脚本无法使用sql window执行。该方法用工具操作很简单,此处就不举例啦(啊喂,要学会举一反三好不,。。。别揭我短毕竟懒啊哈哈哈)
加上这个“execute immediate”,不为装13,起初还以为是我哪里符号出了问题,还是博客大法好,这不,前人留下经验之谈,如果不加的话就会编译异常而导致创建失败,具体原因还未去了解。有兴趣的完全可以抛弃此文扬长而去观摩其他大佬的文章~
要执行的sql还有job.submit里边job名字后面,都要记得加分号,不然可能同样会引起编译异常,养成好习惯记得加上最好啦哈哈哈。
job number在声明declare后系统会给你分配一个,同样用job window创建时,无需画蛇添足手动添加作业务号,我还没试过,有兴趣的可以踩踩更大的坑哈哈哈。
sysdate是下一次执行时间next_date。用sql创建时必须显示指定,系统会自己算(Pass:此处指oracle数据库的系统时间,暗中观察比实际时间要稍慢,引起原因多种多样,一时说不清,所以不要大惊小怪即可= =)也就是sysdate,用job window创建时可以不指定,同样都是默认用创建job的时间。
重头戏之时间设置。代码中TRUNC(sysdate)+1+12/(24)意思 是每天十二点执行一次,具体语法此处不多敖述,下方贴上多个实例,大家多看几眼对比一下就懂了哎我说真的。
每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/(24*60)
每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
- 创建完毕可在procedures文件夹查看存储过程,在DBMS_Jobs查看作业。一般创建后系统就会自动运行。
查看运行效果
select job,last_date,next_date,broken,failures from user_jobs
一般看这几个足够了,愿意的话直接查看所有也行,其他字段没啥好看的。都是字面意思,需要说明的就只有两个。broken指是否正在运行,N表示正在运行,Y表示已停止;failures指失败次数,不论是右键手动run还是用sql跑,失败次数都会记录。user_jobs指当前用户拥有的所有job。
那么问题来了
做完以上动作我竟然只运行了一次!也就是刚手动run的时候执行了一次就不再执行了,当然我也不是说第二天才知道结果,毕竟第一次搞这个,我会先用30秒执行一次来确保能够执行,然后再把时间换做每天十二点即可。庆幸的是我有这个习惯,不幸的是果不其然不是我的错,我和我的编译器都惊呆了!不耻下问的吱了领导一声,说是数据库配置的问题——job_queue_processes。这不,几分钟的事搞了我几个小时,姜还是老的辣啊实在可怕...由于不是我自己解决的,虽然有查到问题所在,但是没有权限去尝试,这里就不误导大家啦,随便一搜“dbms_job 只执行一次”等关键字就有许多大佬篇章,有兴趣有条件的自己去尝试啦~
那又如何停止
1. 查看作业号
就是上面查看运行效果的sql
2. 停止作业
begin
dbms_job.broken(这里是你的job号, true, sysdate);
commit;
end;
/
3. 查看是否停止成功
还是上面查看运行效果的sql,如果broken字段值为Y就说明停止成功。
总结
其实并没有抱怨说浪费多少时间,只是小白就应该如此去多踩坑,然后自学,查资料,一步一步,印象才会深刻。当然啦也要讲方法,还有就是遇到问题后要懂得如何根据关键字搜索,脑筋稍微转转弯还是必要的,总不能说,搞了一整天连相关的关键字都说不出来,那就说不过去了吧。呵呵,作为码畜的我居然说起大道理来,实在是打脸,惭愧。虽有食言毕业前不花时间作技术文,可怎么想都应该做个笔记,又不想花时间以后还要再搬一次,干脆一次性弄完算了呼~
踩坑系列の Oracle dbms_job简单使用的更多相关文章
- jmeter踩坑系列
1.踩坑系列一: 抓包出来有host的字段,放到jmeter里面一起请求就报错了,去掉就请求正常了 1.踩坑系列二: 从花瓶复制过去 的values 前面有空格,肉眼看起来没有
- WebGL 踩坑系列-3
WebGL 踩坑系列-3 绘制球体 在 WebGL 中绘制物体时需要的顶点是以直角坐标表示的, 当然了,gl_Position 是一个四维的向量,一般将顶点赋值给 gl_Position 时,最后一维 ...
- python踩坑系列之导入包时下划红线及报错“No module named”问题
python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...
- electron踩坑系列之一
前言 以electron作为基础框架,已经开发两个项目了.第一个项目,我主要负责用react写页面,第二项目既负责electron部分+UI部分. 做项目,就是踩坑, 一路做项目,一路踩坑,坑多不可怕 ...
- Vue踩坑系列
前言 前端开发对于vue的使用已经越来越多,它的优点就不做介绍了, 本篇是我对vue使用过程中遇到的问题中做的一些总结,帮助大家踩坑.如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家!!! ...
- 踩坑系列:MySql only_full_group_by配置,竟导致所有应用报错?
1. 踩坑经历 一个很平常的下午,大家都在埋头认真写bug呢,突然企业微信群里炸锅了,好多应用都出现大量的Error日志,而且都报同一个错误,就是下面这个: Caused by: com.mysql. ...
- 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常
1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...
- Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧
一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...
- uni-app——想说爱你不容易之踩坑系列
1.uni-app不支持动态组件,目前在用i-if判断,或者用scroll-view切换,没有想到什么其他的办法 2.uni-app不支持具名插槽,会导致页面塌陷 3.uni-app在做动态组件渲染的 ...
随机推荐
- ansible实践-1
不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook 支持sudo 有提供UI(浏览器图形化)www.ans ...
- 统计输入的汉字,数字,英文,other数量
主要用正则表达式在完成对汉字,数字,英文数量的验证. import java.util.Scanner; /* * 统计汉字,数字,英文,other * */ public class Test { ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...
- python中重要的模块--asyncio
一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asynci ...
- es2015及es2017对我们的编程方式造成了什么影响?
记一些写代码中用得到的es6+语法,至于什么正则的拓展,数组的什么fill方法,对我们来说用处不大,就不提及了. 还有es6的import模块和class模块,这些在各种框架中都有体现,而且语法简单, ...
- python数据可视化学习1
import matplotlib.pyplot as plt input_values = [1,2,3,4,5] #输入值 squares = [1,4,9,16,25] #输出值 plt.plo ...
- UVA-818 dfs + 位运算
暴力枚举一些圆环,将这些圆环解开,看能否成为单链.判断单链的三个条件: 除了这些删除的圆环之外,其他圆环还连接着的圆环不能超过两个. 剩下的环没有连成圈. 剩下的圆环共分成m堆,每堆之间无连接,m必须 ...
- MacOS下SVN迁移Git踩坑记
1. First Blood 之前在Windows环境下进行svn到git的迁移是很简单的,(参考官方文档:https://git-scm.com/book/zh/v1/Git-%E4%B8%8E%E ...
- 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开
[TOC] 1. bug描述 前段时间遇到这样的一个问题,openstack一个控制节点宕机后,在宕机后一段时间内创建的虚拟机,一直卡在创建中的状态.有的甚至要等到16分钟之后虚拟机才会切换到下一个状 ...
- Hbase多列范围查找(效率)
Hbase索引表的结构 Hbase Rowkey 设计 Hbase Filter Hbase二级索引 Hbase索引表的结构 在HBase中,表格的Rowkey按照字典排序,Region按照RowKe ...