`

关于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 自动调度

    本话题将聚焦于“Java Oracle JOBS 自动调度”,这是一个关于如何使用Java编程语言与Oracle数据库相结合来实现自动任务调度的知识点。在企业系统中,自动调度功能对于定期执行诸如数据备份、报表生成、系统维护等...

    ORACLE如何停止一个JOB

    在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行的JOB,包括关键步骤、涉及的表与视图以及具体...

    Oracle中job的实例

    ### Oracle中的Job定时任务详解与应用 #### 一、Oracle Job概述 在Oracle数据库中,Job是一种非常重要的机制,用于实现数据库的定时任务自动化。它主要用于执行预定义的PL/SQL代码块,如存储过程或者匿名块等。Job...

    Oracle JOB 用法小结

    要查看相关作业信息,可以查询视图`dba_jobs`、`all_jobs`和`user_jobs`,以及`dba_jobs_running`以获取正在运行的作业信息。此外,`V$LOCK`视图可用于查看JOB队列锁的相关信息。 在实际操作中,可以通过创建表、...

    Oracle.11g新特性--RemoteJobs

    以下是关于 Remote Jobs 的详细解释和配置步骤。 远程作业主要由两个组件组成:调度程序和调度程序代理(SA)。调度程序是 Oracle 数据库中的一个组件,负责安排和管理作业。而代理则是安装在远程机器上的软件,它...

    SQL SERVER连接oracle数据库几种方法

    在上面的代码中,我们使用 OPENDATASOURCE 连接到 Oracle 数据库,然后选择 DAIMIN.JOBS 表中的所有数据。 方法 2:使用链接服务器 在 SQL Server 中,我们可以创建一个链接服务器,以便连接到 Oracle 数据库。...

    关于oracle计划任务设置的实例.rar

    在Oracle中,计划任务(也称为调度程序)是一项重要的管理功能,允许管理员安排数据库操作在特定时间自动执行,例如数据备份、统计信息收集、表空间的自动扩展等。本教程将通过实例深入探讨如何在Oracle中设置计划...

    Oracle可执行文件,包含导入导出可执行文件

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在数据管理、事务处理和企业级应用中扮演着核心角色。在Oracle数据库中,导入(import)和导出(export)是两个重要的工具,用于数据迁移、备份和恢复。本...

    oracle job创建脚本

    Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间自动执行PL/SQL代码或存储过程。这在数据库管理和维护中非常有用,特别是对于定期运行的任务,如数据清理、备份、统计分析等。以下是对创建Oracle Job的...

    Oracle数据字典

    这些视图被称为动态视图,因为它们提供了关于Oracle实例运行时的动态性能和统计信息。动态视图通常以V$开头,它们是基于X$虚拟视图的,其中X$是一个虚拟的、私有的实例级视图集合,可供SYS用户访问。通常,只有SYS...

    oracle JOB常见的执行时间定义

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

    job(oracle定时任务)界面管理工具

    Oracle的定时任务,通常被称为“Jobs”,是数据库管理系统中的一个重要组成部分,主要用于自动化执行数据库操作,如数据备份、数据清理、报告生成等。Job界面管理工具则为这些任务提供了图形化的配置和管理界面,...

    实现 Oracle 连接 SQL Server

    此文件中的 `(HOST=192.168.1.15)` 和 `(PORT=1521)` 指定了 Oracle 数据库服务器的 IP 地址和端口。 3. **tnsnames.ora 文件配置**:同样位于 `$ORACLE_HOME/network/admin/` 目录下的 `tnsnames.ora` 文件需要...

    Oracle培训教材.doc

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。本文主要探讨Oracle SQL的基础知识,包括SQL语句分类、Oracle数据类型、运算符以及简单的SELECT语句。 首先,SQL语句主要...

    oracle实验二视图

    本实验涵盖了 Oracle 中的视图概念、创建视图、显示视图的内容、从数据字典视图中选择视图的名字和文本、使用视图查询数据、创建带有条件的视图、显示视图的结构和内容、更新视图、创建复杂视图等内容,为读者提供了...

    oracle数据库的xml文件数据查询

    ### Oracle数据库中的XML数据查询与处理 在Oracle数据库中,对于存储在数据库中的XML文件进行查询和处理是一项非常实用的功能。这种能力可以帮助我们更高效地管理数据,并且能够灵活地应对那些半结构化数据(例如...

    ORACLE_日常维护知识大全

    根据提供的文档内容,可以看出这是一份关于Oracle 10g数据库日常维护的手册。尽管文档中包含了一些非相关的网站链接,但我们可以从已有的结构和标题中提炼出一系列重要的Oracle数据库维护知识点。以下是对这份文档...

Global site tag (gtag.js) - Google Analytics