【Oracle】使用dbms_job包创建Oracle定时任务
1、 SUBMIT
该过程用于建立一个新的作业,当建立作业的时候,需要通过设置相应的参数来告诉Oracle要执行的内容,要执行的时间,要执行任务的间隔。如下格式:
DBMS_JOB.SUBMIT(
JOB OUT BINARY_INTERGER,
WHAT IN VARCHAR2,
NEXT_DATE IN DATE DEFAULT SYSDATE,
INTERVAL IN VARCHAR2 DEFAULT ‘NULL’,
NO_PARSE IN BOOLEAN DEFAULT FALSE,
INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,
FORCE IN BOOLEAN DEFAULT FALSE
);
参数说明:
| 编号 | 参数 | 参数说明 | 
| 1 | job | 用于指定作业编号 | 
| 2 | what | 用于指定作业要执行的操作 | 
| 3 | next_date | 用于指定该操作的下一次运行的日期 | 
| 4 | interval | 用于指定该操作的时间间隔 | 
| 5 | no_parse | 用于指定是否需要解析与作业相关的过程 | 
| 6 | instance | 用于指定哪个例程可以运行作业? | 
| 7 | force | 用于指定是否强制运行与作业相关的例程 | 
建立Oracle作业的例子:
--如果表存在就删除,然后创建一个新表
drop table testjob cascade constraints;
create table testjob(
id number constraint testjob_id_pk primary key,
name varchar2(30)
); --如果序列存在就删除,然后创建一个序列
drop sequence testjob_id_seq;
create sequence testjob_id_seq; --创建一个序列,每一次向表中插入一条数据,并且表中的id字段值使用序列指定
create or replace procedure insert_job
is
begin
insert into testjob values(testjob_id_seq.nextval,'test'||testjob_id_seq.currval);
commit;
end;
/ declare
jobno binary_integer;
begin
--提交,操作的时间间隔设置为1分钟
dbms_job.submit(jobno,'insert_job();',sysdate,'sysdate+1/(24*60)');
--打印序列号
dbms_output.put_line('jobno='||jobno);
--运行
dbms_job.run(jobno);
end;
/
interval参数值
| 描述 | Interval参数值 (部分需要验证一下) | 
| 每天午夜12点 | 'TRUNC(SYSDATE + 1)' | 
| 每天早上8点30分 | 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' | 
| 每星期二中午12点 | 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' | 
| 每个月第一天的午夜12点 | 'TRUNC(LAST_DAY(SYSDATE ) + 1)' | 
| 每个季度最后一天的晚上11点 | 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' | 
| 每分钟执行一次 | 'SYSDATE+1/1440' | 
2、 REMOVE
这个过程的作用是用于删除作业队列当中的特定的作业,它的语法如下:
DBMS_JOB.REMOVE(JOB IN BINARY_INTEGER);
下面是一个删除作业的例子:
首先查看DBA_JOBS表,看表里面有哪些任务正在执行着?
SELECT * FROM DBA_JOBS;
可以看到里面的JOB就是我们要删除的作业的编号,LOG_USER是创建该任务的人。
SQL> EXEC DBMS_JOB.REMOVE(467);
SQL>COMMIT;
这样就能把已经建立的作业删除了。
3、 CHANGE
该过程改变与作业相关的所有的信息,其中包括作业的操作内容,作业运行的时间以及运行时间间隔信息等等。语法如下:
DBMS_JOB.CHANGE(
JOB IN BINARY_INTEGER,
WHAT IN VARCHAR2,
NEXT_DATE,
INTERVAL IN VARCHAR2,
INSTANCE IN BINARY_INTEGER DEFAULT NULL,
FORCE IN BOOLEAN DEFAULT FALSE
);
例子:
SQL>EXEC DBMS_JOB.CHANGE(2,NULL,NULL,’SYSDATE+2’);
SQL>COMMIT;
4、 WHAT
WHAT用来改变作业要执行的操作,例如:
SQL>EXEC DBMS_JOB.WHAT(268,’GETGX_AC01;’);
5、 NEXT_DATE
用来改变作业的下次运行日期
SQL>EXEC DBMS_JOB.NEXT_DATE(‘478’,’SYSDATE+2’);
6、 INTERVAL
该过程用来改变作业的运行时间间隔,下面的运行时间间隔修改为每分钟执行一次:
SQL>exec dbms_job.interval(478,’SYSDATE+1/24/60
7、 BROKEN
该过程用于给该作业打上中断标志,可以在DBA_JOBS表里面观察该作业的BROKEN标志知否为中断。例子:
SQL>EXEC DBMS_JOB.BROKEN(478,TRUE);
SQL>COMMIT;
8、 RUN
该过程用来执行该作业,例子:
SQL>EXEC DBMS_RN(478);
SQL>COMMIT;
常见问题:
1、 如何停止一个作业?
SQL>DBMS_JOBS.BROKEN(2,TRUE);
SQL>COMMIT;
这里务必要提交哈!
2、 如何启动一个作业?
SQL>DBMS_JOBS.BROKEN(2,FALSE);
SQL>COMMIT;
这里也务必要提交,否则就没有效果
3、 前面提到的JOB_QUEUE_PROCESSES在什么地方设置?
ALTER SYSTEM SET job_queue_processes=39 SCOPE=SPFILE;
这个SQL的执行是需要具备相应的权限的。
4、 如何计算一个过程运行的时间(DATE和TimeStamp)?
可以在过程的开始设置一个时间,然后在过程的结尾处设置一个时间,然后两个时间的时间差可以计算出该过程运行的时间。通过实践发现使用SYSESTAMP来计算时间比较准确一些:
SELECT to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff4') FROM dual;
【Oracle】使用dbms_job包创建Oracle定时任务的更多相关文章
- ORACLE数据库DBMS_JOB的创建与使用
		http://my.oschina.net/u/2309120/blog/371437 创建 DBMS_JOB 使用以下语句: VARIABLE jobno number;begin DBMS_JOB ... 
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
		数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ... 
- Oracle触发器原理、创建、修改、删除
		本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ... 
- ORACLE之UTL_FILE包详解
		1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录. 方法: ... 
- 【Oracle XE系列之三】使用OMF方式手工创建Oracle XE数据库
		环境:win10_X64_Pro 1.创建数据库实例,实例名为PF C:\oraclexe\app\oracle\product\11.2.0\server\bin>oradim -new -s ... 
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)
		当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ... 
