`

使用DBMS_JOB包创建ORACLE定时任务

阅读更多
在Oracle的包里面,有一个名字叫做DBMS_JOB的包,它的作用是安排和管理作业队列。通过作业队列,可以让Oracle数据库定期执行特定的任务。当使用DBMS_JOB管理作业的时候,必须确保设置了初始化参数JOB_QUEUE_PROCESSES(不能为0)。


1、 SUBMIT

该过程用于建立一个新的作业,当建立作业的时候,需要通过设置相应的参数来告诉Oracle要执行的内容,要执行的时间,要执行任务的间隔。如下格式:

DBMS_JOB.SUBMIT(

   JOB OUT BINARY_INTERGER,

   WHAT IN VARCHAR2,

   NEXT_DATE IN DATE DEFAULT SYSDATE,

   INTERVAL IN VARCHAR2 DEFAULT ‘NULL’,

   NO_PARSE IN BOOLEAN DEFAULT FALSE,

   INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,

   FORCE IN BOOLEAN DEFAULT FALSE

);

参数说明:


编号

参数

参数说明


1

job

用于指定作业编号


2

what

用于指定作业要执行的操作


3

next_date

用于指定该操作的下一次运行的日期


4

interval

用于指定该操作的时间间隔


5

no_parse

用于指定是否需要解析与作业相关的过程


6

instance

用于指定哪个例程可以运行作业?


7

force

用于指定是否强制运行与作业相关的例程


建立Oracle作业的例子:

DECLARE

JOBNO NUMBER;                    --通过查看该变量可以得到返回的作业编号

BEGIN

DBMS_JOB.SUBMIT(

        JOBNO,

        'PRC_SENDTOGX;',           --执行工信局提供数据的脚本程序

        SYSDATE,                   --现在执行

        'SYSDATE+1' 

);

END;

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'


每分钟执行一次

'SYSDATE+1/1440'




2、 REMOVE

这个过程的作用是用于删除作业队列当中的特定的作业,它的语法如下:

DBMS_JOB.REMOVE(JOB IN BINARY_INTEGER);

下面是一个删除作业的例子:

首先查看DBA_JOBS表,看表里面有哪些任务正在执行着?

SELECT * FROM DBA_JOBS;

可以看到里面的JOB就是我们要删除的作业的编号,LOG_USER是创建该任务的人。

SQL> EXEC DBMS_JOB.REMOVE(467);

SQL>COMMIT;

这样就能把已经建立的作业删除了。

3、 CHANGE

该过程改变与作业相关的所有的信息,其中包括作业的操作内容,作业运行的时间以及运行时间间隔信息等等。语法如下:

DBMS_JOB.CHANGE(

JOB IN BINARY_INTEGER,

WHAT IN VARCHAR2,

NEXT_DATE,

INTERVAL IN VARCHAR2,

INSTANCE IN BINARY_INTEGER DEFAULT NULL,

FORCE IN BOOLEAN DEFAULT FALSE

);

例子:

SQL>EXEC DBMS_JOB.CHANGE(2,NULL,NULL,’SYSDATE+2’);

SQL>COMMIT;

4、 WHAT

WHAT用来改变作业要执行的操作,例如:

SQL>EXEC DBMS_JOB.WHAT(268,’GETGX_AC01;’);

5、 NEXT_DATE

用来改变作业的下次运行日期

SQL>EXEC DBMS_JOB.NEXT_DATE(‘478’,’SYSDATE+2’);

6、 INTERVAL

该过程用来改变作业的运行时间间隔,下面的运行时间间隔修改为每分钟执行一次:

SQL>exec dbms_job.interval(478,’SYSDATE+1/24/60

7、 BROKEN

该过程用于给该作业打上中断标志,可以在DBA_JOBS表里面观察该作业的BROKEN标志知否为中断。例子:

SQL>EXEC DBMS_JOB.BROKEN(478,TRUE);

SQL>COMMIT;

8、 RUN

该过程用来执行该作业,例子:

SQL>EXEC DBMS_RN(478);

SQL>COMMIT;



常见问题:

1、  如何停止一个作业?

SQL>DBMS_JOBS.BROKEN(2,TRUE);

SQL>COMMIT;

这里务必要提交哈!

2、  如何启动一个作业?

SQL>DBMS_JOBS.BROKEN(2,FALSE);

SQL>COMMIT;

这里也务必要提交,否则就没有效果

3、  前面提到的JOB_QUEUE_PROCESSES在什么地方设置?

ALTER  SYSTEM  SET  job_queue_processes=39 SCOPE=SPFILE;

这个SQL的执行是需要具备相应的权限的。

4、  如何计算一个过程运行的时间(DATE和TimeStamp)?

可以在过程的开始设置一个时间,然后在过程的结尾处设置一个时间,然后两个时间的时间差可以计算出该过程运行的时间。通过实践发现使用SYSESTAMP来计算时间比较准确一些:

SELECT to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff4') FROM dual;
分享到:
评论

相关推荐

    DBMS_JOB包创建ORACLE定时任务

    ### DBMS_JOB包创建Oracle定时任务详解 在Oracle数据库中,`DBMS_JOB`包提供了一种机制,用于创建和管理后台作业(Job),这些作业可以在特定的时间或按一定的时间间隔执行。这对于需要定期执行的任务非常有用,...

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

    Oracle数据库中的DBMS_JOB包是用于创建和管理定时任务的重要工具,它允许用户安排数据库执行特定的PL/SQL过程或存储过程。这个包提供了一系列的子程序,用于创建、修改、启动、停止以及监控数据库作业。下面将详细...

    DBMS_JOB使用方法

    `DBMS_JOB` 是 Oracle 数据库提供的用于调度任务的包,可以实现对定时任务的管理,包括任务的创建、修改、删除及执行等操作。该包提供了多种过程和函数,允许用户以灵活的方式控制定时任务的执行。 #### 二、主要...

    用Oracle的DBMS_JOB来实现任务计划管理.pdf

    使用 Oracle 的 DBMS_JOB 来实现任务计划管理 Oracle 数据库提供了一个功能强大的任务计划管理系统,称为 DBMS_JOB,可以帮助用户实现任务计划管理。在本文中,我们将详细介绍如何使用 Oracle 的 DBMS_JOB 来实现...

    oracle定时任务详解

    接下来,我们将通过具体的示例来展示如何使用DBMS_JOB API来管理和操作Oracle定时任务。 ##### 示例1:创建一个新的job ```sql BEGIN DBMS_JOB.SUBMIT ( job => 1, -- job ID what => 'BEGIN MY_PROCEDURE; END...

    oracle定时任务.txt

    ### Oracle定时任务实现方法 #### 一、使用`DBMS_JOB` 在Oracle数据库中,`DBMS_JOB`包提供了一种简单的方式来安排周期性或一次性的工作。以下将详细介绍如何使用`DBMS_JOB`来创建、运行和管理定时任务。 ##### ...

    ORACLE_JOB_.rar_oracle

    Oracle Jobs 是一种数据库级别的定时任务,通过DBMS_JOB或DBMS_SCHEDULER包来创建和管理。这些包提供了丰富的功能,如周期性执行、延迟启动、依赖关系设定等,使得数据库维护和业务流程自动化变得更加方便。 2. **...

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

    创建 job 定时任务执行需要使用 dbms_scheduler 包,例如: ```sql begin dbms_scheduler.create_job( job_name => 'test_job', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN test_procedure; END;', ...

    oracle定时任务

    首先,Oracle数据库使用DBMS_SCHEDULER包来创建和管理这些定时任务。DBMS_SCHEDULER是一组存储过程和函数,用于创建、修改和控制数据库作业的执行。它取代了早期版本的DBMS_JOB,提供了更强大的功能和灵活性。 1. *...

    oracle的定时任务

    创建Oracle定时任务的过程通常分为三个主要步骤:创建表或存储过程作为任务主体、在`DBMS_JOB`中提交任务并设置运行参数、监控任务状态。 ##### 1. 创建表与存储过程 首先,需在数据库中创建一个表,用于存储任务...

    Oracle定时任务

    Oracle定时任务,是数据库管理中的一个重要组成部分,它允许系统管理员或开发者按照预定义的时间间隔执行特定的任务,如数据备份、清理、报表生成等。在Oracle中,这种功能通常通过DBMS_SCHEDULER或以前的DBMS_JOB包...

    ORACLE创建JOB脚本

    本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时任务。 首先,我们需要理解Oracle中的DBMS_JOB包,这是Oracle提供的一组过程,用于创建、修改和管理JOB。DBMS_JOB包包含以下主要过程: ...

    oracle的job定时

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

    oracle 定时任务,使用存储过程更新数据

    5. **文件名称列表**:`oracle定时任务`和`存储过程`这两个文件名可能是指包含有关如何在实际环境中设置和使用这些功能的文档或脚本。在学习和实践中,可以参考这些文件以获取更具体的步骤和示例。 综上所述,...

    oracle定时任务创建、查询等

    -- job 创建 begin dbms_scheduler.create_job ( job_name => 'AGENT_LIQUIDATION_JOB', job_type => 'STORED_PROCEDURE', job_action => 'AGENT_LIQUIDATION.LIQUIDATION', --存储过程名 start_date...

    oracle定时删除表空间的数据并释放表空间

    使用DBMS_JOB包来创建定时任务。 代码如下: ```sql SQL> variable job_id number; SQL> begin dbms_job.submit(:job_id, 'del_tab;', sysdate, 'sysdate+1/24'); end; ``` 三、查看定时任务 可以使用以下语句来...

    Oracle JOB 用法小结

    Oracle的JOB功能是一种定时任务调度机制,用于在...总之,Oracle的JOB机制提供了强大的定时任务处理能力,通过`dbms_job`包提供的各种过程,可以灵活地管理和控制后台作业的执行,满足系统自动化维护和数据处理的需求。

Global site tag (gtag.js) - Google Analytics