oracle中的job(定时任务)由dbms_job包下的函数实现。
关于job的理论知识可参考https://blog.csdn.net/apextrace/article/details/7767506

一、dbms_job涉及到的知识点

1、创建job:
variable jobno number;
dbms_job.submit(:jobno, —-job号
'your_procedure;',—-执行的存储过程, ';'不能省略
next_date, —-下次执行时间
'interval' —-每次间隔时间,interval以天为单位
);
–系统会自动分配一个任务号jobno。
2、删除job: dbms_job.remove(jobno);
3、修改要执行的操作job:dbms_job.what(jobno, what); --what是新的操作(存储过程)
4、修改下次执行时间:dbms_job.next_date(jobno, next_date);
5、修改间隔时间:dbms_job.interval(jobno, interval);
6、启动job: dbms_job.run(jobno);
7、停止job: dbms_job.broken(jobno, broken, nextdate); –broken为boolean值

二、初始化相关参数job_queue_processes

1、job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为0时表示全部停止oracle的job。
2、查看job_queue_processes参数
方法一:
show parameter job_queue_process;
方法二:
select * from v$parameter where name='job_queue_processes';
3、修改job_queue_processes参数
alter system set job_queue_processes = 10;

三、user_jobs表结构

字段(列)      类型                描述
job number 任务的唯一标示号
log_user varchar2(30) 提交任务的用户
priv_user varchar2(30) 赋予任务权限的用户
schema_user varchar2(30) 对任务作语法分析的用户模式
last_date date 最后一次成功运行任务的时间
last_sec varchar2(8) 如hh24:mm:ss格式的last_date日期的小时,分钟和秒
this_date date 正在运行任务的开始时间,如果没有运行任务则为null
this_sec varchar2(8) 如hh24:mm:ss格式的this_date日期的小时,分钟和秒
next_date date 下一次定时运行任务的时间

四、示例

1、在plsql中创建表:
create table t(
id varchar2(30),
name varchar2(30)
); 2、在plsql中创建存储过程:
create or replace procedure proce_t is
begin
insert into t(id, name) values('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
commit;
end proce_t;
/ 3、创建job任务(1分钟执行一次):
在sql>后执行:
variable jobno number;
begin
dbms_job.submit(:jobno,'proce_t;', sysdate, 'sysdate+1/24/60');
commit;
end;
/
提交后提示:
pl/sql procedure successfully completed
jobno
---------
25 4、跟踪任务的情况(查看任务队列):
sql> select job, next_date, next_sec, failures, broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
25 2012/9/14 1 10:59:46 0 n
说明任务已创建成功。
执行select * from t;查看定时任务的结果。可以看出定时任务是正常执行了的。 5、停止定时任务
(1)查看定时任务的job号。
sql> select job, next_date, next_sec, failures, broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
25 2012/9/14 1 11:01:48 0 n
(2)停止一个已启动的定时任务:
begin
dbms_job.broken(25, true, sysdate);
commit;
end;
/
表示停止job为25的任务。 执行后显示如下:
pl/sql procedure successfully completed
(3)查看定时任务是否已停止成功
sql> select job, next_date, next_sec, failures, broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
25 4000/1/1 00:00:00 0 y
broken值为y,表示定时任务已停止。 6、启动定时任务
(1)查看停止定时任务
sql> select job, next_date, next_sec, failures, broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
25 4000/1/1 00:00:00 0 y
broken值为y,表示定时任务已停止。
(2)启动定时任务
begin
dbms_job.run(25);
commit;
end;
/
(3)查看定时任务是否已启动
sql> select job, next_date, next_sec, failures, broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
25 2012/9/14 1 11:06:17 0 n
broken值为n,表示定时任务启动成功。 7、查看进程数
show parameter job_queue_processes;
必须大于0,否则执行下面的命令修改:
alter system set job_queue_processes=10; 8、再创建一个任务(每5分钟执行一次):
variable jobno number;
begin
dbms_job.submit(:jobno, 'proce_t;', sysdate, 'sysdate+1/24/12'); --interval是以天为单位的
commit;
end;
/ 9、 执行
select job,next_date,next_sec,failures,broken from user_jobs;
结果:
sql> select job,next_date,next_sec,failures,broken from user_jobs; job next_date next_sec failures broken
---------- ----------- ---------------- ---------- ------
26 2012/9/14 1 11:12:08 0 n
25 2012/9/14 1 11:07:18 0 n

五、总结

关于job运行时间
(1)每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/(24*60)
(2)每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
(3)每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
(4)每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5)每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
(6)每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
(7)每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24 job的运行频率设置
(1)每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
(2)Toad中提供的:
每天:trunc(sysdate+1)
每周:trunc(sysdate+7)
每月:trunc(sysdate+30)
每个星期日:next_day(trunc(sysdate),'星期日')
每天6点:trunc(sysdate+1)+6/24
半个小时:sysdate+30/(24*60)
每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)

  

