`

关于oracle 中的jobs

阅读更多
先给个小例子吧
create table t(a date);  

create or replace procedure testproc() as
 
 begin
  insert into t values(sysdate);  
  end; 
  
  
  
  
 declare JOB1 number; 
      BEGIN
      DBMS_JOB.submit(job=>JOB1,what=>'testproc;',next_date=>SYSDATE,interval=>'sysdate+1');
      commit;
      END; 
      
      
      begin dbms_job.run(:JOB1); end;  
      
      
      begin     dbms_job.remove(1);      end;  
      
select * from t

今天因为工作中要用到这个东东,以前也没怎么接触过,所以现在在这里总结一下

任务重复运行间隔和间隔设计    算法任务重复运行的时间间隔取决于interval参数中设置的日期表达式。下面就来详细谈谈该如何设置interval参数才能准确满足我们的任务需求。一般来讲,对于一个任务的定时执行,有三种定时要求。       在一个特定的时间间隔后,重复运行该任务。       在特定的日期和时间运行任务。       任务成功完成后,下一次执行应该在一个特定的时间间隔之后。       第一种调度任务需求的日期算法比较简单,即'SYSDATE+n',这里n是一个以天为单位的时间间隔。表6给出了一些这种时间间隔设置的例子。      
一些简单的interval参数设置例子   描述 Interval参数值 
每天运行一次 'SYSDATE + 1'
每小时运行一次 'SYSDATE + 1/24'
每10分钟运行一次 'SYSDATE + 10/(60*24)'
每30秒运行一次 'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次 'SYSDATE + 7' 不
再运行该任务并删除它 NULL         
如上所示的任务间隔表达式不能保证任务的下一次运行时间在一个特定的日期或者时间,仅仅能够指定一个任务两次运行之间的时间间隔。例如,如果一个任务第一次运行是在凌晨12点,interval指定为'SYSDATE + 1',则该任务将被计划在第二天的凌晨12点执行。但是,如果某用户在下午4点手工(DBMS_JOB.RUN)执行了该任务,那么该任务将被重新定时到第二天的下午4点。还有一个可能的原因是如果数据库关闭或者说任务队列非常的忙以至于任务不能在计划的那个时间点准时执行。在这种情况下,任务将试图尽快运行,也就是说只要数据库一打开或者是任务队列不忙就开始执行,但是这时,运行时间已经从原来的提交时间漂移到了后来真正的运行时间。这种下一次运行时间的不断“漂移”是采用简单时间间隔表达式的典型特征。       第二种调度任务需求相对于第一种就需要更复杂的时间间隔(interval)表达式,表7是一些要求在特定的时间运行任务的interval设置例子。      
定时到特定日期或时间的任务例子
  描述 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参数设置:


每天运行一次                        'SYSDATE + 1'
每小时运行一次                     'SYSDATE + 1/24'
每10分钟运行一次                 'SYSDATE + 10/(60*24)'
每30秒运行一次                    'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次               'SYSDATE + 7'
每个月最后一天运行一次         'TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,1))) + 23/24'
每年1月1号零时                    'TRUNC(LAST_DAY(TO_DATE(EXTRACT(YEAR FROM SYSDATE)||'12'||'01','YYYY-MM-DD'))+1)'
每天午夜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)'
每个月最后一天的23点           'TRUNC (LAST_DAY (SYSDATE)) + 23 / 24'
每个季度最后一天的晚上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日期表达式也不能满足要求。这时因为一个任务的下一次运行时间在任务开始时才计算,而在此时是不知道任务在何时结束的。遇到这种情况怎么办呢?当然办法肯定是有的,我们可以通过为任务队列写过程的办法来实现。这里我只是简单介绍以下,可以在前一个任务队列执行的过程中,取得任务完成的系统时间,然后加上指定的时间间隔,拿这个时间来控制下一个要执行的任务。这里有一个前提条件,就是目前运行的任务本身必须要严格遵守自己的时间计划。 仅供学习  
分享到:
评论

相关推荐

    oracle jobs 导出为执行脚本

    /*oracle jobs 导出为执行脚本 <br> 就是把all_jobs或dba_jobs,导成DBMS_JOB.SUBMIT可以插入job的格式 其中all_jobs是当前用户的job,dba_jobs则是全部 下面只是随便整理了下,可以按照个人需要修改 ...

    Java Oracle JOBS 自动调度

    NULL 博文链接:https://hubowei1.iteye.com/blog/1564548

    Oracle中job的实例

    Oracle_job包的用法,语法和实例

    oracle JOB常见的执行时间定义

    oracle JOB常见的执行时间, 在初学者定义JOB时,对于执行时间往往不知道如何设置. 该文档列举了常见的定义方式.可以由此进行扩展.

    Oracle JOB 用法小结

     job参数是工作号,它在问题中唯一标识工作。  broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破,而FLASE说明此工作将标记为未破。 dl.bitsCN.com网管软件下载  next_date参数指示在什么时候...

    oracle job停止

    总结如何使oracle job有效停止 不建议使用job

    oracle数据库迁移

    自己亲自写的,很实用的oracle数据库迁移

    Oracle 11g For Dummies.pdf

    How to automate jobs with the Oracle Scheduler Using SQL in Oracle, and a great deal more Completely up to date for the newest release of Oracle, Oracle 11g For Dummies will give you both the ...

    Oracle.11g新特性--RemoteJobs

    Oracle.11g新特性--RemoteJobs(远程作业)

    Linux and Solaris Recipes for Oracle DBAs(Apress,2ed,2015)

    Linux and Solaris Recipes for Oracle DBAs, 2nd Edition is an example–based book on managing Oracle Database under Linux and Solaris. The book is written for database administrators who need to get ...

    Oracle创建job

    oracle Job创建、管理、监控,Job运行情况分析,如果创建、删除、停止、修改Job.

    Oracle 主要配置文件介绍

    系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量就定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/...

    oracle示例数据库

    员工表包含:employees表,departments表,locations表,job_grades表,jobs表:

    Oracle jobs(DBMS_JOB and DBMS_SCHEDULER)

    NULL 博文链接:https://wuaner.iteye.com/blog/717793

    最完整的Toad For Oracle使用手册

    Jobs 933 Libraries 936 Materialized Views (Snapshots) 938 Materialized View (Snapshot) Logs 940 Oracle Scheduler 941 Packages 953 Policies 955 Policy Groups 956 Procedures 957 Profiles 959 Queue ...

    Oracle用RMAN和DBMS_JOB包实现自动存储1

    ORACLE 数据库备份分为物理备份和逻辑备份。物理备份是数据库文件拷贝的备份,冷备份、热备份属于物理备份。 导出/导入(EXPORT/IMPORT)工具用于进行逻辑备份。冷备份是在数据库被正常关闭之后进行的数据文件的物理...

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

    给大家详细介绍了dbms_job的用法,用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。有需要的朋友们可以参考借鉴。

    ORACLE大表分区

    支持自动ORACLE大表分区: 版本进度: 31. 20110420 V2.2 支持任意表任意时间字段分区 以下为安装部署部分: 1.分区相关脚本部署执行顺序,安装前请确保该用户拥有管理员权限, 同时请执行GRANT CREATE ANY TABLE ...

    How to diagnose the high CPU utilization of ORACLE.EXE in Windows environment

    As per your knowledge database activity is normal, no new jobs are running. Keen to drill down the Oracle process/SQL using high CPU. Unlike UNIX, OSPID is generic for ORACLE.EXE and doesn't represent...

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

Global site tag (gtag.js) - Google Analytics