`
hbdzhm
  • 浏览: 35064 次
  • 来自: ...
社区版块
存档分类
最新评论

job里INTERVAL参数设置

阅读更多
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


严格地 讲,interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列中删除。假如 我们需要该job周期性地执行,则要用‘sysdate+m’表示。

============================================================

任务重复运行的时间间隔取决于interval参数中设置的日期表达式。下面就来详细谈谈该如何设置interval参数才能准确满足我们的任务需求。一般来讲,对于一个任务的定时执行,有三种定时要求。

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为任务号。


对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。但是,Oracle定时器Job时间的处理上,千变万化,今天我把比较常用写法汇总如下:

在总结之前,先把Job的参数一一说明一下:

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;

what参数是将被执行的PL/SQL代码块;

next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;

interval参数何时这个工作将被重执行。

其中Interval这个值是决定Job何时,被重新执行的关键。

例如:有存储过程 p_dosomethings,需要被不同的时间间隔执行。

1declare  
2   jobno number;  
3begin  
4   dbms_job.submit(
5     jobno,
6    'p_dosomething;',  --what
7     to_date('20090101020000','yyyy-mm-dd hh24:mi:ss'),--next_date,可以不填
8    'Interval时间字符串'--interval,关键设置
9   );  
10   commit;  
11end;
12
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



参考:http://wt871031.blog.163.com/blog/static/648675162010210102518657/
分享到:
评论

相关推荐

    数据库job的启用及参数设置.docx

    【数据库Job的启用及参数设置】主要涉及到数据库中任务调度的概念和实现方法,特别是Oracle数据库中的Job Queue(任务队列管理器)。这个功能允许用户预设任务,使其能够在指定的时间自动执行,适用于需要定期对...

    数据库job的启用及参数设置.pdf

    【数据库Job的启用及参数设置】是关于数据库中任务调度的重要概念,主要应用于自动化执行数据库相关的维护工作,如备份、更新、删除等。在大型数据库系统中,利用数据库内置的Job Queue(任务队列管理器)能有效提高...

    job定时器操作存储过程

    定时器的执行时间间隔是通过`INTERVAL`参数指定的,其值是一个PL/SQL表达式,通常涉及日期函数。下面是一些常见的时间间隔设置示例: 1. **每分钟执行**: ``` INTERVAL => TRUNC(SYSDATE, 'MI') + 1/(24*60) ``...

    oracle job使用详解

    这需要指定 `job` 参数(Job 的唯一标识)、`what` 参数(要执行的 PL/SQL 代码)、`next_date` 参数(首次执行的日期和时间)和 `interval` 参数(之后的执行间隔)。在本例中,`interval => 'trunc(sysdate)+1+1/...

    oracle_job的创建更改及删除

    该过程需要四个参数:`job`、`what`、`next_date` 和 `interval`。其中,`job` 是作业的编号,`what` 是执行的任务的名称及其输入参数,`next_date` 是任务执行的时间,`interval` 是任务执行的时间间隔。 例如,...

    Oracle中job的使用详解.docx

    INTERVAL 参数可以设置 job 的执行间隔,例如每天午夜 12 点、每周二中午 12 点、每月第一天的午夜 12 点等等。 Oracle 中的 job 是一种非常强大的功能,可以帮助开发者自动执行各种复杂的业务逻辑。但是,需要正确...

    oracle job 用法

    - `job`:输出参数,返回创建的Job编号。 - `what`:执行的PL/SQL代码块或存储过程名。 - `next_date`:Job首次执行的日期和时间。 - `interval`:后续重复执行的间隔,例如`'SYSDATE+1'`表示每天执行一次。 - `no_...

    oracle中的job的用法

    设置Job时,需要指定何时执行任务,即INTERVAL参数。它是一个日期/时间表达式,可以指定不同的时间间隔来运行Job。例如,'TRUNC(SYSDATE+1)'表示每天午夜12点执行,'TRUNC(SYSDATE+1)+(8*60+30)/(24*60)'表示每天...

    ORACLE创建JOB脚本

    2. DBMS_JOB.SUBMIT:提交一个新任务到调度队列,指定执行的PL/SQL代码或存储过程,并设置初始执行时间和间隔。 3. DBMS_JOB.RUN:立即启动一个已经存在的JOB。 4. DBMS_JOB.SCHEDULE:重新安排一个已存在的JOB,...

    oracle中JOB总结

    该参数应根据实际环境中的JOB需求进行调整,避免设置得过大导致JOB无法及时执行,或过小增加不必要的系统资源消耗。 在SNP执行JOB的过程中,它首先以JOB所有者的身份创建一个新的数据库会话,然后根据JOB的NLS设置...

    oracle job

    3. **调度Job**:使用`repeat_interval`参数设定Job的执行频率,例如每日、每周、每小时等。间隔可以非常灵活,可以根据需要定制。 4. **监控Job**:可以使用DBA视图(如DBA_JOBS, ALL_JOBS, USER_JOBS)来查看Job...

    Oracle中job的使用详解

    使用 Oracle 的 Job 需要设置初始化参数 job_queue_processes,否则将无法使用 Job。可以使用以下命令设置初始化参数: sql> alter system set job_queue_processes=n; 其中,n 是一个大于 0 的整数,最大值为 ...

    Oracle JOB 用法小结

    首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过SQL语句`alter system set job_queue_processes=n;`设置该参数,其中`n`代表期望的并发作业数量,最大值为1000。要查看当前的作业队列后台...

    Oracle中job的使用详解.pdf

    接着,文档给出了INTERVAL参数的一些示例值,以展示如何设置不同的定时计划。例如,'TRUNC(SYSDATE + 1)'表示每天午夜执行,'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'则是每天早上8点30分执行。这些表达式使用了...

    Oracle Job定时任务

    * `NLS_ENV` 和 `MISC_ENV`: 任务运行的 NLS 会话设置和其他一些会话参数。 二、执行间隔 Interval Interval 是用于计算下一运行时间的表达式,可以根据不同的时间间隔来设置。例如: * 每天午夜 12 点:`TRUNC...

    oracleJob创建脚本

    - **dbms_job.submit()**:这是创建Job的关键函数,其参数意义如下: - `job`:指定Job的标识符,通常是一个由Oracle自动分配的数字。在这个例子中,使用了`:job`作为占位符,意味着在执行时会动态赋值。 - `what`...

    DBMS_JOB使用方法

    ### DBMS_JOB 使用方法详解 ...此外,通过对任务执行时间、执行频率等参数的设置,可以灵活地满足不同的业务需求,提高系统的自动化水平。在实际应用中,开发者可以根据具体的需求选择合适的过程来实现所需的功能。

    oracle job的用法

    Job 的其他管理操作包括修改执行操作(`DBMS_JOB.WHAT`),调整下次执行时间(`DBMS_JOB.NEXT_DATE`),设置执行间隔(`DBMS_JOB.INTERVAL`),暂停 Job(`DBMS_JOB.BROKEN`),以及恢复 Job(`DBMS_JOB.RUN`)。...

    job 一些操作文档

    1. **Job调度参数设置**:用于控制Job队列的并发处理能力。 - `job_queue_processes`:该参数决定了可以同时运行的最大Job数量,默认值为1000。可以通过如下命令进行修改: ```sql ALTER SYSTEM SET job_queue_...

    Oracle Job定时任务.docx

    `INTERVAL`参数定义了Job的执行频率,它可以设置为各种时间间隔,例如: - 每天午夜12点:`INTERVAL => 'TRUNC(SYSDATE + 1)'` - 每天早上8点30分:`INTERVAL => 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'` - 每...

Global site tag (gtag.js) - Google Analytics