`
guohf
  • 浏览: 419187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

二:

  1. 在一个特定的时间间隔后,重复运行该任务。
  2. 在特定的日期和时间运行任务。
  3. 任务成功完成后,下一次执行应该在一个特定的时间间隔之后。

第一种调度任务需求的日期算法比较简单,即'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用户身份登录,执行如下命令:
sql> variable n number;
sql> begin
dbms_job.submit(:n‘my_job;’,sysdate,
‘sysdate+1/360’);
commit;
end;
/
系统提示执行成功。
Sql> print :n;
系统打印此任务的编号,例如结果为300。
如上,我们创建了一个每隔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             参数何时这个工作将被重执行。

分享到:
评论

相关推荐

    oracle job使用详解

    以下是对 Oracle Job 使用的详细解释: 1. **创建 Job**: 创建 Job 可以通过 `DBMS_JOB.SUBMIT` 存储过程完成。例如,在提供的代码中,创建了一个名为 `syn_rpt_members_relation` 的 Job,设置它每天 1 点执行。...

    oracle job创建脚本

    以下是对创建Oracle Job的详细说明: 1. **DBMS_JOB包**: Oracle DBMS_JOB是一个系统包,提供了创建、修改和删除Job的功能。这个包包含了一系列的子程序,如SUBMIT、B broken、ALTER、DELETE等,用于管理Jobs。 ...

    ORACLE EXPDPIMPDP 参数详解

    ORACLE EXPDP/IMPDP 参数详解 ORACLE EXPDP/IMPDP 是 Oracle 数据库中用于数据泵导出导入的工具,分别对应 EXP 和 IMP 工具。EXPDP/IMPDP 的出现使得 DBA 或开发人员可以将数据库元数据(对象定义)和数据快速移动...

    Oracle中job的使用详解

    Job 中的参数说明: * JOB:任务的唯一标识号。 * LOG_USER:提交任务的用户。 * PRIV_USER:赋予任务权限的用户。 * SCHEMA_USER:对任务作语法分析的用户模式。 * LAST_DATE:最后一次成功运行任务的时间。 * ...

    oracle job的用法

    7. **参数说明**: - `job`:Job 的编号。 - `what`:要执行的 PL/SQL 代码或过程名称。 - `next_date`:下次执行的时间。 - `interval`:执行间隔,可以是基于时间的表达式。 8. **使用注意事项**: - Job 会...

    oracle Job

    通过示例代码,详细解释了如何创建一个存储过程以及如何通过Oracle Job实现该存储过程的自动执行。此外,还简要介绍了Job的运行和管理方法。利用Oracle Job功能,可以大大提高数据库管理的效率和自动化程度,特别是...

    ORACLE数据泵参数说明

    ORACLE 数据泵参数说明 ORACLE 数据泵是 ORACLE 数据库的逻辑备份工具,通过使用 expdp 命令可以完成数据的逻辑备份。下面将详细介绍 expdp 命令的参数说明: 1. ATTACH:该选项用于客户会话与已存在到的处作用...

    Oracle中job的实例

    #### 二、Job的基本参数解释 在创建Job时,需要指定几个关键参数: 1. **Job No**: 这是一个由`dbms_job.submit()`过程返回的`BINARY_INTEGER`类型值,用于唯一标识一个Job。 2. **What**: 指将要执行的PL/SQL代码...

    oracle-Job-管理.pdf

    以下是对Oracle Job管理的详细解释: 1. **创建Job**: 在Oracle中,你可以通过创建存储过程来定义需要自动执行的任务,然后使用DBMS_JOB包来创建Job。例如,描述中的`create_date_log_row`存储过程就是用来插入...

    oracle_job.doc

    以下是对 Oracle Job 使用和配置的详细说明: 1. **Job 参数**: - **job**:这是通过 `DBMS_JOB.SUBMIT` 过程返回的一个二进制整数,用于唯一标识一个工作。 - **what**:这是将要执行的 PL/SQL 代码块或存储...

    Oracle中job的使用详解.docx

    2. job 的参数说明 Oracle 中 job 的参数有很多,包括 job 的唯一标识号、提交任务的用户、赋予任务权限的用户、对任务作语法分析的用户模式、最后一次成功运行任务的时间、正在运行任务的开始时间、下一次定时...

    ORACLE定时任务不能自动执行的检查修复步聚

    7. Oracle 定时任务的检查和修复步聚:通过检查 JOB_QUEUE_PROCESSES 参数的设置和修改,重启数据库,可以修复 Oracle 定时任务不能自动执行的问题。 这篇文章总结了 Oracle 定时任务不能自动执行的问题的检查和...

    Oracle定时执行存储过程

    broken 参数指示此工作是否将标记为破——TRUE 说明此工作将标记为破,而 FALSE 说明此工作将标记为未破。next_date 参数指示在什么时候此工作将再次运行。 Change() 过程 Change() 过程用于改变指定工作的设置。...

    xxl-job-admin-2.4.1-SNAPSHOT之oracle版

    部署过程中,需要将XXL-JOB的配置文件中的数据库连接信息替换为实际的Oracle数据库连接参数。 此外,"xxlJob"可能是解压后的文件夹名,其中可能包含了xxl-job-admin的源代码、配置文件、依赖库等。在部署时,你需要...

    Oracle通过Job调用存储过程.pdf

    Oracle Job 调用存储过程详解 本文档主要讲述了使用 Oracle Job 调用存储过程的详细步骤和相关知识点。首先,作者描述了遇到的问题:实时采集系统每 5 分钟传送流量数据,但没有累计流量数据。为了解决这个问题,...

    大型项目Oracle sql,function,procedures,package,cursor,job

    标题和描述中提到的“大型项目Oracle sql,function,procedures,package,cursor,job”涉及的是Oracle数据库管理和开发的核心概念。以下是对这些概念的详细解释: 1. **SQL(Structured Query Language)**:SQL...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    oracle

    通过上述对`DBMS_JOB`包的过程和函数的详细说明,我们可以看到Oracle的Job调度机制为数据库管理员提供了强大的自动化工具,不仅能够简化日常维护工作,还能提高数据处理效率和系统可靠性。正确理解和应用这些功能,...

Global site tag (gtag.js) - Google Analytics