- Oracle DBA管理包脚本系列(二)
		该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ... 
- 在64位SQL Server中创建Oracle的链接服务器 Link Server
		有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接. 数据库链接能够让本地的一个s ... 
- oracle 如何预估将要创建的索引的大小
		一.1 oracle 如何预估将要创建的索引的大小 oracle 提供了2种可以预估将要创建的索引大小的办法: ① 利用包 Dbms_space.create_index_cost 直接得到 ② ... 
随机推荐
- 闲聊DNN CTR预估模型
			原文:http://www.52cs.org/?p=1046 闲聊DNN CTR预估模型 Written by b manongb 作者:Kintocai, 北京大学硕士, 现就职于腾讯. 伦敦大学张 ... 
- Android OpenGL ES和OpenGL一起学(二)------理解Viewport(视口)和坐标系Android OpenGL ES篇(转帖)
			来自:http://www.cnblogs.com/xiaobo68688/archive/2011/12/01/2269985.html 首先我们在屏幕中心显示一个矩形,效果如图: // 代 ... 
- [React] Validate React Forms with Formik and Yup
			Validating forms in React can take several lines of code to build. However, Formik's ErrorMessage co ... 
- 转载:Unicode和Utf-8有何区别 转载自知乎 原文作者不详
			作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ... 
- linux 查找文件或者服务
			[root@localhost ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/m ... 
- C#.NET常见问题(FAQ)-如何改变字符串编码
			使用Encoding.Convert方法即可实现转换 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: ... 
- iOS编程(双语版) - 视图 - 基本概念
			1. 什么是视图? 视图显示为手机上的一块矩形区域,管理该区域的所有屏幕显示,它是UIView或者UIView的子类. 视图既可以从xib生成,也可以用代码生成. 2. 窗口 窗口是UIWindow或 ... 
- spring Ioc 实践
			了解过IoC的概念,没有真正实践,感觉还是会比较模糊.自己的实践虽然简单,但还是记录下呀~ 1. 通过注解的方式注入service 1.1 controller中创建对象 @Controller @R ... 
- 【 D3.js 入门系列 — 11 】 入门总结
			D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作 ... 
- ajax请求,返回值为304 Not Modified 错误原因与解决办法
			先说原因吧,这是因为http请求的缓存问题引起的 前后调用了两个相同的请求,服务器懒得给你重新发一个请求,所以就304咯 那怎么办呢? 解决方法也很简单,加一个时间戳就行了 比如: 原请求为: $.g ... 
