Oracle 定时任务讲解

前几天,公司的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点执行

原文地址:https://www.cnblogs.com/eija/p/10720163.html

时间: 2024-11-02 19:26:16

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

oracle定时任务

一.简介 当我们需要oracle数据库定时自动执行一些脚本,或进行数据库备份.数据库的性能优化,包括重建索引等工作是需要使用到定时任务. 定时任务可以使用以下两种完成. 1.操作系统级的定时任务,win的定时任务,unix的crontab 2.数据库级的定时任务. 相对来说,数据库的定时任务效率会更高. oracle的定时任务:使用oracle定时任务时,需要使用到oracle中dbms_job.submit函数. DBMS_JOB过程的公共参数 Job BINARY_INTEGER 任务的唯一

oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)

oracle 定时任务 job 调用存储过程有返回输出参数(含out参数) 因前台调用一个含有OUT参数的存储过程,同时在JOB里也想调用同一个存储过程,不想将OUT参数去掉重新建一个存储过程再被JOB调用.虽然OUT参数在JOB里没有任何意义,但是考虑到程序最简化,不重复建设,采用了如下方法,即在调用存储过程前先定义参数变量.以下s1,s2均为OUT参数,希望对大家有所帮助.begin  sys.dbms_job.submit(job => :job1,                    

oracle定时任务(dbms_job)

我们要做定时任务时,有两种办法 一种是: 操作系统的定时,win的定时任务,unix的crontab一种是: 数据库级的定时,她的效率更高, 再有大量的表级操作时,建议用数据库本身的job queue,这样方便,效率高;如果用系统级定时,会增加很多编程工作,成本增加了,还很容易出错,事情越简单出错的几率越小. 再使用job queue之前,我们还要简单配置下,oracle定时执行job queue 的后台进程是SNP,要启动 snp,首先看系统模式是否支持 sql> alter system e

Oracle定时任务(1)-DBMS_SCHEDULER

来自:http://blog.csdn.net/fw0124/article/details/6753715 Oracle 10g之前,可以使用dbms_job来管理定时任务.10g之后,Oracle引入dbms_scheduler来替代先前的dbms_job,在功能方面,它比dbms_job提供了更强大的功能和更灵活的机制/管理. 使用dbms_scheduler创建一个定时任务有两种形式1)创建1个SCHEDULER来定义计划,1个PROGRAM来定义任务内容,再创建1个JOB,为这个JOB

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

用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.submit(:jobno, —-job号                  'your_procedure;',—-执行的存储过程, ';'不能省略                 next_date, —-下次执行时间                  'interval' —-每次间隔时间,int

Oracle定时任务执行存储过程备份日志记录表

写在前面 需求 备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 2.查出T_S_LOG中需要备份的数据 3.将数据赋给游标变量 4.遍历游标将数据逐条插入T_S_LOG_BAK 5.创建无参存储过程将游标的这部分操作作为存储过程主体执行 6.创建定时任务定时执行该存储过程 操作环境 Oracle11g T_S_LOG日志表(部分数据) 1 -- ----------

ORACEL创建存储过程和根据Oracle定时任务机制执行存储过程

oracle定时执行存储过程 --创建一个存储过程,每天定时执行,将满足条件的设备插入到pinpai_Report表中. CREATE OR REPLACE procedure prc_job_report is begin INSERT into pinpai_Report SELECT s.type, s.remark, G .GROUPID, s."CATEGORY" CATEGORY, s.DEVTYPE devtype, s.VENDOR vendor, SUM (CASE

oracle定时任务(dbms_job)的时间设置参考

最后那一项可以参考如下: 每天午夜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 )

ORACLE循序渐进讲解(第二讲)

一.ORACLE常用数据类型(其他类型不太常用) (1)字符类型 1.char 定长,最大2000字符.例如:char(10) '小明' 前四个字符放'小明'后添加6个空格补全. 2.varchar2(20) 变长,最大4000字符.例如:varchar(10) '小明' oracle分配四个字符,这样可心节省空间. 3.clob(character large objiect)字符型大对象最大4G (2)数字类型 number范围-10的38次方到10的38次方,可以表示整数,也可以表示小数.