前几天,公司的job调度出现了问题,由于权限管的严,没有查看oracle 一些重要的数据字典,后面联系DBA,是由于数据库切换到备机时,参数设置不对,导致db job没有正常调度。

今天刚好有时间,想总结下 oracle 的定时任务,写的不好的地方,请多多指教!

--1.先检查 oracle job 两个重要参数 job_queue_processes 和 aq_tm_processes

SQL> show parameter job_queue_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 0

SQL> show parameter aq_tm_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0

--2.新建一个序列,作为数据来源

-- Create sequence
create sequence s_seq
minvalue 0
maxvalue 10000
start with 1
increment by 1
order;

--3.新建一张测试表

--create table

create table t_job(
id number,
record_time date
);

--4.创建一个存储过程;

create or replace procedure proc_test_job as
begin
insert into t_job
(id,record_time)
select s_seq.nextval,sysdate from dual;
commit;
end proc_test_job;
/

--5.创建一个定时任务

declare
job_number number;
cursor job_cursor is select * from user_jobs where what like '%proc_test_job%';
begin
for x in job_cursor loop
job_number:=x.job;
sys.dbms_job.remove(job_number);
end loop;
commit;
-- Call the procedure
sys.dbms_job.submit(job => job_number,   --out参数,job编号
what => 'proc_test_job;', --注意有分号
next_date => sysdate + 5/(24*60), --下一个 5分钟执行
interval => 'trunc(sysdate,''mi'')+1/(24*60)' --每隔一分钟执行
);
commit;
end;
/

--6.查看job的信息

select t.JOB, t.NEXT_DATE, t.WHAT, t.INTERVAL, t.*
from user_jobs t
where t.WHAT like '%proc_test_job%';

--7.设置 第 1步中的两个参数

SQL> alter system set job_queue_processes = 10 scope = both;
System altered

SQL> alter system set aq_tm_processes = 1 scope = both;
System altered

--8.查看job的信息以及目标表的数据,从以下查看,确实是每隔1分中执行一次

这样就完成了一个 定时任务的配置了。

关于 job_queue_processes 详细介绍,可以参考  http://blog.sina.com.cn/s/blog_62defbef0101opv0.html 。

aq_tm_processes 参数的讲解,可以参考 http://blog.sina.com.cn/s/blog_61cd89f60102e9lc.html,在此谢谢这两位作者。

在实际工作,由于业务的需要,比如公司经常做活动,那可能会经常调整db job 调度时间。下面讲解一些在工作当中操作job的sp

1.要修改 job 的下次启动时间;

begin
-- Call the procedure
sys.dbms_job.next_date(job => :job,    --job 是入参,对应的是 user_jobs 中的 job字段信息
next_date => :next_date);                     --job 下次启动时间
end;

2.要停止调度 job;

begin
-- Call the procedure
sys.dbms_job.broken(job => :job,
broken => broken,
next_date => :next_date);        -- next_date(指定某一时刻停止) sysdate(立刻停止)
end;

3.删除job

begin
-- Call the procedure
sys.dbms_job.remove(job => :job);
end;

4.启动job

begin
-- Call the procedure
sys.dbms_job.run(job => :job, force => force);
end;

5.修改要执行的job

begin
-- Call the procedure
sys.dbms_job.what(job => :job,
what => :what);
end;

--6.修改job的执行间隔

begin
-- Call the procedure
sys.dbms_job.interval(job => :job,
interval => :interval);
end;

--一些常用的时间设置

1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行
interval => 'sysdate+1/(24*60)' --每分钟执行
interval => 'sysdate+1' --每天
interval => 'sysdate+1/24' --每小时
interval => 'sysdate+2/24*60' --每2分钟
interval => 'sysdate+30/24*60*60' --每30秒
2:每天定时执行
Interval => TRUNC(sysdate+1) --每天凌晨0点执行
Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执行
Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执行
3:每周定时执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2点执行
4:每月定时执行
Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1点执行
5:每季度定时执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后一天的晚上11点执行
6:每半年定时执行
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1点
7:每年定时执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1点执行

