ORACLE JOB 设置
Job的参数:
一:时间间隔执行(每分钟,每天,每周,:每月,每季度,每半年,每年)
interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,
就被从队列中删除。假如 我们需要该job周期性地执行,则要用‘sysdate+m’表示。
1:每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60) 或 Interval => sysdate+1/1440
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
二:
- 在一个特定的时间间隔后,重复运行该任务。
- 在特定的日期和时间运行任务。
- 任务成功完成后,下一次执行应该在一个特定的时间间隔之后。
第一种调度任务需求的日期算法比较简单,即'SYSDATE+n',这里n是一个以天为单位的时间间隔。表1给出了一些这种时间间隔设置的例子。
表1 一些简单的interval参数设置例子
描述 |
Interval参数值 |
每天运行一次 |
'SYSDATE + 1' |
每小时运行一次 |
'SYSDATE + 1/24' |
每10分钟运行一次 |
'SYSDATE + 10/(60*24)' |
每30秒运行一次 |
'SYSDATE + 30/(60*24*60)' |
每隔一星期运行一次 |
'SYSDATE + 7' |
不再运行该任务并删除它 |
NULL |
表1 所示的任务间隔表达式不能保证任务的下一次运行时间在一个特定的日期或者时间,仅仅能够指定一个任务两次运行之间的时间间隔。例如,如果一个任务第一次运 行是在凌晨12点,interval指定为'SYSDATE + 1',则该任务将被计划在第二天的凌晨12点执行。但是,如果某用户在下午4点手工(DBMS_JOB.RUN)执行了该任务,那么该任务将被重新定时到 第二天的下午4点。还有一个可能的原因是如果数据库关闭或者说任务队列非常的忙以至于任务不能在计划的那个时间点准时执行。在这种情况下,任务将试图尽快 运行,也就是说只要数据库一打开或者是任务队列不忙就开始执行,但是这时,运行时间已经从原来的提交时间漂移到了后来真正的运行时间。这种下一次运行时间 的不断“漂移”是采用简单时间间隔表达式的典型特征。
第二种调度任务需求相对于第一种就需要更复杂的时间间隔(interval)表达式,表7是一些要求在特定的时间运行任务的interval设置例子。
表 2. 定时到特定日期或时间的任务例子
描述 |
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' |
每星期六和日早上6点10分 |
'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)' |
第三种调度任务需求无论通过怎样设置interval日期表达式也不能满足要求。这时因为一个任务的下一次运行时间在任务开始时才计算,而在此时是不知道 任务在何时结束的。遇到这种情况怎么办呢?当然办法肯定是有的,我们可以通过为任务队列写过程的办法来实现。这里我只是简单介绍以下,可以在前一个任务队 列执行的过程中,取得任务完成的系统时间,然后加上指定的时间间隔,拿这个时间来控制下一个要执行的任务。这里有一个前提条件,就是目前运行的任务本身必 须要严格遵守自己的时间计划。
将任务加入到任务队列之前,要确定执行任务的数据库用户,若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以DBA的身份将权利授予scott用户: |
svrmgrl> grant execute on dbms_job to scott; |
4.将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段 |
例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令: |
dbms_job.submit(:n‘my_job;’,sysdate, |
如上,我们创建了一个每隔4分钟执行一次的任务号为300的任务。可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况: |
sql> select job,next_date,next_sec,failures,broken from user_jobs; |
job next_date next_sec failures broken |
300 2000/10/10 11:45:15 0 N |
这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次 数达到16时,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新 设置为not broken,或强制调用dbms_job.run来重新执行它。 |
除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务号。
总结:
1、 每分钟执行
Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)
2、 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate) + 1 +2 / (24)
3、 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+2/24
4、 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24
5、 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24
6、 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
7、 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24
what 参数是将被执行的PL/SQL代码块;
next_date 参数指识何时将运行这个工作。写Job的时候可以不指定该值;
interval 参数何时这个工作将被重执行。
分享到:
相关推荐
除了基于时间的触发,还可以设置job在数据库事件(如表的插入、更新或删除)发生时触发。这需要创建一个event-based job,并关联到相应的数据库监听器。 六、异常处理 Oracle Job支持异常处理,允许你在job出错时...
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行 PL/SQL 块或存储过程。Oracle Job 的使用对于实现定时任务、批处理操作和维护工作至关重要。以下是对 Oracle Job 使用的详细解释: 1. *...
从oracle库中导出自定义的job脚本。
### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...
Oracle Job 定时任务 Oracle Job 定时任务是 Oracle 数据库中的一种定时执行任务的机制,它允许用户在指定的...Oracle Job 定时任务提供了一个强大的机制来执行定时任务,可以根据不同的时间间隔和执行频率来设置。
### Oracle Job 创建脚本详解 #### 一、Oracle Job 概述 在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包...
oracle JOB常见的执行时间, 在初学者定义JOB时,对于执行时间往往不知道如何设置. 该文档列举了常见的定义方式.可以由此进行扩展.
Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等。Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler...
10. **安全性**:可以为Job设置权限,限制哪些用户或角色可以执行、修改或查看Job。 通过Oracle Job,数据库管理员可以有效地自动化数据库维护任务,提高系统的可靠性并减少手动干预的需求。理解并熟练使用Oracle ...
Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...
2. DBMS_JOB.SUBMIT:提交一个新任务到调度队列,指定执行的PL/SQL代码或存储过程,并设置初始执行时间和间隔。 3. DBMS_JOB.RUN:立即启动一个已经存在的JOB。 4. DBMS_JOB.SCHEDULE:重新安排一个已存在的JOB,...
从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...
- `next_date`:设置 Job 的首次执行时间,例如 `TRUNC(LAST_DAY(SYSDATE))+2+6/24` 表示下个月的第2天凌晨6点。 - `interval`:定义 Job 的执行间隔,`TRUNC(LAST_DAY(SYSDATE))+2+6/24` 表示每个月的同一天凌晨6...
Oracle JOB 定时任务 定时执行存储过程
在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行时间。本文将详细介绍 Oracle 中创建 Job 的步骤和相关操作。 一、创建 Job 的准备工作 在创建 Job 之前,需要首先创建一个表来存储 Job ...
关于oracle 数据库中job任务如何创建、查询和修改、如何启用job和停止job,可以帮助新手了解job的使用,包括任务运行时间的设置,具体的代码很实用,希望对你有帮助
Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间自动执行PL/SQL代码或存储过程。这在数据库管理和维护中非常有用,特别是对于定期运行的任务,如数据清理、备份、统计分析等。以下是对创建Oracle Job的...
Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...
9. Oracle Job任务的安全:Oracle Job任务的安全可以通过设置Job任务的执行权限、限制Job任务的执行时长等来实现。 10. Oracle Job任务的监控:Oracle Job任务的监控可以通过dba_jobs视图、系统日志、执行日志等来...