`
goodguyzl
  • 浏览: 47323 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle job的那些事

阅读更多

 

      如果你想每天定时在Oracle里执行一个任务,比如统计表空间增长了多少, 并且把增长状况写入另一个统计表,应该怎么来做呢?

       用编程语言?如Java的Timer和TimerTask来执行定时任务。这种选择太麻烦,你还要单独去运行一个JVM让你的程序执行。能不能在Oracle内部来完成,而不需借助其他程序呢?当然可以。

      Oracle提供了dbms_job这个自带package来完成定时任务的创建(提交), 修改,运行等功能。你可以把你要做的工作写在一个PL/SQL (procedure,function等)里,然后创建一个job来执行这个PL/SQL块,并给出执行初始和间隔等参数:

     (1)

create or replace procedure  test_pro
as
begin
insert into test_table values(sysdate);
end;

     (2)

 

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
  ( job       => X
   ,what      => 'begin practice.test_pro;  end;'
   ,next_date => to_date('12-03-2011 23:58:00','dd/mm/yyyy hh24:mi:ss')
   ,interval  => 'TRUNC(SYSDATE) +1+ 23/24 + 58/1440'
   ,no_parse  => FALSE
  );

COMMIT;
END;
    可以了。

  其实第二步就是创建了一个匿名块,在这个块里调用了dbms_job这个package里procedure来提交任务. 后面来介绍这些参数的意义.

 

  首先,一个job能正常运行, 对Oracle环境的配置是有要求的:

(1) 保证Oracle不在受限会话状态(restricted session)运行,

     

select instance_name,logins from v$instance;
 

  如果 logins=RESTRICTED, 说明需要修改回话状态:

  

alter system disable restricted session;
 

(2) 系统参数JOB_QUEUE_PROCESSES必须大于0(不能超过1000):

   

   查看这个参数:

 

 

 

 

show parameter job_queue_processes
 

   修改:

  

alter system set job_queue_processes=20
  (3) 系统参数必须为true,保证系统的触发功能可以运行:

 

alter system set _SYSTEM_TRIG_ENABLED=true
   

 

以下是这个package所包含的主要procedure:

  submit:

   PROCEDURE Submit ( job   OUT binary_ineger,
            What   IN varchar2,
            next_date IN date,
            interval IN varchar2,
            no_parse IN booean:=FALSE)
  
  job,输出参数,由submit产生,它是job的标识号码。
  what,需要被执行的PL/SQL代码块。
  next_date,这个任务的下一次执行时间,是通过interval计算出来的。
  interval,日期表达式,如果为null,则任务只执行一次。
  no_parse,此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时再进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。

   

     在第一次设置任务执行时间的时候,我把任务的固定时间执行和固定间隔执行搞混了,我想这是一个容易出错的地方。如,我想我的任务在每天晚上23点50分运行,来统计当天的数据。于是next_date我给的to_date('12-03-2011 23:58:00','dd/mm/yyyy hh24:mi:ss'),而interval给的trunc(sysdate) + 1,理所当然的以为 第一次执行后时间加一天嘛,第二天照样这个时候运行. 其实不是这样的, 任务的下一次运行时间(next_date)是在任务开始时计算出来, 它的值其实是interval表达式的值,而不是通过(上一次执行时间+interval)这样的方式得出来。按照我给定的值,第一次执行的时间是正确的,但是第一次执行是算出来的第二次执行时间是 trunc(sysdate)+ 1 即第二天的零点。所以后面的时间都是错的。正确的interval值应该是'TRUNC(SYSDATE) +1+ 23/24 + 58/1440',这样算出来才是第二天的晚上23点58分。关于任务的时间,可以参看:http://blog.csdn.net/li_guang/archive/2008/06/04/2510846.aspx

   

    remove
   PROCEDURE Remove(job IN binary_ineger);


    将一个job从任务队列里删除,参数:job的标识

 

     next_date

     PROCEDURE Next_Date(job     IN binary_ineger,
            next_date  IN date)

    手动设置任务的下一次运行时间

 

    Interval

     PROCEDURE Interval (job   IN binary_integer,


    设置任务执行时间的计算方法.

 

      Change

   PROCEDURE Change (job    IN binary_integer,
           What    IN varchar2,
           next_date IN date,
           interval  IN varchar2)

     修改一个任务

 

    Broken

    PROCEDURE Broken (job    IN binary_integer,
           Broken  IN boolean,
           next_date IN date :=SYSDATE)

    修改任务的状态,  true为可运行,false不可.

     run

     PROCEDURE run(job IN binary_ineger);

    立即运行一个任务

javaeye的这个文章编辑器太让人蛋疼了, 插入的代码格式全没了,我曰,辛辛苦苦写了这么久

分享到:
评论

相关推荐

    Oracle Job的用法

    Oracle Job是Oracle数据库中的一个强大特性,主要用于在特定时间或间隔执行数据库操作,例如数据备份、维护任务或者定期的数据处理。以下是对Oracle Job使用方法和技巧的详细说明: 一、创建Oracle Job Oracle Job...

    导出ORACLE - JOB

    从oracle库中导出自定义的job脚本。

    ORACLE如何停止一个JOB

    ### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...

    oracle job使用详解

    Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行 PL/SQL 块或存储过程。Oracle Job 的使用对于实现定时任务、批处理操作和维护工作至关重要。以下是对 Oracle Job 使用的详细解释: 1. *...

    Oracle Job定时任务

    Oracle Job 定时任务 Oracle Job 定时任务是 Oracle 数据库中的一种定时执行任务的机制,它允许用户在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的 Job 可以通过以下视图查询系统中的 Job: *...

    oracleJob创建脚本

    ### Oracle Job 创建脚本详解 #### 一、Oracle Job 概述 在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包...

    oracle JOB常见的执行时间定义

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

    oraclejob例子

    Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等。Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler...

    oracle job

    Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间执行一系列数据库操作,如PL/SQL块、存储过程、包或操作系统命令。Oracle Job是Oracle的DBMS_SCHEDULER或之前版本中的DBMS_JOB包的一部分,它允许数据库...

    ORACLE创建JOB脚本

    在Oracle数据库系统中,"JOB"是用于调度和自动化任务执行的一种功能,它允许你在预定义的时间点运行存储过程、PL/SQL块或其他数据库操作。本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时...

    oracle job实例 测试通过

    从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...

    Oracle JOB 定时任务

    Oracle JOB 定时任务 定时执行存储过程

    Oracle JOB 用法小结

    Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...

    oracle job 创建

    Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行数据库任务,例如运行存储过程、PL/SQL 块或者 SQL 查询。对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **...

    xxl-job oracle 适配版本

    XXL-JOB选择适配Oracle,意味着它可以更好地服务于那些使用Oracle作为数据存储的企业。 XXL-JOB的核心组件包括调度中心(XXL-JOB-ADMIN)和执行器(XXL-JOB-EXECUTOR)。调度中心负责任务的调度和监控,执行器则...

    oracle的job定时

    Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...

    oracle创建job

    Oracle 创建 Job 实现数据库定期任务 Oracle 中创建 Job 是实现数据库定期任务的重要步骤,可以是定期执行存储过程或者简单的 SQL 语句。在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行...

    oracle JOB的使用

    关于oracle 数据库中job任务如何创建、查询和修改、如何启用job和停止job,可以帮助新手了解job的使用,包括任务运行时间的设置,具体的代码很实用,希望对你有帮助

    oracle-job使用总结

    oracle job 的使用总结,通过dbms 创建job,从而执行存储过程

Global site tag (gtag.js) - Google Analytics