`

ORACLE数据库定时任务—DBMS_JOB

阅读更多
oracle系统包——dbms_job用法(oracle定时任务)


用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。

一、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); 
4、修改下次执行时间:dbms_job.next_date(jobno, next_date); 
5、修改间隔时间:dbms_job.interval(jobno, interval);
6、启动job: dbms_job.run(jobno); 
7、停止job: dbms.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            下一次定时运行任务的时间

以下使用一个案例来演示dbms_job的使用

一、在plsql中创建表:


create table t(

  id   varchar2(30),

  name varchar2(30)

);


二、在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;

/


三、创建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


四、跟踪任务的情况(查看任务队列):




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;查看定时任务的结果。可以看出定时任务是正常执行了的。
   
五、停止定时任务
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,表示定时任务已停止。

六、启动定时任务
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,表示定时任务启动成功。

七、查看进程数
show parameter job_queue_processes;
必须大于0,否则执行下面的命令修改:
alter system set job_queue_processes=10;

八、再创建一个任务(每5分钟执行一次):




variable jobno number;

begin

   dbms_job.submit(:jobno, 'proce_t;', sysdate, 'sysdate+1/24/12'); --interval是以天为单位的

   commit;

end;

/


九、 执行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)
3.每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。
分享到:
评论

相关推荐

    oracle数据库定时任务dbms_job的用法详解

    Oracle数据库中的DBMS_JOB包是用于创建和管理定时任务的重要工具,它允许用户安排数据库执行特定的PL/SQL过程或存储过程。这个包提供了一系列的子程序,用于创建、修改、启动、停止以及监控数据库作业。下面将详细...

    DBMS_JOB包创建ORACLE定时任务

    ### DBMS_JOB包创建Oracle...总之,`DBMS_JOB`包是Oracle数据库中非常强大的工具,用于自动化和调度周期性任务,通过灵活运用其提供的各种功能,可以有效地管理数据库中的定时作业,提高系统的运维效率和数据处理能力。

    用Oracle的DBMS_JOB来实现任务计划管理.pdf

    Oracle 数据库提供了一个功能强大的任务计划管理系统,称为 DBMS_JOB,可以帮助用户实现任务计划管理。在本文中,我们将详细介绍如何使用 Oracle 的 DBMS_JOB 来实现任务计划管理。 任务计划管理的需求 在许多...

    DBMS_JOB使用方法

    `DBMS_JOB` 是 Oracle 数据库提供的用于调度任务的包,可以实现对定时任务的管理,包括任务的创建、修改、删除及执行等操作。该包提供了多种过程和函数,允许用户以灵活的方式控制定时任务的执行。 #### 二、主要...

    oracle定时任务.txt

    在Oracle数据库中,`DBMS_JOB`包提供了一种简单的方式来安排周期性或一次性的工作。以下将详细介绍如何使用`DBMS_JOB`来创建、运行和管理定时任务。 ##### 创建定时任务 ```sql -- 创建一个用于执行的任务过程 ...

    oracle定时任务详解

    Oracle数据库中的定时任务(也称为作业或job)是Oracle系统中一个非常重要的子系统,它可以帮助用户自动执行一些常规性的任务,比如备份数据库、清理日志等。通过合理地利用Oracle定时任务,可以极大地提高系统的...

    oracle定时任务

    首先,Oracle数据库使用DBMS_SCHEDULER包来创建和管理这些定时任务。DBMS_SCHEDULER是一组存储过程和函数,用于创建、修改和控制数据库作业的执行。它取代了早期版本的DBMS_JOB,提供了更强大的功能和灵活性。 1. *...

    oracle的定时任务

    为了使任务队列正常运行,还需在初始化参数文件`init*.ora`中设置`JOB_QUEUE_PROCESSES`参数,指定处理任务队列的后台进程数量,一般设置为1到36之间的一个整数。 #### 结论 Oracle的定时任务功能提供了强大的自动...

    ORACLE_JOB_.rar_oracle

    在Oracle数据库系统中,"JOB" 是一个非常重要的概念,它允许用户在预定义的时间执行一系列的数据库操作,如数据加载、备份、清理任务等。本文将深入探讨Oracle中的Jobs,包括它们的工作原理、创建方法、调度以及管理...

    oracle的job定时

    Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...

    ORACLE创建JOB脚本

    在Oracle数据库系统中,"JOB"是用于调度和自动化任务执行的一种功能,它允许你在预定义的时间点运行存储过程、PL/SQL块或其他数据库操作。本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时...

    oracle 定时任务,使用存储过程更新数据

    Oracle数据库系统提供了强大的定时任务管理功能,这在企业级应用中极为重要,因为它们能够按照预设的时间间隔执行特定的任务,比如数据更新、备份、报表生成等。在本主题中,我们将深入探讨如何利用Oracle的存储过程...

    oracle定时执行存储过程.pdf

    在Oracle数据库中,定时执行存储过程是一项非常实用的功能,尤其适用于需要定期执行的任务,比如数据备份、数据清理、统计汇总等场景。通过设置定时任务,可以有效减轻管理员的工作负担,并确保关键业务流程的自动化...

    Oracle数据库恢复管理器及特殊包应用 (1)

    通过DBMS_JOB,DBA可以设置定时任务,让系统在特定时间自动运行备份脚本或者数据处理过程,从而减轻了日常维护的负担。 DBMS_JOB包的使用方法包括创建作业、调度作业和监控作业状态。首先,使用DBMS_JOB.BEGIN_JOB...

    Oracle JOB 用法小结

    Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...

    如何在Oracle数据库中实现定时操作

    在Oracle数据库中实现定时操作是通过Oracle的任务队列管理器(Job Queue)来完成的,这一功能使得数据库管理员能够预定义任务并在特定时间点或周期性执行,避免了手动操作和潜在的用户不一致问题。Oracle数据库的...

    Oracle定时任务

    Oracle定时任务,是数据库管理中的一个重要组成部分,它允许系统管理员或开发者按照预定义的时间间隔执行特定的任务,如数据备份、清理、报表生成等。在Oracle中,这种功能通常通过DBMS_SCHEDULER或以前的DBMS_JOB包...

Global site tag (gtag.js) - Google Analytics