Oracle 定时任务讲解的更多相关文章

  1. 最简单的一个Oracle定时任务

    最简单的一个Oracle定时任务一.在PLSQL中创建表:create table HWQY.TEST(CARNO     VARCHAR2(30),CARINFOID NUMBER) 二.在PLSQ ...

  2. oracle定时任务

    一.简介 当我们需要oracle数据库定时自动执行一些脚本,或进行数据库备份.数据库的性能优化,包括重建索引等工作是需要使用到定时任务. 定时任务可以使用以下两种完成. 1.操作系统级的定时任务,wi ...

  3. Oracle定时任务Job笔记

    定时任务应用场景: 某一个生产系统上面,临时表不断变多,占了不少磁盘空间.由于这套软件是直接买的,不方便修改源代码.所以考虑使用Oracle定时任务直接从数据库层删除临时表. 定时任务业务: 首先写好 ...

  4. 【Oracle】使用dbms_job包创建Oracle定时任务

           在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列.通过作业队列,可以让Oracle数据库定期执行特定的任务.当使用DBMS_JOB管理作业的时候, ...

  5. oracle 定时任务例子【项目例子】

    说明:请在plsql工具的命令窗口中,依次按步骤执行如下脚本   (1)建立备份表 my_test_log2create table my_test_log2 as select * from my_ ...

  6. 利用Oracle定时任务重置序列

    业务需求是:二元化编号规则:RYH+年月+001(开始),按月计算,每月1号重置为001 数据库中已有序列和函数如下: 解决方法:采用Oracle定时任务,每月1号重置该序列从1开始增长,SQL如下: ...

  7. Oracle学习(十)Oracle定时任务

    一.Oracle定时任务基础 简介 oracle job 是应用在数据库层面,用来定时执行存储过程或者 SQL 语句的定时器. 查询 --当前库中运行的 job SELECT t.* FROM dba ...

  8. oracle系统包——dbms job用法(oracle定时任务)

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  9. oracle定时任务(dbms_job)

    author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002.shtml 今天总结下Oracle的任务队 ...

随机推荐

  1. 程序或-内存区域分配& ELF分析 ***

    一.在学习之前我们先看看ELF文件. ELF分为三种类型: 1. .o 可重定位文件(relocalble file) 2. 可执行文件 3. 共享库(shared library) 三种格式基本上从 ...

  2. Hyperledger Fabric快速上手

    安装go curl -O https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz tar -xvf go1.10.2.lin ...

  3. Quartz.net 2.x 学习笔记02-Quartz.net 2.x在MVC站点中结合Log4net的使用

    Quartz.net 2.x在MVC站点中结合Log4net的使用 首先新建一个MVC的空站点: 第二步,添加Quartz.net的引用 在搜索处输入quartz.net搜索安装即可(目前是2.3) ...

  4. 分布式缓存系统 Memcached 工作线程初始化

    Memcached采用典型的Master-Worker模式,其核心思想是:有Master和Worker两类进程(线程)协同工作,Master进程负责接收和分配任务,Worker进程负责处理子任务.当各 ...

  5. openstack 租户ip 手动配置 openstack静态租户ip

    作者:[吴业亮]云计算开发工程师 博客:http://blog.csdn.net/wylfengyujiancheng 1.综述: 在日常开发和生产环境中经常需要将OpenStack虚拟机配置一个静态 ...

  6. JS||JQUERY常用语法

    cookieEnabled属性语法 通常可以在浏览器的临时文件夹中保存一个文件,此文件可以包含用户信息(比如浏览过什么页面,是否选择了自动登录)等,这个文件被称作cookie,通过cookieEnab ...

  7. STM32呼吸灯

    使用STM32开发板和mbed平台实现的一个呼吸灯.材料,LED灯,电阻,STM32开发板. 先上一张效果图. 背景: 我们之前设置GPIO口使用了DigitalOut,数字信号输出.只能是GPIO口 ...

  8. TreeView的异步延时加载

    TreeView的延时加载 在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败, 为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载 ...

  9. leetcode216

    public class Solution { public IList<IList<int>> CombinationSum3(int k, int n) { , , , , ...

  10. .NET 调用c++库注意事项

    很久没有更新了,主要还是因为自己懒吧,希望从今天开始坚持至少一周写一篇文章. 调用函数库是正常的,调用完成后,在使用EF进行数据更新时,将发生如下异常信息,而且几乎必现. 行库遇到了错误.此错误的地址 ...