转自:https://www.jb51.net/article/92575.htm

Oracle中的job(定时任务)的更多相关文章

  1. Oracle中的job的定时任务

    Oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...

  2. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  3. 【转】Oracle job procedure 存储过程定时任务

    原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相 ...

  4. Oracle job procedure 存储过程定时任务(转自hoojo)

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  5. 【JOB】Oracle中JOB的创建方法以及一个细节的探究

    在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能.简单演示一下,供参考. 1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试. ...

  6. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  7. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  8. ORACLE中的LTRIM、RTRIM和TRIM

    LTRIM.RTRIM和TRIM在ORACLE中的用法:1.LTRIM(C1,C2)其中C1和C2都可以字符串,例如C1是'Miss Liu',C2'MisL'等等.这是第一个和SQL SERVER不 ...

  9. oracle中临时表是用来做什么的

    oracle中临时表是用来做什么的 某些情况下, 需要 多个非常大的表关联的情况下, 但是需要检索的, 是少量的数据的时候.可以先把 大表的数据, 检索出那一小部分, 然后插入到 临时表中, 最后再关 ...

随机推荐

  1. Dubbo之负载均衡、并发控制、延迟暴露、连接控制

    1.并发控制 dubbo服务端和消费端都做了并发控制,分别在配置中有相应的对应配置: 服务端:executes服务提供者每服务每方法最大可并行执行请求数,控制并发数量:actives每服务消费者每服务 ...

  2. 关于iview、element-ui重置表单并清除校验的方法

    平时在使用iview或者vue重置表单是时,我会习惯使用 this.$refs[formData].resetFields(); 但是直接这样写上去方法是不起作用的, 内容必须要在每个form-ite ...

  3. [命令行]Mysql 导入 excel 文件

    将 excel 表格中的数据批量导入数据库中 将要导入的表删除字段名,只留下要导入的数据. 将文件另存为 *.csv格式,可以用记事本打开(实际上就是标准的逗号分隔的数据 进入mysql,输入命令,打 ...

  4. 痞子衡嵌入式:聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上的普通GPIO与高速GPIO差异. GPIO 可以说是 MCU 上最简单最常用的外设模块了,当一些原生功能外设接口模块不能 ...

  5. $router 和 $route的区别

    router router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局对象,他包含了所有的路 ...

  6. 华为C/C++编码规范+《数学之美》感想

    1.排版 1.1 程序块要采用缩进风格编写, 缩进的空格数为4个.(说明: 对于由开发工具自动生成的代码可以有不一致)1.2 相对独立的程序块之间.变量说明之后必须加空行.1.3 循环.判断等语句中若 ...

  7. Python 练习 进程

    ... """ 创建2个进程, 每一个进程都打出当前的时间和进程的标识,持续打十次. """ import multiprocessing ...

  8. Spring Cloud Gateway的断路器(CircuitBreaker)功能

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. [loj3014]独特的城市

    约定:一棵树的深度定义为其中到根最远的点到根的距离 考虑节点$x$的答案: 任取一条直径,根据直径的性质,到$x$较远的直径端点一定是到$x$最远的点之一 由此,不难证明对于$x$独特的点,一定在$x ...

  10. c语言是如何解析表达式语句"2+3*4;"的?

    1.  要编译的测试代码: int main(void) { 2+3*4; } 2. 词法分析 词法分析将字符变成token,其中很重要的是token的类型,如字符2的token类型为TK_NUM,这 ...