在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列。通过作业队列,可以让Oracle数据库定期执行特定的任务。当使用DBMS_JOB管理作业的时候,必须确保设置了初始化参数JOB_QUEUE_PROCESSES(不能为0)。

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;

原文连接:使用DBMS_JOB包创建Oracle定时任务

【Oracle】使用dbms_job包创建Oracle定时任务的更多相关文章

  1. ORACLE数据库DBMS_JOB的创建与使用

    http://my.oschina.net/u/2309120/blog/371437 创建 DBMS_JOB 使用以下语句: VARIABLE jobno number;begin DBMS_JOB ...

  2. 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  3. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  4. ORACLE之UTL_FILE包详解

    1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        ...

  5. 【Oracle XE系列之三】使用OMF方式手工创建Oracle XE数据库

    环境:win10_X64_Pro 1.创建数据库实例,实例名为PF C:\oraclexe\app\oracle\product\11.2.0\server\bin>oradim -new -s ...

  6. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ...

  7. Oracle DBA管理包脚本系列(二)

    该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...

  8. 在64位SQL Server中创建Oracle的链接服务器 Link Server

    有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接. 数据库链接能够让本地的一个s ...

  9. oracle 如何预估将要创建的索引的大小

    一.1  oracle 如何预估将要创建的索引的大小 oracle 提供了2种可以预估将要创建的索引大小的办法: ①  利用包 Dbms_space.create_index_cost 直接得到 ②  ...

随机推荐

  1. (转)【风宇冲】Unity3D教程宝典之AssetBundles:第二讲

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                             AssetBundles第二讲:AssetBundles与脚本 所有Unity的As ...

  2. 前端框架 Vue 初探

    一.前言 前几日使用微信网页版时,好奇这个网页用了什么前端框架.用Chrome的开发人员模式一探到底,发现原来用了一个名叫 Angular 的框架.好吧,既然微信用了.那我也最好还是看看.等等,你这篇 ...

  3. 页面显示This is the initial start page for the WebDriver server.的解决办法

    今天在做项目的时候,遇到一个奇怪的问题,打开浏览器是正常的,但是页面不会跳转到需要的URL,而是提示一行白字,如图: 反复研究了脚本,没有问题啊,但是就是不跳转. 后来查了下,在某论坛上找到了答案: ...

  4. 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

    转载:https://www.abcdocker.com/abcdocker/2065 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkin ...

  5. LeetCode Anagrams My solution

    Anagrams Given an array of strings, return all groups of strings that are anagrams. Note: All inputs ...

  6. maven 添加jar到中央/远程仓库

    maven 添加jar到中央/远程仓库 开源中国 发表于 2014-08-23 00:08:00 commond: mvn deploy:deploy-file -DgroupId=com.tima. ...

  7. Mycat读写分离、主从切换学习(转)

    http://blog.csdn.net/zhanglei_16/article/details/50707487 Mycat读写分离.主从切换学习问题一:分表.分库的优缺点,以及分表无法成为主流分表 ...

  8. Objective-C编程 - 关于Block的要点

    1. 首先,我们快速过一下,什么是Block? Block是一段代码,它在OC中以^开头,可以有返回值,和参数列表,但就是没有名字. 所以,你可以把它认为是匿名函数. 事实上,它和Swift中的闭包( ...

  9. 部分Android或IOS手机拍照后照片被旋转的问题

    1.我们平时手机拍的照片,传到电脑后,使用Photoshop或者其它图片浏览工具打开时,发现图片是被转过的.可是Windows上预览却是正的.其实原因是部分Android或IOS手机拍照后,将图片角度 ...

  10. 无法将 Ethernet0连接到虚拟网络 VMnet8 以及无法使用桥接的详细解决步骤

    前言 首先我们需要明确如下表所示的对应关系: 网络类型 网络适配器名 Bridged   VMnet0 NAT   VMnet8 Host-only      VMnet1   解决"无法将 ...